diff --git a/README.md b/README.md index b9cbf23..d5cdf0b 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,53 @@ import 'react18-json-view/src/style.css' | `CopyComponent` \/ `DoneComponent` \/ `CancelComponent` | `React.FC` \/ `React.Component` `<{ onClick: (event: React.MouseEvent) => void; className: string ; style: React.CSSProperties}>` | - | Customize copy icon. | | `CopiedComponent` | `React.FC` \/ `React.Component` `<{ className: string; style: React.CSSProperties }>` | - | Customize copied icon. | | `CustomOperation` | `React.FC` \/ `React.Component` `<{ node: any }>` | - | Custom Operation | +| `virtual` | `boolean` \| `'auto'` | `'auto'` | Windowed rendering. `'auto'` virtualizes only when the visible-row count exceeds `rowVirtualThreshold` or a `height`/`maxHeight` is set. `true` always windows; `false` forces the legacy inline render. | +| `rowVirtualThreshold` | `integer` | `100` | Under `virtual='auto'`, the visible-row count above which windowing turns on. | +| `height` | `number` \| `string` | - | Fixed height of the scroll viewport (enables windowing). | +| `maxHeight` | `number` \| `string` | `'70vh'` when windowed and no `height` | Grow-to-content up to this height, then scroll. | +| `estimatedRowHeight` | `integer` | `20` | Estimated row height (px) used before a row is measured. | +| `overscan` | `integer` | `8` | Number of rows rendered beyond the viewport on each side. | + +### Virtualization + +Since **v0.3**, the tree is rendered from a flattened list of visible rows, and large documents are +windowed with [`@tanstack/react-virtual`](https://tanstack.com/virtual) so only the rows in view are +mounted. This keeps rendering and interaction fast on documents with tens of thousands of nodes. + +By default (`virtual='auto'`) small/medium documents render inline exactly as before; windowing turns on +automatically once the visible-row count exceeds `rowVirtualThreshold`, or as soon as you set a `height` +or `maxHeight`. When windowed, the component becomes a bounded, scrollable box. + +```tsx +// Explicit bounded viewport — always windowed + + +// Grow up to 60vh, then scroll + + +// Opt out of windowing entirely (legacy inline rendering) + +``` + +Notes: + +- Windowing is **client-only**. Under SSR, small documents render inline (safe to hydrate); force + `virtual={false}` if you server-render very large documents. +- A node passed to `customizeNode` that returns a React element/component renders as a single measured + row; its own subtree is not internally windowed. + +#### Migration from v0.2 + +`v0.3` is a breaking (major) change of the rendering internals: + +- **Bounded height by default for large data.** Once a document is large enough to virtualize, the + component renders inside a scroll container instead of growing to full content height. Pass + `virtual={false}` to restore the old unbounded layout. +- **`onCollapse` semantics fixed.** It no longer fires on mount, and `isCollapsing` is now `true` when a + node is being collapsed (previously the flag was inverted). It fires only on user toggles. +- The recursive DOM (`.jv-indent` blocks, one `.json-view--pair` per key) is replaced by a flat list of + `.jv-row` elements indented via `padding-left`. `onEdit`/`onDelete`/`onAdd`/`onChange` payloads + (including `depth`, `parentPath`, `indexOrName`, `parentType`) are unchanged. ### Collapsed function diff --git a/package.json b/package.json index 9a8154b..c0d90fc 100644 --- a/package.json +++ b/package.json @@ -1,16 +1,18 @@ { "name": "react18-json-view", - "version": "0.2.10", + "version": "0.3.0", "type": "module", "description": "JSON viewer for react18", "main": "dist/cjs/index.cjs", "types": "dist/index", "module": "dist/es/index.mjs", - "brower": "dist/es/index.mjs", + "browser": "dist/es/index.mjs", "scripts": { "dev": "rollup -cw", "dev:website": "turbo run dev --filter=website...", "build": "rollup -c", + "test": "vitest run", + "test:watch": "vitest", "storybook": "storybook dev -p 6006", "build-storybook": "storybook build", "prepare": "husky install", @@ -35,11 +37,16 @@ "@storybook/react": "^7.3.2", "@storybook/react-vite": "^7.3.2", "@svgr/rollup": "^8.1.0", + "@testing-library/jest-dom": "^6.1.5", + "@testing-library/react": "^14.3.1", + "@testing-library/user-event": "^14.5.2", "@types/node": "^18.11.18", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.8", + "@vitejs/plugin-react": "^4.2.1", "autoprefixer": "^10.4.14", "husky": "^8.0.3", + "jsdom": "^23.0.1", "lint-staged": "^13.1.0", "postcss": "^8.4.23", "postcss-loader": "^7.2.4", @@ -55,10 +62,13 @@ "tslib": "^2.7.0", "turbo": "^1.10.13", "typescript": "^5.0.4", - "vite-plugin-svgr": "^3.2.0" + "vite": "4.4.9", + "vite-plugin-svgr": "^3.2.0", + "vitest": "^0.34.6" }, "peerDependencies": { - "react": ">=16.8.0" + "react": ">=16.8.0", + "react-dom": ">=16.8.0" }, "lint-staged": { "**/*": "prettier --write --ignore-unknown" @@ -98,6 +108,7 @@ "*.css" ], "dependencies": { + "@tanstack/react-virtual": "3.14.6", "copy-to-clipboard": "^3.3.3" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ba18b63..4971401 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + '@tanstack/react-virtual': + specifier: 3.14.6 + version: 3.14.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0) copy-to-clipboard: specifier: ^3.3.3 version: 3.3.3 @@ -45,6 +48,24 @@ importers: '@svgr/rollup': specifier: ^8.1.0 version: 8.1.0(rollup@3.9.1)(typescript@5.0.4) + '@testing-library/jest-dom': + specifier: ^6.1.5 + version: 6.1.5(vitest@0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4)) + '@testing-library/react': + specifier: ^14.3.1 + version: 14.3.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.1) + '@testing-library/jest-dom': + specifier: ^6.1.5 + version: 6.1.5(vitest@0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4)) + '@testing-library/react': + specifier: ^14.3.1 + version: 14.3.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + '@testing-library/user-event': + specifier: ^14.5.2 + version: 14.5.2(@testing-library/dom@10.4.1) '@types/node': specifier: ^18.11.18 version: 18.11.18 @@ -54,12 +75,24 @@ importers: '@types/react-dom': specifier: ^18.0.8 version: 18.0.8 + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.2.1(vite@4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4)) + '@vitejs/plugin-react': + specifier: ^4.2.1 + version: 4.2.1(vite@4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4)) autoprefixer: specifier: ^10.4.14 version: 10.4.14(postcss@8.4.23) husky: specifier: ^8.0.3 version: 8.0.3 + jsdom: + specifier: ^23.0.1 + version: 23.0.1 + jsdom: + specifier: ^23.0.1 + version: 23.0.1 lint-staged: specifier: ^13.1.0 version: 13.1.0 @@ -105,9 +138,21 @@ importers: typescript: specifier: ^5.0.4 version: 5.0.4 + vite: + specifier: 4.4.9 + version: 4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4) + vite: + specifier: 4.4.9 + version: 4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4) vite-plugin-svgr: specifier: ^3.2.0 version: 3.2.0(rollup@3.9.1)(typescript@5.0.4)(vite@4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4)) + vitest: + specifier: ^0.34.6 + version: 0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4) + vitest: + specifier: ^0.34.6 + version: 0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4) website: dependencies: @@ -134,7 +179,8 @@ importers: version: 6.2.3 next: specifier: 13.4.19 - version: 13.4.19(@babel/core@7.22.11)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 13.4.19(@babel/core@7.29.7)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + version: 13.4.19(@babel/core@7.29.7)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) postcss: specifier: 8.4.29 version: 8.4.29 @@ -169,6 +215,12 @@ importers: packages: + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + + '@adobe/css-tools@4.5.0': + resolution: {integrity: sha512-6OzddxPio9UiWTCemp4N8cYLV2ZN1ncRnV1cVGtve7dhPOtRkleRyx32GQCYSwDYgaHU3USMm84tNsvKzRCa1Q==} + '@alloc/quick-lru@5.2.0': resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} @@ -185,18 +237,50 @@ packages: resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.29.7': + resolution: {integrity: sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.22.9': resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.29.7': + resolution: {integrity: sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==} + engines: {node: '>=6.9.0'} + '@babel/core@7.22.11': resolution: {integrity: sha512-lh7RJrtPdhibbxndr6/xx0w8+CVlY5FJZiaSz908Fpy+G0xkBFTvwLcKJFF4PJxVfGhVWNebikpWGnOoC71juQ==} engines: {node: '>=6.9.0'} + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.29.7': + resolution: {integrity: sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==} + engines: {node: '>=6.9.0'} + '@babel/generator@7.22.10': resolution: {integrity: sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A==} engines: {node: '>=6.9.0'} + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.29.7': + resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-annotate-as-pure@7.22.5': resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -209,6 +293,14 @@ packages: resolution: {integrity: sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==} engines: {node: '>=6.9.0'} + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.29.7': + resolution: {integrity: sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==} + engines: {node: '>=6.9.0'} + '@babel/helper-create-class-features-plugin@7.22.11': resolution: {integrity: sha512-y1grdYL4WzmUDBRGK0pDbIoFd7UZKoDurDzWEoNMYoj1EL+foGRQNyPWDcC+YyegN5y1DUsFFmzjGijB3nSVAQ==} engines: {node: '>=6.9.0'} @@ -234,6 +326,14 @@ packages: resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==} engines: {node: '>=6.9.0'} + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-globals@7.29.7': + resolution: {integrity: sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==} + engines: {node: '>=6.9.0'} + '@babel/helper-hoist-variables@7.22.5': resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} @@ -246,12 +346,32 @@ packages: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.29.7': + resolution: {integrity: sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.22.9': resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-module-transforms@7.29.7': + resolution: {integrity: sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + '@babel/helper-optimise-call-expression@7.22.5': resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} engines: {node: '>=6.9.0'} @@ -260,6 +380,14 @@ packages: resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==} engines: {node: '>=6.9.0'} + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.29.7': + resolution: {integrity: sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==} + engines: {node: '>=6.9.0'} + '@babel/helper-remap-async-to-generator@7.22.9': resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} engines: {node: '>=6.9.0'} @@ -288,14 +416,38 @@ packages: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.29.7': + resolution: {integrity: sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.22.5': resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.29.7': + resolution: {integrity: sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.22.5': resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.29.7': + resolution: {integrity: sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==} + engines: {node: '>=6.9.0'} + '@babel/helper-wrap-function@7.22.10': resolution: {integrity: sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==} engines: {node: '>=6.9.0'} @@ -304,6 +456,14 @@ packages: resolution: {integrity: sha512-vyOXC8PBWaGc5h7GMsNx68OH33cypkEDJCHvYVVgVbbxJDROYVtexSk0gK5iCF1xNjRIN2s8ai7hwkWDq5szWg==} engines: {node: '>=6.9.0'} + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.29.7': + resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} + engines: {node: '>=6.9.0'} + '@babel/highlight@7.22.13': resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==} engines: {node: '>=6.9.0'} @@ -313,6 +473,16 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.29.7': + resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5': resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} engines: {node: '>=6.9.0'} @@ -335,12 +505,16 @@ packages: '@babel/plugin-proposal-nullish-coalescing-operator@7.18.6': resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead. peerDependencies: '@babel/core': ^7.0.0-0 '@babel/plugin-proposal-optional-chaining@7.21.0': resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -716,12 +890,36 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-self@7.29.7': + resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-self@7.29.7': + resolution: {integrity: sha512-TL0hMc9xzy86VD31nUiwzd5otRAcyEPcsegCxolO0PvcXuH1v0kECe/UIznYFihpkvU5wg/jk4v0TTEFfm53fw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.22.5': resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx-source@7.29.7': + resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx-source@7.29.7': + resolution: {integrity: sha512-06IyK09H3wi4cGbhDBwp5gUGo0IKtnYa8tyTiephirPCK6fbobVGiXMMI5zLQ4aKEYP3wZ3ArU44o+8KMrSG/Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-transform-react-jsx@7.22.5': resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} engines: {node: '>=6.9.0'} @@ -852,14 +1050,38 @@ packages: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.29.7': + resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} + engines: {node: '>=6.9.0'} + '@babel/traverse@7.22.11': resolution: {integrity: sha512-mzAenteTfomcB7mfPtyi+4oe5BZ6MXxWcn4CX+h4IRJ+OOGXBrWU6jDQavkQI9Vuc5P+donFabBfFCcmWka9lQ==} engines: {node: '>=6.9.0'} + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.29.7': + resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + engines: {node: '>=6.9.0'} + '@babel/types@7.22.11': resolution: {integrity: sha512-siazHiGuZRz9aB9NpHy9GOs9xiQPKnMzgdr493iI1M67vRXpnEq8ZOOKzezC5q7zwuQ6sDhdSp4SD9ixKSqKZg==} engines: {node: '>=6.9.0'} + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.29.7': + resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + engines: {node: '>=6.9.0'} + '@base2/pretty-print-object@1.0.1': resolution: {integrity: sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==} @@ -1070,10 +1292,22 @@ packages: typescript: optional: true + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + '@jridgewell/gen-mapping@0.3.3': resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} engines: {node: '>=6.0.0'} + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + + '@jridgewell/remapping@2.3.5': + resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} + '@jridgewell/resolve-uri@3.1.1': resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} engines: {node: '>=6.0.0'} @@ -1088,9 +1322,21 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + '@jridgewell/trace-mapping@0.3.19': resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + + '@jridgewell/trace-mapping@0.3.31': + resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} + '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} @@ -1125,28 +1371,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@next/swc-linux-arm64-musl@13.4.19': resolution: {integrity: sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@next/swc-linux-x64-gnu@13.4.19': resolution: {integrity: sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@next/swc-linux-x64-musl@13.4.19': resolution: {integrity: sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@next/swc-win32-arm64-msvc@13.4.19': resolution: {integrity: sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==} @@ -1627,6 +1869,8 @@ packages: '@storybook/addon-styling@1.3.6': resolution: {integrity: sha512-g4e9vLnNlpjR3hHcyC8iCtgqcWQj6IPK+HZ8PdF92O95sa0nus+NG4meahEBwCsZm6CtYV/QMymFtLnp2NvAmg==} + deprecated: 'This package has been split into @storybook/addon-styling-webpack and @storybook/addon-themes. More info: https://github.com/storybookjs/addon-styling' + deprecated: 'This package has been split into @storybook/addon-styling-webpack and @storybook/addon-themes. More info: https://github.com/storybookjs/addon-styling' hasBin: true peerDependencies: less: ^3.5.0 || ^4.0.0 @@ -2025,6 +2269,54 @@ packages: '@swc/helpers@0.5.1': resolution: {integrity: sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==} + '@tanstack/react-virtual@3.14.6': + resolution: {integrity: sha512-4+Uq8m0/gzO4kMCHUEpTtGX1RnONK0C+g88b2ltwPMWUBiaVarBuWKoPJaz7gj1cKCVRAdyu+U8GcKhwCc2beA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + + '@tanstack/virtual-core@3.17.4': + resolution: {integrity: sha512-nGm5KteqxasUdThLc2izl6dHUqLv0LQj7Nuyo5gYalTPf/U8a9ermvsl7reT+6ioBW1l8WfpP/mcU338nLXpqw==} + + '@testing-library/dom@10.4.1': + resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} + engines: {node: '>=18'} + + '@testing-library/dom@9.3.4': + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + + '@testing-library/jest-dom@6.1.5': + resolution: {integrity: sha512-3y04JLW+EceVPy2Em3VwNr95dOKqA8DhR0RJHhHKDZNYXcVXnEK7WIrpj4eYU8SVt/qYZ2aRWt/WgQ+grNES8g==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + peerDependencies: + '@jest/globals': '>= 28' + '@types/jest': '>= 28' + jest: '>= 28' + vitest: '>= 0.32' + peerDependenciesMeta: + '@jest/globals': + optional: true + '@types/jest': + optional: true + jest: + optional: true + vitest: + optional: true + + '@testing-library/react@14.3.1': + resolution: {integrity: sha512-H99XjUhWQw0lTgyMN05W3xQG1Nh4lq574D8keFf1dDoNTJgp66VbJozRaczoF+wsiaPJNt/TcnfpLGufGxSrZQ==} + engines: {node: '>=14'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -2041,9 +2333,21 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + + '@types/aria-query@5.0.4': + resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==} + '@types/babel__core@7.20.1': resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==} + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + '@types/babel__generator@7.6.4': resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} @@ -2056,6 +2360,22 @@ packages: '@types/body-parser@1.19.2': resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + '@types/chai-subset@1.3.6': + resolution: {integrity: sha512-m8lERkkQj+uek18hXOZuec3W/fCRTrU4hrnXjH3qhHy96ytuPaPiWGgu7sJb7tZxZonO75vYAjCvpe/e4VUwRw==} + peerDependencies: + '@types/chai': <5.2.0 + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + + '@types/chai-subset@1.3.6': + resolution: {integrity: sha512-m8lERkkQj+uek18hXOZuec3W/fCRTrU4hrnXjH3qhHy96ytuPaPiWGgu7sJb7tZxZonO75vYAjCvpe/e4VUwRw==} + peerDependencies: + '@types/chai': <5.2.0 + + '@types/chai@4.3.20': + resolution: {integrity: sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ==} + '@types/connect@3.4.35': resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} @@ -2146,9 +2466,6 @@ packages: '@types/node@18.11.18': resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - '@types/node@18.17.14': - resolution: {integrity: sha512-ZE/5aB73CyGqgQULkLG87N9GnyGe5TcQjv34pwS8tfBs1IkCh0ASM69mydb2znqd6v0eX+9Ytvk6oQRqu8T1Vw==} - '@types/node@18.17.15': resolution: {integrity: sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==} @@ -2218,6 +2535,48 @@ packages: peerDependencies: vite: ^4.1.0-beta.0 + '@vitejs/plugin-react@4.2.1': + resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + '@vitest/expect@0.34.6': + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + + '@vitest/runner@0.34.6': + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + + '@vitest/snapshot@0.34.6': + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + + '@vitest/spy@0.34.6': + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + + '@vitest/utils@0.34.6': + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + + '@vitejs/plugin-react@4.2.1': + resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^4.2.0 || ^5.0.0 + + '@vitest/expect@0.34.6': + resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==} + + '@vitest/runner@0.34.6': + resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==} + + '@vitest/snapshot@0.34.6': + resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==} + + '@vitest/spy@0.34.6': + resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==} + + '@vitest/utils@0.34.6': + resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==} + '@webassemblyjs/ast@1.11.6': resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==} @@ -2316,6 +2675,16 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.17.0: + resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} + engines: {node: '>=0.4.0'} + hasBin: true + address@1.2.2: resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} engines: {node: '>= 10.0.0'} @@ -2332,6 +2701,14 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + + agent-base@7.1.4: + resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} + engines: {node: '>= 14'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -2364,6 +2741,14 @@ packages: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -2394,6 +2779,34 @@ packages: resolution: {integrity: sha512-xcLxITLe2HYa1cnYnwCjkOO1PqUHQpozB8x9AR0OgWN2woOBi5kSDVxKfd0b7sb1hw5qFeJhXm9H1nu3xSfLeQ==} engines: {node: '>=10'} + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + array-flatten@1.1.1: resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} @@ -2404,6 +2817,12 @@ packages: assert@2.0.0: resolution: {integrity: sha512-se5Cd+js9dXJnu6Ag2JFc00t+HmHOen+8Q+L7O9zI0PqQXr20uk2J0XQqMxZEeo5U50o8Nvmmx7dZrl+Ufr35A==} + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + + assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + ast-types@0.14.2: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} @@ -2447,6 +2866,14 @@ packages: resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} engines: {node: '>= 0.4'} + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + babel-core@7.0.0-bridge.0: resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: @@ -2477,6 +2904,16 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} + engines: {node: '>=6.0.0'} + hasBin: true + + baseline-browser-mapping@2.10.43: + resolution: {integrity: sha512-AjYpR78kDWAY3Efj+cDTFH9t9SCoL7OoTp1BOb0mQV7S+6CiLwnWM3FyxhJtdPufDFKzmCSFoUncKjWgJEZTCQ==} + engines: {node: '>=6.0.0'} + hasBin: true + better-opn@3.0.2: resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} engines: {node: '>=12.0.0'} @@ -2527,6 +2964,16 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.28.6: + resolution: {integrity: sha512-FQBYNK15VMslhLHpA7+n+n1GOlF1kId2xcCg7/j95f24AOF6VDYMNH4mFxF7KuaTdv627faazpOAjFzMrfJOUw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -2560,9 +3007,41 @@ packages: engines: {node: '>=10.12.0'} hasBin: true + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + call-bind@1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + call-bind@1.0.9: + resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + callsites@3.1.0: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} @@ -2582,14 +3061,42 @@ packages: caniuse-lite@1.0.30001525: resolution: {integrity: sha512-/3z+wB4icFt3r0USMwxujAqRvaD/B7rvGTsKhbhSQErVrJvkZCLhgNLJxU8MevahQVH6hCU9FsHdNUFbiwmE7Q==} + caniuse-lite@1.0.30001805: + resolution: {integrity: sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + + caniuse-lite@1.0.30001805: + resolution: {integrity: sha512-52noaS3DubycKSXaU30TwPGIp+POyQSUVa5jBEq3vkRkY0kjyb3LQgvhU6WGyCcyXqVLWO0Cw0Q6BSdD0kUfVA==} + + chai@4.5.0: + resolution: {integrity: sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==} + engines: {node: '>=4'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + + check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -2708,6 +3215,12 @@ packages: resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} engines: {'0': node >= 0.8} + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -2791,6 +3304,12 @@ packages: resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} engines: {node: '>= 6'} + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2800,9 +3319,25 @@ packages: resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} + + cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} + csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -2828,6 +3363,28 @@ packages: supports-color: optional: true + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + + decimal.js@10.6.0: + resolution: {integrity: sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==} + + deep-eql@4.1.4: + resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} + engines: {node: '>=6'} + + deep-equal@2.2.3: + resolution: {integrity: sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA==} + engines: {node: '>= 0.4'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} @@ -2839,6 +3396,14 @@ packages: defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + define-lazy-prop@2.0.0: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} @@ -2847,6 +3412,14 @@ packages: resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} engines: {node: '>= 0.4'} + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + defu@6.1.2: resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} @@ -2888,6 +3461,14 @@ packages: didyoumean@1.2.2: resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + diff@4.0.2: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} @@ -2903,6 +3484,12 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + + dom-accessibility-api@0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} + dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -2927,8 +3514,16 @@ packages: resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} engines: {node: '>=12'} - duplexify@3.7.1: - resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -2944,6 +3539,12 @@ packages: electron-to-chromium@1.4.508: resolution: {integrity: sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==} + electron-to-chromium@1.5.391: + resolution: {integrity: sha512-YmCu4856jkgKT1Nh6fwRdeVrM6Ydf/fBnq51tpmSfX+jOcUMTxh31yH6hjKScRenhB2oDSvA9oooxcpjogPeig==} + + electron-to-chromium@1.5.391: + resolution: {integrity: sha512-YmCu4856jkgKT1Nh6fwRdeVrM6Ydf/fBnq51tpmSfX+jOcUMTxh31yH6hjKScRenhB2oDSvA9oooxcpjogPeig==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2969,6 +3570,14 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + envinfo@7.10.0: resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} engines: {node: '>=4'} @@ -2981,12 +3590,50 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + es-module-lexer@0.9.3: resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} es-module-lexer@1.3.0: resolution: {integrity: sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==} + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-object-atoms@1.1.2: + resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + es6-object-assign@1.1.0: resolution: {integrity: sha512-MEl9uirslVwqQU369iHNWZXsI8yaZYGg/D65aOgZkeyFJwHYSxilf7rQzXKI7DdDuBPrBXbfk3sl9hJhmd5AUw==} @@ -3007,6 +3654,14 @@ packages: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} @@ -3141,6 +3796,14 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} @@ -3153,6 +3816,14 @@ packages: resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} engines: {node: '>= 6'} + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + + form-data@4.0.6: + resolution: {integrity: sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==} + engines: {node: '>= 6'} + forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -3190,6 +3861,18 @@ packages: function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} @@ -3198,9 +3881,23 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + + get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} + get-intrinsic@1.2.1: resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + get-nonce@1.0.1: resolution: {integrity: sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==} engines: {node: '>=6'} @@ -3217,6 +3914,14 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -3252,13 +3957,19 @@ packages: glob@7.1.6: resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} + deprecated: Glob versions prior to v9 are no longer supported + deprecated: Glob versions prior to v9 are no longer supported glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + deprecated: Glob versions prior to v9 are no longer supported glob@8.1.0: resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + deprecated: Glob versions prior to v9 are no longer supported globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} @@ -3271,6 +3982,14 @@ packages: gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -3283,6 +4002,14 @@ packages: engines: {node: '>=0.4.7'} hasBin: true + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} @@ -3294,6 +4021,12 @@ packages: has-property-descriptors@1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + has-proto@1.0.1: resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} engines: {node: '>= 0.4'} @@ -3302,14 +4035,38 @@ packages: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + has-tostringtag@1.0.0: resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} engines: {node: '>= 0.4'} + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + has@1.0.3: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + + hasown@2.0.4: + resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==} + engines: {node: '>= 0.4'} + highlight.js@11.8.0: resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} engines: {node: '>=12.0.0'} @@ -3320,6 +4077,14 @@ packages: hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -3331,6 +4096,14 @@ packages: resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} engines: {node: '>= 0.8'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + https-proxy-agent@4.0.0: resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} engines: {node: '>= 6.0.0'} @@ -3339,6 +4112,14 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -3392,10 +4173,20 @@ packages: inflight@1.0.6: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} @@ -3414,13 +4205,37 @@ packages: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + is-arrayish@0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + is-builtin-module@3.2.1: resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} engines: {node: '>=6'} @@ -3432,6 +4247,14 @@ packages: is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + is-deflate@1.0.0: resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} @@ -3468,6 +4291,14 @@ packages: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -3475,6 +4306,14 @@ packages: resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} engines: {node: '>= 0.4'} + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3495,9 +4334,39 @@ packages: resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} engines: {node: '>=0.10.0'} + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + is-reference@1.2.1: resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + is-stream@2.0.1: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} @@ -3506,6 +4375,22 @@ packages: resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + is-typed-array@1.1.12: resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} engines: {node: '>= 0.4'} @@ -3514,6 +4399,22 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + is-what@3.14.1: resolution: {integrity: sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==} @@ -3524,6 +4425,12 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3601,6 +4508,24 @@ packages: peerDependencies: '@babel/preset-env': ^7.1.6 + jsdom@23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + jsesc@0.5.0: resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} hasBin: true @@ -3610,6 +4535,16 @@ packages: engines: {node: '>=4'} hasBin: true + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + json-parse-even-better-errors@2.3.1: resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} @@ -3689,6 +4624,14 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + locate-path@3.0.0: resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} engines: {node: '>=6'} @@ -3719,6 +4662,12 @@ packages: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + + loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} @@ -3733,10 +4682,24 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magic-string@0.30.3: resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} engines: {node: '>=12'} @@ -3768,6 +4731,14 @@ packages: peerDependencies: react: '>= 0.14.0' + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + mdast-util-definitions@4.0.0: resolution: {integrity: sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==} @@ -3882,6 +4853,12 @@ packages: engines: {node: '>=10'} hasBin: true + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + + mlly@1.8.2: + resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} @@ -3921,6 +4898,8 @@ packages: next@13.4.19: resolution: {integrity: sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==} engines: {node: '>=16.8.0'} + deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details. + deprecated: This version has a security vulnerability. Please upgrade to a patched version. See https://nextjs.org/blog/security-update-2025-12-11 for more details. hasBin: true peerDependencies: '@opentelemetry/api': ^1.1.0 @@ -3958,6 +4937,14 @@ packages: node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} + + node-releases@2.0.51: + resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + engines: {node: '>=18'} + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -3980,6 +4967,12 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.24: + resolution: {integrity: sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==} + + nwsapi@2.2.24: + resolution: {integrity: sha512-7YRhZ3jS45LwmSCT4b2sVFHt/WuovaktDU07QrtOBY2PXskss5a9jfmR9jptyumwXST+rFjrmppMY1KT/yn35A==} + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -3991,6 +4984,14 @@ packages: object-inspect@1.12.3: resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + object-is@1.1.5: resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} engines: {node: '>= 0.4'} @@ -3999,6 +5000,14 @@ packages: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -4034,6 +5043,14 @@ packages: resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} engines: {node: '>=10'} + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-locate@3.0.0: resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} engines: {node: '>=6'} @@ -4069,6 +5086,12 @@ packages: resolution: {integrity: sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==} engines: {node: '>= 0.10'} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -4110,6 +5133,18 @@ packages: pathe@1.1.1: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + peek-stream@1.1.3: resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} @@ -4119,6 +5154,12 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -4152,10 +5193,24 @@ packages: resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} engines: {node: '>=10'} + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + polished@4.2.2: resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} engines: {node: '>=10'} + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss-import@15.1.0: resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} engines: {node: '>=14.0.0'} @@ -4297,6 +5352,22 @@ packages: engines: {node: '>=10.13.0'} hasBin: true + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} @@ -4329,6 +5400,12 @@ packages: prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + + psl@1.15.0: + resolution: {integrity: sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==} + pump@2.0.1: resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} @@ -4338,8 +5415,10 @@ packages: pumpify@1.5.1: resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} - punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} puppeteer-core@2.1.1: @@ -4354,6 +5433,12 @@ packages: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -4406,6 +5491,12 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.1.0: resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} @@ -4477,6 +5568,14 @@ packages: resolution: {integrity: sha512-qtEDqIZGVcSZCHniWwZWbRy79Dc6Wp3kT/UmDA2RJKBPg7+7k51aQBZirHmUGn5uvHf2rg8DkjizrN26k61ATw==} engines: {node: '>= 4'} + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + regenerate-unicode-properties@10.1.0: resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==} engines: {node: '>=4'} @@ -4493,6 +5592,14 @@ packages: regex-parser@2.2.11: resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'} @@ -4511,6 +5618,12 @@ packages: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4540,14 +5653,20 @@ packages: rimraf@2.6.3: resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} + deprecated: Rimraf versions prior to v4 are no longer supported + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true rollup-plugin-peer-deps-external@2.2.4: @@ -4561,8 +5680,10 @@ packages: rollup: '>=1.26.3' typescript: '>=2.4.0' - rollup@3.29.1: - resolution: {integrity: sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==} + rollup@3.30.0: + resolution: {integrity: sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==} + rollup@3.30.0: + resolution: {integrity: sha512-kQvGasUgN+AlWGliFn2POSajRQEsULVYFGTvOZmK06d7vCD+YhZztt70kGk3qaeAXeWYL5eO7zx+rAubBc55eA==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true @@ -4571,6 +5692,12 @@ packages: engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -4586,6 +5713,14 @@ packages: safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} @@ -4611,6 +5746,14 @@ packages: sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} @@ -4646,6 +5789,22 @@ packages: resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} engines: {node: '>= 0.8.0'} + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -4661,9 +5820,47 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel-list@1.0.1: + resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + side-channel@1.1.1: + resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -4726,10 +5923,30 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.1: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + store2@2.14.2: resolution: {integrity: sha512-siT1RiqlfQnGqgT/YzXVUNsom9S0H1OX+dpdGN1xkyYATo4I6sep5NmsRD/40s3IIOvlCq6akxkqG82urIZW1w==} @@ -4786,6 +6003,12 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + + strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + style-loader@3.3.3: resolution: {integrity: sha512-53BiGLXAcll9maCYtZi2RCQZKa8NQQai5C4horqKyRmHj9H7QmcUyucrH+4KW/gBQbXM2AsB0axoEcFZPlfPcw==} engines: {node: '>= 12.13.0'} @@ -4834,6 +6057,12 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + synchronous-promise@2.0.17: resolution: {integrity: sha512-AsS729u2RHUfEra9xJrE39peJcc2stq2+poBXX8bcM08Y6g9j/i/PUzwNQqkaJde7Ntg1TO7bSREbR5sdosQ+g==} @@ -4861,6 +6090,8 @@ packages: tar@6.1.15: resolution: {integrity: sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==} engines: {node: '>=10'} + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + deprecated: Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me telejson@7.2.0: resolution: {integrity: sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==} @@ -4918,6 +6149,28 @@ packages: tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinypool@0.7.0: + resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==} + engines: {node: '>=14.0.0'} + + tinyspy@2.2.1: + resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} + engines: {node: '>=14.0.0'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -4939,9 +6192,25 @@ packages: resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} engines: {node: '>=0.6'} + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + + tr46@5.1.1: + resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} + engines: {node: '>=18'} + ts-dedent@2.2.0: resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} engines: {node: '>=6.10'} @@ -5003,6 +6272,14 @@ packages: resolution: {integrity: sha512-vOF5IPytgQPIsgGtT0n2uGZizR2N3kKuPIn4b5p5DdeLoI0BV7uNiydT7eSzdkPRpdXNnO8UwS658VaI4+YSzQ==} hasBin: true + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -5040,6 +6317,12 @@ packages: engines: {node: '>=14.17'} hasBin: true + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + + ufo@1.6.4: + resolution: {integrity: sha512-JFNbkD1Svwe0KvGi8GOeLcP4kAWQ609twvCdcHxq1oSL8svv39ZuSvajcD8B+5D0eL4+s1Is2D/O6KN3qcTeRA==} + uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -5074,6 +6357,14 @@ packages: unist-util-visit@2.0.3: resolution: {integrity: sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==} + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + universalify@2.0.0: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} @@ -5095,9 +6386,27 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-browserslist-db@1.2.3: + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + use-callback-ref@1.3.0: resolution: {integrity: sha512-3FT9PRuRdbB9HfXhEq35u4oZkvpJ5kuYbpqhCfmiZyReuRgpnhDlbr2ZEnnuS0RrJAPn6l23xjFg9kpDM+Ms7w==} engines: {node: '>=10'} @@ -5141,6 +6450,8 @@ packages: uuid@9.0.0: resolution: {integrity: sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==} + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). + deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). hasBin: true v8-compile-cache-lib@3.0.1: @@ -5157,6 +6468,16 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vite-node@0.34.6: + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + + vite-node@0.34.6: + resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==} + engines: {node: '>=v14.18.0'} + hasBin: true + vite-plugin-svgr@3.2.0: resolution: {integrity: sha512-Uvq6niTvhqJU6ga78qLKBFJSDvxWhOnyfQSoKpDPMAGxJPo5S3+9hyjExE5YDj6Lpa4uaLkGc1cBgxXov+LjSw==} peerDependencies: @@ -5190,6 +6511,76 @@ packages: terser: optional: true + vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + vitest@0.34.6: + resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==} + engines: {node: '>=v14.18.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + playwright: '*' + safaridriver: '*' + webdriverio: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + playwright: + optional: true + safaridriver: + optional: true + webdriverio: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -5203,6 +6594,14 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} @@ -5220,18 +6619,78 @@ packages: webpack-cli: optional: true + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.2.0: + resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + which-typed-array@1.1.11: resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} engines: {node: '>= 0.4'} + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} @@ -5280,6 +6739,44 @@ packages: utf-8-validate: optional: true + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + ws@8.21.1: + resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} engines: {node: '>=0.4'} @@ -5317,6 +6814,14 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + + yocto-queue@1.2.2: + resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} + engines: {node: '>=12.20'} + zod@3.21.4: resolution: {integrity: sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==} @@ -5337,6 +6842,10 @@ packages: snapshots: + '@adobe/css-tools@4.5.0': {} + + '@adobe/css-tools@4.5.0': {} + '@alloc/quick-lru@5.2.0': {} '@ampproject/remapping@2.2.1': @@ -5353,8 +6862,24 @@ snapshots: '@babel/highlight': 7.22.13 chalk: 2.4.2 + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.22.9': {} + '@babel/compat-data@7.29.7': {} + + '@babel/compat-data@7.29.7': {} + '@babel/core@7.22.11': dependencies: '@ampproject/remapping': 2.2.1 @@ -5375,6 +6900,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + '@babel/generator@7.22.10': dependencies: '@babel/types': 7.22.11 @@ -5382,6 +6947,22 @@ snapshots: '@jridgewell/trace-mapping': 0.3.19 jsesc: 2.5.2 + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + '@babel/helper-annotate-as-pure@7.22.5': dependencies: '@babel/types': 7.22.11 @@ -5398,6 +6979,22 @@ snapshots: lru-cache: 5.1.1 semver: 6.3.1 + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.6 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.6 + lru-cache: 5.1.1 + semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5411,6 +7008,32 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 + '@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.29.7) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5418,6 +7041,20 @@ snapshots: regexpu-core: 5.3.2 semver: 6.3.1 + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + + '@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + '@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5429,6 +7066,28 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + + '@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.4 + transitivePeerDependencies: + - supports-color + '@babel/helper-environment-visitor@7.22.5': {} '@babel/helper-function-name@7.22.5': @@ -5436,6 +7095,10 @@ snapshots: '@babel/template': 7.22.5 '@babel/types': 7.22.11 + '@babel/helper-globals@7.29.7': {} + + '@babel/helper-globals@7.29.7': {} + '@babel/helper-hoist-variables@7.22.5': dependencies: '@babel/types': 7.22.11 @@ -5448,21 +7111,75 @@ snapshots: dependencies: '@babel/types': 7.22.11 - '@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11)': + '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/core': 7.22.11 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-module-imports': 7.22.5 - '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.29.7': + dependencies: + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.22.9(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + '@babel/helper-module-transforms@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.5 + + '@babel/helper-module-transforms@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@babel/traverse': 7.29.7 + transitivePeerDependencies: + - supports-color + '@babel/helper-optimise-call-expression@7.22.5': dependencies: '@babel/types': 7.22.11 '@babel/helper-plugin-utils@7.22.5': {} + '@babel/helper-plugin-utils@7.29.7': {} + + '@babel/helper-plugin-utils@7.29.7': {} + '@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5470,6 +7187,20 @@ snapshots: '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-wrap-function': 7.22.10 + '@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.10 + + '@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-wrap-function': 7.22.10 + '@babel/helper-replace-supers@7.22.9(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5477,6 +7208,20 @@ snapshots: '@babel/helper-member-expression-to-functions': 7.22.5 '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + + '@babel/helper-replace-supers@7.22.9(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-simple-access@7.22.5': dependencies: '@babel/types': 7.22.11 @@ -5491,10 +7236,22 @@ snapshots: '@babel/helper-string-parser@7.22.5': {} + '@babel/helper-string-parser@7.29.7': {} + + '@babel/helper-string-parser@7.29.7': {} + '@babel/helper-validator-identifier@7.22.5': {} + '@babel/helper-validator-identifier@7.29.7': {} + + '@babel/helper-validator-identifier@7.29.7': {} + '@babel/helper-validator-option@7.22.5': {} + '@babel/helper-validator-option@7.29.7': {} + + '@babel/helper-validator-option@7.29.7': {} + '@babel/helper-wrap-function@7.22.10': dependencies: '@babel/helper-function-name': 7.22.5 @@ -5509,6 +7266,16 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/helpers@7.29.7': + dependencies: + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + '@babel/highlight@7.22.13': dependencies: '@babel/helper-validator-identifier': 7.22.5 @@ -5519,11 +7286,29 @@ snapshots: dependencies: '@babel/types': 7.22.11 + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/parser@7.29.7': + dependencies: + '@babel/types': 7.29.7 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5531,6 +7316,20 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.22.12(@babel/core@7.22.11) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.12(@babel/core@7.29.7) + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.22.12(@babel/core@7.29.7) + '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5554,31 +7353,89 @@ snapshots: dependencies: '@babel/core': 7.22.11 + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5589,21 +7446,61 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5614,41 +7511,121 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5660,11 +7637,33 @@ snapshots: '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-async-generator-functions@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5673,6 +7672,22 @@ snapshots: '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.11) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.11) + '@babel/plugin-transform-async-generator-functions@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.29.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + + '@babel/plugin-transform-async-generator-functions@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.29.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5680,22 +7695,68 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.11) + '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.29.7) + + '@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-imports': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-block-scoping@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-block-scoping@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-block-scoping@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5703,6 +7764,20 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.11) + '@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + + '@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5716,60 +7791,190 @@ snapshots: '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 + '@babel/plugin-transform-classes@7.22.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.29.7) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + + '@babel/plugin-transform-classes@7.22.6(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.29.7) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/template': 7.22.5 + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 + + '@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.5 + '@babel/plugin-transform-destructuring@7.22.10(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.11)': + '@babel/plugin-transform-destructuring@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-destructuring@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.11) + + '@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.11)': + dependencies: + '@babel/core': 7.22.11 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.11) + + '@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.22.11 - '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.29.7) - '@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.11)': + '@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.11) - '@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.11)': + '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.11)': + '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.22.11 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.10 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.11)': + '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.11) - '@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.11)': + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.11) - '@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.11)': + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.11)': + '@babel/plugin-transform-function-name@7.22.5(@babel/core@7.29.7)': dependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.22.10 '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 @@ -5780,28 +7985,84 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.11) + '@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.11) + '@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + + '@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-modules-commonjs@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5809,6 +8070,20 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 + '@babel/plugin-transform-modules-commonjs@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + + '@babel/plugin-transform-modules-commonjs@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + '@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5817,35 +8092,109 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 + '@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + + '@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.5 + '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-module-transforms': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-new-target@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.11) + '@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.11) + '@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + + '@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/compat-data': 7.22.9 @@ -5855,18 +8204,60 @@ snapshots: '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.11) '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.11) + '@babel/plugin-transform-object-rest-spread@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.29.7) + + '@babel/plugin-transform-object-rest-spread@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.11) + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.29.7) + + '@babel/plugin-transform-object-super@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.11) + '@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining@7.22.12(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5874,17 +8265,53 @@ snapshots: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.11) + '@babel/plugin-transform-optional-chaining@7.22.12(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + + '@babel/plugin-transform-optional-chaining@7.22.12(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-parameters@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5893,11 +8320,37 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.11) + '@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + + '@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.11(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-react-constant-elements@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5918,11 +8371,31 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-jsx-self@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + + '@babel/plugin-transform-react-jsx-source@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.29.7 + '@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5944,37 +8417,111 @@ snapshots: '@babel/helper-plugin-utils': 7.22.5 regenerator-transform: 0.15.2 + '@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 + '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + + '@babel/plugin-transform-spread@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-typescript@7.22.11(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -5988,24 +8535,70 @@ snapshots: '@babel/core': 7.22.11 '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.11) '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + + '@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.29.7) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/preset-env@7.22.14(@babel/core@7.22.11)': dependencies: '@babel/compat-data': 7.22.9 @@ -6084,9 +8677,181 @@ snapshots: '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.11) '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.11) '@babel/types': 7.22.11 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.11) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.11) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.11) + babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.11) + babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.11) + babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.11) + core-js-compat: 3.32.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.22.14(@babel/core@7.29.7)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.22.12(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.29.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7) + '@babel/types': 7.22.11 + babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.29.7) + core-js-compat: 3.32.1 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/preset-env@7.22.14(@babel/core@7.29.7)': + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.29.7 + '@babel/helper-compilation-targets': 7.22.10 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.7) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.29.7) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.29.7) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.29.7) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.29.7) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.29.7) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.7) + '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-async-generator-functions': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-block-scoping': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.29.7) + '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-destructuring': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-modules-commonjs': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-object-rest-spread': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-optional-chaining': 7.22.12(@babel/core@7.29.7) + '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.29.7) + '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.29.7) + '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.29.7) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.7) + '@babel/types': 7.22.11 + babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.29.7) + babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.29.7) + babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.29.7) core-js-compat: 3.32.1 semver: 6.3.1 transitivePeerDependencies: @@ -6106,6 +8871,20 @@ snapshots: '@babel/types': 7.22.11 esutils: 2.0.3 + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.22.11 + esutils: 2.0.3 + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.22.11 + esutils: 2.0.3 + '@babel/preset-react@7.22.5(@babel/core@7.22.11)': dependencies: '@babel/core': 7.22.11 @@ -6146,6 +8925,18 @@ snapshots: '@babel/parser': 7.22.14 '@babel/types': 7.22.11 + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + + '@babel/template@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@babel/traverse@7.22.11': dependencies: '@babel/code-frame': 7.22.13 @@ -6161,12 +8952,46 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/traverse@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-globals': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/types': 7.29.7 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + '@babel/types@7.22.11': dependencies: '@babel/helper-string-parser': 7.22.5 '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + + '@babel/types@7.29.7': + dependencies: + '@babel/helper-string-parser': 7.29.7 + '@babel/helper-validator-identifier': 7.29.7 + '@base2/pretty-print-object@1.0.1': {} '@bcoe/v8-coverage@0.2.3': {} @@ -6316,7 +9141,8 @@ snapshots: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/yargs': 16.0.5 chalk: 4.1.2 @@ -6325,7 +9151,8 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -6339,32 +9166,71 @@ snapshots: optionalDependencies: typescript: 5.0.4 + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping@0.3.3': dependencies: '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + + '@jridgewell/remapping@2.3.5': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/resolve-uri@3.1.1': {} '@jridgewell/set-array@1.1.2': {} '@jridgewell/source-map@0.3.5': dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + '@jridgewell/trace-mapping@0.3.19': dependencies: '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.31': + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.5.5 '@jridgewell/trace-mapping@0.3.9': dependencies: '@jridgewell/resolve-uri': 3.1.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.5 '@juggle/resize-observer@3.4.0': {} @@ -7129,7 +9995,8 @@ snapshots: express: 4.18.2 find-cache-dir: 3.3.2 fs-extra: 11.1.1 - magic-string: 0.30.3 + magic-string: 0.30.21 + magic-string: 0.30.21 remark-external-links: 8.0.0 remark-slug: 6.1.0 rollup: 3.9.1 @@ -7161,7 +10028,8 @@ snapshots: '@storybook/cli@7.3.2': dependencies: '@babel/core': 7.22.11 - '@babel/preset-env': 7.22.14(@babel/core@7.22.11) + '@babel/preset-env': 7.22.14(@babel/core@7.29.7) + '@babel/preset-env': 7.22.14(@babel/core@7.29.7) '@babel/types': 7.22.11 '@ndelangen/get-tarball': 3.0.9 '@storybook/codemod': 7.3.2 @@ -7858,6 +10726,61 @@ snapshots: dependencies: tslib: 2.8.1 + '@tanstack/react-virtual@3.14.6(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@tanstack/virtual-core': 3.17.4 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@tanstack/virtual-core@3.17.4': {} + + '@testing-library/dom@10.4.1': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/runtime': 7.22.11 + '@types/aria-query': 5.0.4 + aria-query: 5.3.0 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + picocolors: 1.1.1 + pretty-format: 27.5.1 + + '@testing-library/dom@9.3.4': + dependencies: + '@babel/code-frame': 7.22.13 + '@babel/runtime': 7.22.11 + '@types/aria-query': 5.0.4 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.16 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.1.5(vitest@0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4))': + dependencies: + '@adobe/css-tools': 4.5.0 + '@babel/runtime': 7.22.11 + aria-query: 5.3.2 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.5.16 + lodash: 4.17.21 + redent: 3.0.0 + optionalDependencies: + vitest: 0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4) + + '@testing-library/react@14.3.1(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + '@babel/runtime': 7.22.11 + '@testing-library/dom': 9.3.4 + '@types/react-dom': 18.2.7 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.1)': + dependencies: + '@testing-library/dom': 10.4.1 + '@trysound/sax@0.2.0': {} '@tsconfig/node10@1.0.9': {} @@ -7868,6 +10791,10 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@types/aria-query@5.0.4': {} + + '@types/aria-query@5.0.4': {} + '@types/babel__core@7.20.1': dependencies: '@babel/parser': 7.22.14 @@ -7876,6 +10803,22 @@ snapshots: '@types/babel__template': 7.4.1 '@types/babel__traverse': 7.20.1 + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.22.14 + '@babel/types': 7.22.11 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.22.14 + '@babel/types': 7.22.11 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.20.1 + '@types/babel__generator@7.6.4': dependencies: '@babel/types': 7.22.11 @@ -7892,15 +10835,30 @@ snapshots: '@types/body-parser@1.19.2': dependencies: '@types/connect': 3.4.35 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + + '@types/chai-subset@1.3.6(@types/chai@4.3.20)': + dependencies: + '@types/chai': 4.3.20 + + '@types/chai@4.3.20': {} + '@types/node': 18.17.15 + + '@types/chai-subset@1.3.6(@types/chai@4.3.20)': + dependencies: + '@types/chai': 4.3.20 + + '@types/chai@4.3.20': {} '@types/connect@3.4.35': dependencies: - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/cross-spawn@6.0.2': dependencies: - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/detect-port@1.3.3': {} @@ -7928,7 +10886,8 @@ snapshots: '@types/express-serve-static-core@4.17.36': dependencies: - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/qs': 6.9.8 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -7945,11 +10904,13 @@ snapshots: '@types/glob@7.2.0': dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/graceful-fs@4.1.6': dependencies: - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/http-errors@2.0.1': {} @@ -7979,15 +10940,14 @@ snapshots: '@types/node-fetch@2.6.4': dependencies: - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 form-data: 3.0.1 '@types/node@16.18.48': {} '@types/node@18.11.18': {} - '@types/node@18.17.14': {} - '@types/node@18.17.15': {} '@types/node@20.5.9': {} @@ -8037,13 +10997,15 @@ snapshots: '@types/send@0.17.1': dependencies: '@types/mime': 1.3.2 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/serve-static@1.15.2': dependencies: '@types/http-errors': 2.0.1 '@types/mime': 3.0.1 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 '@types/unist@2.0.8': {} @@ -8068,6 +11030,84 @@ snapshots: transitivePeerDependencies: - supports-color + '@vitejs/plugin-react@4.2.1(vite@4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4))': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.0 + vite: 4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@0.34.6': + dependencies: + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.5.0 + + '@vitest/runner@0.34.6': + dependencies: + '@vitest/utils': 0.34.6 + p-limit: 4.0.0 + pathe: 1.1.1 + + '@vitest/snapshot@0.34.6': + dependencies: + magic-string: 0.30.21 + pathe: 1.1.1 + pretty-format: 29.7.0 + + '@vitest/spy@0.34.6': + dependencies: + tinyspy: 2.2.1 + + '@vitest/utils@0.34.6': + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + + '@vitejs/plugin-react@4.2.1(vite@4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4))': + dependencies: + '@babel/core': 7.29.7 + '@babel/plugin-transform-react-jsx-self': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-react-jsx-source': 7.29.7(@babel/core@7.29.7) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.0 + vite: 4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@0.34.6': + dependencies: + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + chai: 4.5.0 + + '@vitest/runner@0.34.6': + dependencies: + '@vitest/utils': 0.34.6 + p-limit: 4.0.0 + pathe: 1.1.1 + + '@vitest/snapshot@0.34.6': + dependencies: + magic-string: 0.30.21 + pathe: 1.1.1 + pretty-format: 29.7.0 + + '@vitest/spy@0.34.6': + dependencies: + tinyspy: 2.2.1 + + '@vitest/utils@0.34.6': + dependencies: + diff-sequences: 29.6.3 + loupe: 2.3.7 + pretty-format: 29.7.0 + '@webassemblyjs/ast@1.11.6': dependencies: '@webassemblyjs/helper-numbers': 1.11.6 @@ -8168,9 +11208,11 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-assertions@1.9.0(acorn@8.10.0): + acorn-import-assertions@1.9.0(acorn@8.17.0): + acorn-import-assertions@1.9.0(acorn@8.17.0): dependencies: - acorn: 8.10.0 + acorn: 8.17.0 + acorn: 8.17.0 acorn-jsx@5.3.2(acorn@7.4.1): dependencies: @@ -8184,6 +11226,10 @@ snapshots: acorn@8.10.0: {} + acorn@8.17.0: {} + + acorn@8.17.0: {} + address@1.2.2: {} adjust-sourcemap-loader@4.0.0: @@ -8199,6 +11245,10 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.4: {} + + agent-base@7.1.4: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -8231,6 +11281,10 @@ snapshots: dependencies: color-convert: 2.0.1 + ansi-styles@5.2.0: {} + + ansi-styles@5.2.0: {} + ansi-styles@6.2.1: {} any-promise@1.3.0: {} @@ -8256,6 +11310,36 @@ snapshots: dependencies: tslib: 2.8.1 + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.3 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.3 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + aria-query@5.3.2: {} + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + array-flatten@1.1.1: {} array-union@2.1.0: {} @@ -8267,6 +11351,10 @@ snapshots: object-is: 1.1.5 util: 0.12.5 + assertion-error@1.1.0: {} + + assertion-error@1.1.0: {} + ast-types@0.14.2: dependencies: tslib: 2.8.1 @@ -8309,6 +11397,14 @@ snapshots: available-typed-arrays@1.0.5: {} + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + babel-core@7.0.0-bridge.0(@babel/core@7.22.11): dependencies: '@babel/core': 7.22.11 @@ -8332,6 +11428,24 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.29.7): + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.29.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.29.7): + dependencies: + '@babel/compat-data': 7.22.9 + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.29.7) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.11): dependencies: '@babel/core': 7.22.11 @@ -8340,6 +11454,22 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.29.7) + core-js-compat: 3.32.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.29.7) + core-js-compat: 3.32.1 + transitivePeerDependencies: + - supports-color + babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.11): dependencies: '@babel/core': 7.22.11 @@ -8347,10 +11477,28 @@ snapshots: transitivePeerDependencies: - supports-color + babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.29.7): + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.29.7) + transitivePeerDependencies: + - supports-color + balanced-match@1.0.2: {} base64-js@1.5.1: {} + baseline-browser-mapping@2.10.43: {} + + baseline-browser-mapping@2.10.43: {} + better-opn@3.0.2: dependencies: open: 8.4.2 @@ -8416,6 +11564,22 @@ snapshots: node-releases: 2.0.13 update-browserslist-db: 1.0.11(browserslist@4.21.10) + browserslist@4.28.6: + dependencies: + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001805 + electron-to-chromium: 1.5.391 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) + + browserslist@4.28.6: + dependencies: + baseline-browser-mapping: 2.10.43 + caniuse-lite: 1.0.30001805 + electron-to-chromium: 1.5.391 + node-releases: 2.0.51 + update-browserslist-db: 1.2.3(browserslist@4.28.6) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -8454,11 +11618,49 @@ snapshots: yargs: 16.2.0 yargs-parser: 20.2.9 + cac@6.7.14: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + cac@6.7.14: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + call-bind@1.0.2: dependencies: function-bind: 1.1.1 get-intrinsic: 1.2.1 + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + call-bind@1.0.9: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + callsites@3.1.0: {} camelcase-css@2.0.1: {} @@ -8469,17 +11671,59 @@ snapshots: caniuse-lite@1.0.30001525: {} + caniuse-lite@1.0.30001805: {} + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + + caniuse-lite@1.0.30001805: {} + + chai@4.5.0: + dependencies: + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.4 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.1.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + + check-error@1.0.3: + dependencies: + get-func-name: 2.0.2 + chokidar@3.5.3: dependencies: anymatch: 3.1.3 @@ -8597,6 +11841,10 @@ snapshots: readable-stream: 2.3.8 typedarray: 0.0.6 + confbox@0.1.8: {} + + confbox@0.1.8: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -8692,14 +11940,36 @@ snapshots: css-what@6.1.0: {} + css.escape@1.5.1: {} + + css.escape@1.5.1: {} + cssesc@3.0.0: {} csso@5.0.5: dependencies: css-tree: 2.2.1 + cssstyle@3.0.0: + dependencies: + rrweb-cssom: 0.6.0 + + cssstyle@3.0.0: + dependencies: + rrweb-cssom: 0.6.0 + csstype@3.1.2: {} + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + debug@2.6.9: dependencies: ms: 2.0.0 @@ -8713,6 +11983,60 @@ snapshots: dependencies: ms: 2.1.2 + decimal.js@10.6.0: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-equal@2.2.3: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + es-get-iterator: 1.1.3 + get-intrinsic: 1.3.0 + is-arguments: 1.1.1 + is-array-buffer: 3.0.5 + is-date-object: 1.1.0 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.4 + side-channel: 1.0.4 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + + decimal.js@10.6.0: {} + + deep-eql@4.1.4: + dependencies: + type-detect: 4.1.0 + + deep-equal@2.2.3: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.9 + es-get-iterator: 1.1.3 + get-intrinsic: 1.3.0 + is-arguments: 1.1.1 + is-array-buffer: 3.0.5 + is-date-object: 1.1.0 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + isarray: 2.0.5 + object-is: 1.1.5 + object-keys: 1.1.1 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.4 + side-channel: 1.0.4 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.22 + deepmerge@4.3.1: {} default-browser-id@3.0.0: @@ -8724,6 +12048,18 @@ snapshots: dependencies: clone: 1.0.4 + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.0.1 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.0.1 + define-lazy-prop@2.0.0: {} define-properties@1.2.0: @@ -8731,6 +12067,18 @@ snapshots: has-property-descriptors: 1.0.0 object-keys: 1.1.1 + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.0 + object-keys: 1.1.1 + defu@6.1.2: {} del@6.1.1: @@ -8769,6 +12117,10 @@ snapshots: didyoumean@1.2.2: {} + diff-sequences@29.6.3: {} + + diff-sequences@29.6.3: {} + diff@4.0.2: {} dir-glob@3.0.1: @@ -8781,6 +12133,10 @@ snapshots: dependencies: esutils: 2.0.3 + dom-accessibility-api@0.5.16: {} + + dom-accessibility-api@0.5.16: {} + dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -8808,6 +12164,18 @@ snapshots: dotenv@16.3.1: {} + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + duplexify@3.7.1: dependencies: end-of-stream: 1.4.4 @@ -8825,6 +12193,10 @@ snapshots: electron-to-chromium@1.4.508: {} + electron-to-chromium@1.5.391: {} + + electron-to-chromium@1.5.391: {} + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -8844,6 +12216,10 @@ snapshots: entities@4.5.0: {} + entities@6.0.1: {} + + entities@6.0.1: {} + envinfo@7.10.0: {} errno@0.1.8: @@ -8855,10 +12231,64 @@ snapshots: dependencies: is-arrayish: 0.2.1 + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.9 + get-intrinsic: 1.3.0 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.1.1 + isarray: 2.0.5 + stop-iteration-iterator: 1.1.0 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.9 + get-intrinsic: 1.3.0 + has-symbols: 1.0.3 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.1.1 + isarray: 2.0.5 + stop-iteration-iterator: 1.1.0 + es-module-lexer@0.9.3: {} es-module-lexer@1.3.0: {} + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + es-object-atoms@1.1.2: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + es6-object-assign@1.1.0: {} esbuild-plugin-alias@0.2.1: {} @@ -8897,6 +12327,10 @@ snapshots: escalade@3.1.1: {} + escalade@3.2.0: {} + + escalade@3.2.0: {} + escape-html@1.0.3: {} escape-string-regexp@1.0.5: {} @@ -9094,6 +12528,14 @@ snapshots: dependencies: is-callable: 1.2.7 + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@2.0.0: dependencies: cross-spawn: 7.0.3 @@ -9110,6 +12552,22 @@ snapshots: combined-stream: 1.0.8 mime-types: 2.1.35 + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + + form-data@4.0.6: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.4 + mime-types: 2.1.35 + forwarded@0.2.0: {} fraction.js@4.3.6: {} @@ -9141,10 +12599,22 @@ snapshots: function-bind@1.1.1: {} + function-bind@1.1.2: {} + + functions-have-names@1.2.3: {} + + function-bind@1.1.2: {} + + functions-have-names@1.2.3: {} + gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} + get-func-name@2.0.2: {} + + get-func-name@2.0.2: {} + get-intrinsic@1.2.1: dependencies: function-bind: 1.1.1 @@ -9152,6 +12622,32 @@ snapshots: has-proto: 1.0.1 has-symbols: 1.0.3 + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.2 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.4 + math-intrinsics: 1.1.0 + get-nonce@1.0.1: {} get-npm-tarball-url@2.0.3: {} @@ -9160,6 +12656,16 @@ snapshots: get-port@5.1.1: {} + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.2 + get-stream@6.0.1: {} giget@1.1.2: @@ -9240,6 +12746,10 @@ snapshots: dependencies: get-intrinsic: 1.2.1 + gopd@1.2.0: {} + + gopd@1.2.0: {} + graceful-fs@4.2.11: {} gunzip-maybe@1.4.2: @@ -9260,32 +12770,73 @@ snapshots: optionalDependencies: uglify-js: 3.17.4 + has-bigints@1.1.0: {} + + has-bigints@1.1.0: {} + has-flag@3.0.0: {} has-flag@4.0.0: {} has-property-descriptors@1.0.0: dependencies: - get-intrinsic: 1.2.1 + get-intrinsic: 1.3.0 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 has-proto@1.0.1: {} has-symbols@1.0.3: {} + has-symbols@1.1.0: {} + + has-symbols@1.1.0: {} + has-tostringtag@1.0.0: dependencies: has-symbols: 1.0.3 + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.0.3 + has@1.0.3: dependencies: function-bind: 1.1.1 + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + + hasown@2.0.4: + dependencies: + function-bind: 1.1.2 + highlight.js@11.8.0: {} hljs@6.2.3: {} hosted-git-info@2.8.9: {} + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + html-escaper@2.0.2: {} html-tags@3.3.1: {} @@ -9298,6 +12849,20 @@ snapshots: statuses: 2.0.1 toidentifier: 1.0.1 + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.4 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 @@ -9312,6 +12877,20 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.4 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + human-signals@2.1.0: {} human-signals@3.0.1: {} @@ -9325,7 +12904,6 @@ snapshots: iconv-lite@0.6.3: dependencies: safer-buffer: 2.1.2 - optional: true icss-utils@5.1.0(postcss@8.4.29): dependencies: @@ -9354,6 +12932,18 @@ snapshots: inherits@2.0.4: {} + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.4 + side-channel: 1.1.1 + invariant@2.2.4: dependencies: loose-envify: 1.4.0 @@ -9366,15 +12956,46 @@ snapshots: is-arguments@1.1.1: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.9 + call-bind: 1.0.9 has-tostringtag: 1.0.0 + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-arrayish@0.2.1: {} + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + is-binary-path@2.1.0: dependencies: binary-extensions: 2.2.0 + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-builtin-module@3.2.1: dependencies: builtin-modules: 3.3.0 @@ -9385,6 +13006,16 @@ snapshots: dependencies: has: 1.0.3 + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-deflate@1.0.0: {} is-docker@2.2.1: {} @@ -9407,6 +13038,10 @@ snapshots: is-interactive@1.0.0: {} + is-map@2.0.3: {} + + is-map@2.0.3: {} + is-module@1.0.0: {} is-nan@1.3.2: @@ -9414,6 +13049,16 @@ snapshots: call-bind: 1.0.2 define-properties: 1.2.0 + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + is-number@7.0.0: {} is-path-cwd@2.2.0: {} @@ -9426,20 +13071,86 @@ snapshots: is-plain-object@5.0.0: {} + is-potential-custom-element-name@1.0.1: {} + + is-potential-custom-element-name@1.0.1: {} + is-reference@1.2.1: dependencies: '@types/estree': 1.0.1 + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.4 + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + is-stream@2.0.1: {} is-stream@3.0.0: {} + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + is-typed-array@1.1.12: dependencies: which-typed-array: 1.1.11 is-unicode-supported@0.1.0: {} + is-weakmap@2.0.2: {} + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-weakmap@2.0.2: {} + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-what@3.14.1: {} is-wsl@2.2.0: @@ -9448,6 +13159,10 @@ snapshots: isarray@1.0.0: {} + isarray@2.0.5: {} + + isarray@2.0.5: {} + isexe@2.0.0: {} isobject@3.0.1: {} @@ -9492,7 +13207,8 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -9507,14 +13223,16 @@ snapshots: jest-mock@27.5.1: dependencies: '@jest/types': 27.5.1 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 jest-regex-util@29.6.3: {} jest-util@29.6.3: dependencies: '@jest/types': 29.6.3 - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -9528,7 +13246,8 @@ snapshots: jest-worker@29.6.4: dependencies: - '@types/node': 18.17.14 + '@types/node': 18.17.15 + '@types/node': 18.17.15 jest-util: 29.6.3 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -9554,7 +13273,8 @@ snapshots: '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.11) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.11) '@babel/plugin-transform-modules-commonjs': 7.22.11(@babel/core@7.22.11) - '@babel/preset-env': 7.22.14(@babel/core@7.22.11) + '@babel/preset-env': 7.22.14(@babel/core@7.29.7) + '@babel/preset-env': 7.22.14(@babel/core@7.29.7) '@babel/preset-flow': 7.22.5(@babel/core@7.22.11) '@babel/preset-typescript': 7.22.11(@babel/core@7.22.11) '@babel/register': 7.22.5(@babel/core@7.22.11) @@ -9571,10 +13291,70 @@ snapshots: transitivePeerDependencies: - supports-color + jsdom@23.0.1: + dependencies: + cssstyle: 3.0.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + form-data: 4.0.6 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.24 + parse5: 7.3.0 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.21.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsdom@23.0.1: + dependencies: + cssstyle: 3.0.0 + data-urls: 5.0.0 + decimal.js: 10.6.0 + form-data: 4.0.6 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.24 + parse5: 7.3.0 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.4 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.2.0 + ws: 8.21.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + jsesc@0.5.0: {} jsesc@2.5.2: {} + jsesc@3.1.0: {} + + jsesc@3.1.0: {} + json-parse-even-better-errors@2.3.1: {} json-schema-traverse@0.4.1: {} @@ -9666,6 +13446,10 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 + local-pkg@0.4.3: {} + + local-pkg@0.4.3: {} + locate-path@3.0.0: dependencies: p-locate: 3.0.0 @@ -9699,6 +13483,14 @@ snapshots: dependencies: js-tokens: 4.0.0 + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + + loupe@2.3.7: + dependencies: + get-func-name: 2.0.2 + lower-case@2.0.2: dependencies: tslib: 2.8.1 @@ -9713,10 +13505,22 @@ snapshots: dependencies: yallist: 4.0.0 + lz-string@1.5.0: {} + + lz-string@1.5.0: {} + magic-string@0.27.0: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.3: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -9746,6 +13550,10 @@ snapshots: dependencies: react: 18.2.0 + math-intrinsics@1.1.0: {} + + math-intrinsics@1.1.0: {} + mdast-util-definitions@4.0.0: dependencies: unist-util-visit: 2.0.3 @@ -9828,6 +13636,20 @@ snapshots: mkdirp@1.0.4: {} + mlly@1.8.2: + dependencies: + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + + mlly@1.8.2: + dependencies: + acorn: 8.17.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.4 + mri@1.2.0: {} ms@2.0.0: {} @@ -9859,7 +13681,8 @@ snapshots: neo-async@2.6.2: {} - next@13.4.19(@babel/core@7.22.11)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next@13.4.19(@babel/core@7.29.7)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + next@13.4.19(@babel/core@7.29.7)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: '@next/env': 13.4.19 '@swc/helpers': 0.5.1 @@ -9868,7 +13691,8 @@ snapshots: postcss: 8.4.14 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) - styled-jsx: 5.1.1(@babel/core@7.22.11)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.29.7)(react@18.2.0) + styled-jsx: 5.1.1(@babel/core@7.29.7)(react@18.2.0) watchpack: 2.4.0 zod: 3.21.4 optionalDependencies: @@ -9904,6 +13728,10 @@ snapshots: node-releases@2.0.13: {} + node-releases@2.0.51: {} + + node-releases@2.0.51: {} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -9927,19 +13755,46 @@ snapshots: dependencies: boolbase: 1.0.0 + nwsapi@2.2.24: {} + + nwsapi@2.2.24: {} + object-assign@4.1.1: {} object-hash@3.0.0: {} object-inspect@1.12.3: {} + object-inspect@1.13.4: {} + + object-inspect@1.13.4: {} + object-is@1.1.5: dependencies: - call-bind: 1.0.2 + call-bind: 1.0.9 + call-bind: 1.0.9 define-properties: 1.2.0 object-keys@1.1.1: {} + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.9 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.2 + has-symbols: 1.1.0 + object-keys: 1.1.1 + on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -9984,6 +13839,14 @@ snapshots: dependencies: yocto-queue: 0.1.0 + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.2 + + p-limit@4.0.0: + dependencies: + yocto-queue: 1.2.2 + p-locate@3.0.0: dependencies: p-limit: 2.3.0 @@ -10017,6 +13880,14 @@ snapshots: parse-node-version@1.0.1: {} + parse5@7.3.0: + dependencies: + entities: 6.0.1 + + parse5@7.3.0: + dependencies: + entities: 6.0.1 + parseurl@1.3.3: {} path-exists@3.0.0: {} @@ -10042,6 +13913,14 @@ snapshots: pathe@1.1.1: {} + pathe@2.0.3: {} + + pathval@1.1.1: {} + + pathe@2.0.3: {} + + pathval@1.1.1: {} + peek-stream@1.1.3: dependencies: buffer-from: 1.1.2 @@ -10052,6 +13931,10 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.1.1: {} + + picocolors@1.1.1: {} + picomatch@2.3.1: {} pidtree@0.6.0: {} @@ -10074,10 +13957,26 @@ snapshots: dependencies: find-up: 5.0.0 + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.8.2 + pathe: 2.0.3 + polished@4.2.2: dependencies: '@babel/runtime': 7.22.11 + possible-typed-array-names@1.1.0: {} + + possible-typed-array-names@1.1.0: {} + postcss-import@15.1.0(postcss@8.4.23): dependencies: postcss: 8.4.23 @@ -10173,7 +14072,8 @@ snapshots: postcss@8.4.14: dependencies: nanoid: 3.3.6 - picocolors: 1.0.0 + picocolors: 1.1.1 + picocolors: 1.1.1 source-map-js: 1.0.2 postcss@8.4.23: @@ -10194,6 +14094,30 @@ snapshots: prettier@2.8.2: {} + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.1.0 + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.1.0 + pretty-hrtime@1.0.3: {} process-nextick-args@2.0.1: {} @@ -10223,6 +14147,14 @@ snapshots: prr@1.0.1: optional: true + psl@1.15.0: + dependencies: + punycode: 2.3.1 + + psl@1.15.0: + dependencies: + punycode: 2.3.1 + pump@2.0.1: dependencies: end-of-stream: 1.4.4 @@ -10239,7 +14171,8 @@ snapshots: inherits: 2.0.4 pump: 2.0.1 - punycode@2.3.0: {} + punycode@2.3.1: {} + punycode@2.3.1: {} puppeteer-core@2.1.1: dependencies: @@ -10266,6 +14199,10 @@ snapshots: dependencies: side-channel: 1.0.4 + querystringify@2.2.0: {} + + querystringify@2.2.0: {} + queue-microtask@1.2.3: {} ramda@0.29.0: {} @@ -10327,6 +14264,10 @@ snapshots: react-is@16.13.1: {} + react-is@17.0.2: {} + + react-is@17.0.2: {} + react-is@18.1.0: {} react-refresh@0.14.0: {} @@ -10415,6 +14356,16 @@ snapshots: source-map: 0.6.1 tslib: 2.8.1 + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + regenerate-unicode-properties@10.1.0: dependencies: regenerate: 1.4.2 @@ -10429,6 +14380,24 @@ snapshots: regex-parser@2.2.11: {} + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.9 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + regexpu-core@5.3.2: dependencies: '@babel/regjsgen': 0.8.0 @@ -10458,6 +14427,10 @@ snapshots: require-directory@2.1.1: {} + requires-port@1.0.0: {} + + requires-port@1.0.0: {} + resolve-from@4.0.0: {} resolve-from@5.0.0: {} @@ -10511,7 +14484,8 @@ snapshots: tslib: 2.8.1 typescript: 5.0.4 - rollup@3.29.1: + rollup@3.30.0: + rollup@3.30.0: optionalDependencies: fsevents: 2.3.3 @@ -10519,6 +14493,10 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + rrweb-cssom@0.6.0: {} + + rrweb-cssom@0.6.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -10533,6 +14511,18 @@ snapshots: safe-buffer@5.2.1: {} + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + safer-buffer@2.1.2: {} sass-loader@13.3.2(webpack@5.88.2(esbuild@0.18.20)): @@ -10543,6 +14533,14 @@ snapshots: sax@1.2.4: optional: true + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + scheduler@0.23.0: dependencies: loose-envify: 1.4.0 @@ -10600,6 +14598,38 @@ snapshots: transitivePeerDependencies: - supports-color + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + setprototypeof@1.2.0: {} shallow-clone@3.0.1: @@ -10612,12 +14642,72 @@ snapshots: shebang-regex@3.0.0: {} + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel-list@1.0.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + side-channel@1.0.4: dependencies: call-bind: 1.0.2 get-intrinsic: 1.2.1 object-inspect: 1.12.3 + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + side-channel@1.1.1: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.1 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -10679,8 +14769,26 @@ snapshots: sprintf-js@1.0.3: {} + stackback@0.0.2: {} + + stackback@0.0.2: {} + statuses@2.0.1: {} + std-env@3.10.0: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + std-env@3.10.0: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + store2@2.14.2: {} storybook@7.3.2: @@ -10736,16 +14844,26 @@ snapshots: strip-json-comments@3.1.1: {} + strip-literal@1.3.0: + dependencies: + acorn: 8.10.0 + + strip-literal@1.3.0: + dependencies: + acorn: 8.10.0 + style-loader@3.3.3(webpack@5.88.2(esbuild@0.18.20)): dependencies: webpack: 5.88.2(esbuild@0.18.20) - styled-jsx@5.1.1(@babel/core@7.22.11)(react@18.2.0): + styled-jsx@5.1.1(@babel/core@7.29.7)(react@18.2.0): + styled-jsx@5.1.1(@babel/core@7.29.7)(react@18.2.0): dependencies: client-only: 0.0.1 react: 18.2.0 optionalDependencies: - '@babel/core': 7.22.11 + '@babel/core': 7.29.7 + '@babel/core': 7.29.7 sucrase@3.34.0: dependencies: @@ -10780,7 +14898,12 @@ snapshots: css-select: 5.1.0 css-tree: 2.3.1 csso: 5.0.5 - picocolors: 1.0.0 + picocolors: 1.1.1 + + symbol-tree@3.2.4: {} + picocolors: 1.1.1 + + symbol-tree@3.2.4: {} synchronous-promise@2.0.17: {} @@ -10885,7 +15008,8 @@ snapshots: terser-webpack-plugin@5.3.9(esbuild@0.18.20)(webpack@5.88.2(esbuild@0.18.20)): dependencies: - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.1 @@ -10897,7 +15021,8 @@ snapshots: terser@5.19.4: dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + acorn: 8.17.0 + acorn: 8.17.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -10924,6 +15049,18 @@ snapshots: tiny-invariant@1.3.1: {} + tinybench@2.9.0: {} + + tinypool@0.7.0: {} + + tinyspy@2.2.1: {} + + tinybench@2.9.0: {} + + tinypool@0.7.0: {} + + tinyspy@2.2.1: {} + tmpl@1.0.5: {} to-fast-properties@2.0.0: {} @@ -10938,8 +15075,30 @@ snapshots: toidentifier@1.0.1: {} + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tough-cookie@4.1.4: + dependencies: + psl: 1.15.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + tr46@0.0.3: {} + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + + tr46@5.1.1: + dependencies: + punycode: 2.3.1 + ts-dedent@2.2.0: {} ts-interface-checker@0.1.13: {} @@ -10952,7 +15111,8 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 18.11.18 - acorn: 8.10.0 + acorn: 8.17.0 + acorn: 8.17.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -10970,7 +15130,8 @@ snapshots: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.5.9 - acorn: 8.10.0 + acorn: 8.17.0 + acorn: 8.17.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 @@ -11012,6 +15173,10 @@ snapshots: turbo-windows-64: 1.10.13 turbo-windows-arm64: 1.10.13 + type-detect@4.1.0: {} + + type-detect@4.1.0: {} + type-fest@0.16.0: {} type-fest@0.21.3: {} @@ -11033,6 +15198,10 @@ snapshots: typescript@5.2.2: {} + ufo@1.6.4: {} + + ufo@1.6.4: {} + uglify-js@3.17.4: optional: true @@ -11064,6 +15233,10 @@ snapshots: unist-util-is: 4.1.0 unist-util-visit-parents: 3.1.1 + universalify@0.2.0: {} + + universalify@0.2.0: {} + universalify@2.0.0: {} unpipe@1.0.0: {} @@ -11081,11 +15254,35 @@ snapshots: dependencies: browserslist: 4.21.10 escalade: 3.1.1 - picocolors: 1.0.0 + picocolors: 1.1.1 + + update-browserslist-db@1.2.3(browserslist@4.28.6): + dependencies: + browserslist: 4.28.6 + escalade: 3.2.0 + picocolors: 1.1.1 + picocolors: 1.1.1 + + update-browserslist-db@1.2.3(browserslist@4.28.6): + dependencies: + browserslist: 4.28.6 + escalade: 3.2.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: - punycode: 2.3.0 + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + punycode: 2.3.1 + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 use-callback-ref@1.3.0(@types/react@18.0.26)(react@18.2.0): dependencies: @@ -11141,6 +15338,42 @@ snapshots: vary@1.1.2: {} + vite-node@0.34.6(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4): + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.8.2 + pathe: 1.1.1 + picocolors: 1.1.1 + vite: 4.4.9(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + vite-node@0.34.6(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4): + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.8.2 + pathe: 1.1.1 + picocolors: 1.1.1 + vite: 4.4.9(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + vite-plugin-svgr@3.2.0(rollup@3.9.1)(typescript@5.0.4)(vite@4.4.9(@types/node@18.11.18)(less@4.2.0)(terser@5.19.4)): dependencies: '@rollup/pluginutils': 5.0.4(rollup@3.9.1) @@ -11156,13 +15389,118 @@ snapshots: dependencies: esbuild: 0.18.20 postcss: 8.4.29 - rollup: 3.29.1 + rollup: 3.30.0 + rollup: 3.30.0 optionalDependencies: '@types/node': 18.11.18 fsevents: 2.3.3 less: 4.2.0 terser: 5.19.4 + vite@4.4.9(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4): + dependencies: + esbuild: 0.18.20 + postcss: 8.4.29 + rollup: 3.30.0 + optionalDependencies: + '@types/node': 18.17.15 + fsevents: 2.3.3 + less: 4.2.0 + terser: 5.19.4 + + vitest@0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4): + dependencies: + '@types/chai': 4.3.20 + '@types/chai-subset': 1.3.6(@types/chai@4.3.20) + '@types/node': 18.17.15 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.5.0 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.21 + pathe: 1.1.1 + picocolors: 1.1.1 + std-env: 3.10.0 + strip-literal: 1.3.0 + tinybench: 2.9.0 + tinypool: 0.7.0 + vite: 4.4.9(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4) + vite-node: 0.34.6(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4) + why-is-node-running: 2.3.0 + optionalDependencies: + jsdom: 23.0.1 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + vite@4.4.9(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4): + dependencies: + esbuild: 0.18.20 + postcss: 8.4.29 + rollup: 3.30.0 + optionalDependencies: + '@types/node': 18.17.15 + fsevents: 2.3.3 + less: 4.2.0 + terser: 5.19.4 + + vitest@0.34.6(jsdom@23.0.1)(less@4.2.0)(terser@5.19.4): + dependencies: + '@types/chai': 4.3.20 + '@types/chai-subset': 1.3.6(@types/chai@4.3.20) + '@types/node': 18.17.15 + '@vitest/expect': 0.34.6 + '@vitest/runner': 0.34.6 + '@vitest/snapshot': 0.34.6 + '@vitest/spy': 0.34.6 + '@vitest/utils': 0.34.6 + acorn: 8.10.0 + acorn-walk: 8.2.0 + cac: 6.7.14 + chai: 4.5.0 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.21 + pathe: 1.1.1 + picocolors: 1.1.1 + std-env: 3.10.0 + strip-literal: 1.3.0 + tinybench: 2.9.0 + tinypool: 0.7.0 + vite: 4.4.9(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4) + vite-node: 0.34.6(@types/node@18.17.15)(less@4.2.0)(terser@5.19.4) + why-is-node-running: 2.3.0 + optionalDependencies: + jsdom: 23.0.1 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -11178,6 +15516,10 @@ snapshots: webidl-conversions@3.0.1: {} + webidl-conversions@7.0.0: {} + + webidl-conversions@7.0.0: {} + webpack-sources@3.2.3: {} webpack-virtual-modules@0.5.0: {} @@ -11189,9 +15531,12 @@ snapshots: '@webassemblyjs/ast': 1.11.6 '@webassemblyjs/wasm-edit': 1.11.6 '@webassemblyjs/wasm-parser': 1.11.6 - acorn: 8.10.0 - acorn-import-assertions: 1.9.0(acorn@8.10.0) - browserslist: 4.21.10 + acorn: 8.17.0 + acorn-import-assertions: 1.9.0(acorn@8.17.0) + browserslist: 4.28.6 + acorn: 8.17.0 + acorn-import-assertions: 1.9.0(acorn@8.17.0) + browserslist: 4.28.6 chrome-trace-event: 1.0.3 enhanced-resolve: 5.15.0 es-module-lexer: 1.3.0 @@ -11213,11 +15558,63 @@ snapshots: - esbuild - uglify-js + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.2.0: + dependencies: + tr46: 5.1.1 + webidl-conversions: 7.0.0 + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 webidl-conversions: 3.0.1 + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + which-typed-array@1.1.11: dependencies: available-typed-arrays: 1.0.5 @@ -11226,10 +15623,40 @@ snapshots: gopd: 1.0.1 has-tostringtag: 1.0.0 + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wordwrap@1.0.0: {} wrap-ansi@6.2.0: @@ -11269,6 +15696,18 @@ snapshots: ws@8.13.0: {} + ws@8.21.1: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + + ws@8.21.1: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} + xtend@4.0.2: {} y18n@5.0.8: {} @@ -11300,6 +15739,10 @@ snapshots: yocto-queue@0.1.0: {} + yocto-queue@1.2.2: {} + + yocto-queue@1.2.2: {} + zod@3.21.4: {} zustand@4.4.1(@types/react@18.2.21)(react@18.2.0): diff --git a/src/components/contexts.ts b/src/components/contexts.ts new file mode 100644 index 0000000..8562dba --- /dev/null +++ b/src/components/contexts.ts @@ -0,0 +1,100 @@ +import { createContext } from 'react' +import type { CustomizeCollapseStringUI, DisplaySize, Editable, NodeMeta } from '../types' +import type { FlatRow } from '../core/row' + +export type OnEdit = (params: { + newValue: any + oldValue: any + depth: number + src: any + indexOrName: string | number + parentType: 'object' | 'array' | null + parentPath: string[] +}) => void +export type OnDelete = (params: { + value: any + indexOrName: string | number + depth: number + src: any + parentType: 'object' | 'array' | null + parentPath: string[] +}) => void +export type OnAdd = (params: { indexOrName: string | number; depth: number; src: any; parentType: 'object' | 'array'; parentPath: string[] }) => void +export type OnChange = (params: { + indexOrName: string | number + depth: number + src: any + parentType: 'object' | 'array' | null + type: 'add' | 'edit' | 'delete' + parentPath: string[] +}) => void +export type OnCollapse = (params: { isCollapsing: boolean; node: Record | Array; indexOrName: string | number | undefined; depth: number }) => void + +type RenderComponent

= React.FC

| React.Component

+ +// Static-ish configuration + custom render components. Kept referentially stable +// (memoized in JsonView) so memoized rows don't re-render on volatile changes. +export interface Config { + collapseStringsAfterLength: number + collapseStringMode: 'directly' | 'word' | 'address' + customizeCollapseStringUI: CustomizeCollapseStringUI | undefined + + enableClipboard: boolean + editable: Editable + + displaySize: DisplaySize + displayArrayIndex: boolean + + matchesURL: boolean + urlRegExp: RegExp + + customizeCopy: (node: any, nodeMeta?: NodeMeta) => any + + CopyComponent?: RenderComponent<{ onClick: (event: React.MouseEvent) => void; className: string }> + CopiedComponent?: RenderComponent<{ className: string; style: React.CSSProperties }> + EditComponent?: RenderComponent<{ onClick: (event: React.MouseEvent) => void; className: string }> + CancelComponent?: RenderComponent<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> + DoneComponent?: RenderComponent<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> + CustomOperation?: React.FC<{ node: any }> | React.Component<{ node: any }> +} + +// Volatile: mutators + expand/edit/add/string state. Rows read the flags they +// need as props (see Row) so this context changing does not re-render every row. +export interface Handlers { + toggle: (row: FlatRow) => void + toggleChunk: (row: FlatRow) => void + + editValue: (row: FlatRow, newValue: any) => void + deleteRow: (row: FlatRow) => void + addProperty: (row: FlatRow, name: string) => void + pushArrayItem: (row: FlatRow) => void + + startEdit: (row: FlatRow) => void + cancelEdit: () => void + + startDelete: (row: FlatRow) => void + cancelDelete: () => void + + startAdd: (row: FlatRow) => void + cancelAdd: () => void + + setStringExpanded: (key: string, expanded: boolean) => void + stringExpanded: (key: string) => boolean | undefined +} + +export const defaultConfig: Config = { + collapseStringsAfterLength: 99, + collapseStringMode: 'directly', + customizeCollapseStringUI: undefined, + enableClipboard: true, + editable: false, + displaySize: undefined, + displayArrayIndex: true, + matchesURL: false, + urlRegExp: /^$/, + customizeCopy: () => {} +} + +export const ConfigContext = createContext(defaultConfig) + +export const HandlersContext = createContext({} as Handlers) diff --git a/src/components/copy-button.tsx b/src/components/copy-button.tsx index 3b2b041..d0b21ff 100644 --- a/src/components/copy-button.tsx +++ b/src/components/copy-button.tsx @@ -3,7 +3,7 @@ import { ReactComponent as CopySVG } from '../svgs/copy.svg' import { ReactComponent as CopiedSVG } from '../svgs/copied.svg' import type { NodeMeta } from '../types' import { writeClipboard } from '../utils' -import { JsonViewContext } from './json-view' +import { ConfigContext } from './contexts' interface Props { node: any @@ -11,7 +11,7 @@ interface Props { } export default function CopyButton({ node, nodeMeta }: Props) { - const { customizeCopy, CopyComponent, CopiedComponent } = useContext(JsonViewContext) + const { customizeCopy, CopyComponent, CopiedComponent } = useContext(ConfigContext) const [copied, setCopied] = useState(false) diff --git a/src/components/json-node.tsx b/src/components/json-node.tsx deleted file mode 100644 index 073b6ed..0000000 --- a/src/components/json-node.tsx +++ /dev/null @@ -1,246 +0,0 @@ -import { useContext, useRef, useState, isValidElement, useMemo, useCallback } from 'react' -import { JsonViewContext } from './json-view' -import { - customCopy, - customDelete, - customEdit, - editableDelete, - editableEdit, - isObject, - isReactComponent, - safeCall, - stringifyForCopying, - resolveEvalFailedNewValue, - customMatchesURL -} from '../utils' -import ObjectNode from './object-node' -import LongString from './long-string' -import CopyButton from './copy-button' -import { ReactComponent as EditSVG } from '../svgs/edit.svg' -import { ReactComponent as DeleteSVG } from '../svgs/trash.svg' -import { ReactComponent as DoneSVG } from '../svgs/done.svg' -import { ReactComponent as CancelSVG } from '../svgs/cancel.svg' -import { ReactComponent as LinkSVG } from '../svgs/link.svg' -import type { CustomizeNode, CustomizeOptions } from '../types' - -interface Props { - node: any - depth: number - deleteHandle?: (indexOrName: string | number, parentPath: string[]) => void - editHandle?: (indexOrName: string | number, newValue: any, oldValue: any, parentPath: string[]) => void - indexOrName?: number | string - parent?: Record | Array - parentPath: string[] -} - -export default function JsonNode({ node, depth, deleteHandle: _deleteHandle, indexOrName, parent, editHandle, parentPath }: Props) { - // prettier-ignore - const { collapseStringsAfterLength, enableClipboard, editable, src, onDelete, onChange, customizeNode, matchesURL, urlRegExp, EditComponent, DoneComponent, CancelComponent, CustomOperation } = useContext(JsonViewContext) - - let customReturn: ReturnType | undefined - if (typeof customizeNode === 'function') customReturn = safeCall(customizeNode, [{ node, depth, indexOrName }]) - - if (customReturn) { - if (isValidElement(customReturn)) return customReturn - else if (isReactComponent(customReturn)) { - const CustomComponent = customReturn - return - } - } - - if (Array.isArray(node) || isObject(node)) { - return ( - - ) - } else { - const type = typeof node - const currentPath = typeof indexOrName !== 'undefined' ? [...parentPath, String(indexOrName)] : parentPath - - const [editing, setEditing] = useState(false) - const [deleting, setDeleting] = useState(false) - const valueRef = useRef(null) - - const edit = () => { - setEditing(true) - setTimeout(() => { - window.getSelection()?.selectAllChildren(valueRef.current!) - valueRef.current?.focus() - }) - } - - const done = useCallback(() => { - let newValue = valueRef.current!.innerText - - try { - const parsedValue = JSON.parse(newValue) - - if (editHandle) editHandle(indexOrName!, parsedValue, node, parentPath) - } catch (e) { - const trimmedStringValue = resolveEvalFailedNewValue(type, newValue) - if (editHandle) editHandle(indexOrName!, trimmedStringValue, node, parentPath) - } - - setEditing(false) - }, [editHandle, indexOrName, node, parentPath, type]) - const cancel = () => { - setEditing(false) - setDeleting(false) - } - const deleteHandle = () => { - setDeleting(false) - if (_deleteHandle) _deleteHandle(indexOrName!, parentPath) - if (onDelete) - onDelete({ - value: node, - depth, - src, - indexOrName: indexOrName!, - parentType: Array.isArray(parent) ? 'array' : 'object', - parentPath - }) - if (onChange) - onChange({ - depth, - src, - indexOrName: indexOrName!, - parentType: Array.isArray(parent) ? 'array' : 'object', - type: 'delete', - parentPath - }) - } - - const handleKeyDown = useCallback( - (event: React.KeyboardEvent) => { - if (event.key === 'Enter') { - event.preventDefault() - done() - } else if (event.key === 'Escape') { - cancel() - } - }, - [done] - ) - - const isEditing = editing || deleting - const ctrlClick = - !isEditing && editableEdit(editable) && customEdit(customReturn as CustomizeOptions | undefined) && editHandle - ? (event: React.MouseEvent) => { - if (event.ctrlKey || event.metaKey) edit() - } - : undefined - const Icons = ( - <> - {isEditing && - (typeof DoneComponent === 'function' ? ( - - ) : ( - - ))} - {isEditing && - (typeof CancelComponent === 'function' ? ( - - ) : ( - - ))} - - {!isEditing && enableClipboard && customCopy(customReturn as CustomizeOptions | undefined) && ( - - )} - {!isEditing && matchesURL && type === 'string' && urlRegExp.test(node) && customMatchesURL(customReturn as CustomizeOptions | undefined) && ( - - - - )} - - {!isEditing && - editableEdit(editable) && - customEdit(customReturn as CustomizeOptions | undefined) && - editHandle && - (typeof EditComponent === 'function' ? ( - - ) : ( - - ))} - {!isEditing && editableDelete(editable) && customDelete(customReturn as CustomizeOptions | undefined) && _deleteHandle && ( - setDeleting(true)} /> - )} - {typeof CustomOperation === 'function' ? : null} - - ) - - let className = 'json-view--string' - - switch (type) { - case 'number': - case 'bigint': - className = 'json-view--number' - break - case 'boolean': - className = 'json-view--boolean' - break - case 'object': - className = 'json-view--null' - break - } - - if (typeof (customReturn as CustomizeOptions)?.className === 'string') className += ' ' + (customReturn as CustomizeOptions).className - - if (deleting) className += ' json-view--deleting' - - let displayValue = String(node) - if (type === 'bigint') displayValue += 'n' - - const EditingElement = useMemo( - () => ( - - ), - [displayValue, type, handleKeyDown] - ) - - if (type === 'string') - return ( - <> - {editing ? ( - EditingElement - ) : node.length > collapseStringsAfterLength ? ( - - ) : ( - - "{displayValue}" - - )} - - {Icons} - - ) - else { - return ( - <> - {editing ? ( - EditingElement - ) : ( - - {displayValue} - - )} - - {Icons} - - ) - } - } -} diff --git a/src/components/json-view.tsx b/src/components/json-view.tsx index 95f8cf7..080cbd5 100644 --- a/src/components/json-view.tsx +++ b/src/components/json-view.tsx @@ -1,91 +1,18 @@ -import { ReactElement, createContext, useCallback, useEffect, useState } from 'react' -import JsonNode from './json-node' +import { useCallback, useEffect, useMemo, useRef, useState } from 'react' import type { Collapsed, CustomizeCollapseStringUI, CustomizeNode, DisplaySize, Editable, NodeMeta } from '../types' import { stringifyForCopying } from '../utils' - -type OnEdit = (params: { - newValue: any - oldValue: any - depth: number - src: any - indexOrName: string | number - parentType: 'object' | 'array' | null - parentPath: string[] -}) => void -type OnDelete = (params: { - value: any - indexOrName: string | number - depth: number - src: any - parentType: 'object' | 'array' | null - parentPath: string[] -}) => void -type OnAdd = (params: { indexOrName: string | number; depth: number; src: any; parentType: 'object' | 'array'; parentPath: string[] }) => void -type OnChange = (params: { - indexOrName: string | number - depth: number - src: any - parentType: 'object' | 'array' | null - type: 'add' | 'edit' | 'delete' - parentPath: string[] -}) => void -type OnCollapse = (params: { isCollapsing: boolean; node: Record | Array; indexOrName: string | number | undefined; depth: number }) => void +import { flatten } from '../core/flatten' +import { getByPath, getParentByPath, pathKey } from '../core/path' +import type { ExpandState } from '../core/expand-state' +import type { FlatRow } from '../core/row' +import { Config, ConfigContext, Handlers, HandlersContext, OnAdd, OnChange, OnCollapse, OnDelete, OnEdit } from './contexts' +import Row from './row' +import VirtualList from './virtual-list' export const defaultURLRegExp = /^(((ht|f)tps?):\/\/)?([^!@#$%^&*?.\s-]([^!@#$%^&*?.\s]{0,63}[^!@#$%^&*?.\s])?\.)+[a-z]{2,6}\/?/ -export const JsonViewContext = createContext({ - src: undefined as any, - - collapseStringsAfterLength: 99, - collapseStringMode: 'directly' as 'directly' | 'word' | 'address', - customizeCollapseStringUI: undefined as CustomizeCollapseStringUI | undefined, - - collapseObjectsAfterLength: 20, - collapsed: false as Collapsed, - onCollapse: undefined as OnCollapse | undefined, - enableClipboard: true, - - editable: false as Editable, - onEdit: undefined as OnEdit | undefined, - onDelete: undefined as OnDelete | undefined, - onAdd: undefined as OnAdd | undefined, - onChange: undefined as OnChange | undefined, - - forceUpdate: () => {}, - - customizeNode: undefined as CustomizeNode | undefined, - customizeCopy: (() => {}) as (node: any, nodeMeta?: NodeMeta) => any, - - displaySize: undefined as DisplaySize, - displayArrayIndex: true, - - matchesURL: false, - urlRegExp: defaultURLRegExp, - - ignoreLargeArray: false, - - CopyComponent: undefined as - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string }> - | undefined, - CopiedComponent: undefined as - | React.FC<{ className: string; style: React.CSSProperties }> - | React.Component<{ className: string; style: React.CSSProperties }> - | undefined, - EditComponent: undefined as - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string }> - | undefined, - CancelComponent: undefined as - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - | undefined, - DoneComponent: undefined as - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - | undefined, - CustomOperation: undefined as React.FC<{ node: any }> | React.Component<{ node: any }> | undefined -}) +// Re-exported for backward compat (previously a single combined context). +export { ConfigContext as JsonViewContext } from './contexts' export interface JsonViewProps { src: any @@ -123,24 +50,30 @@ export interface JsonViewProps { ignoreLargeArray?: boolean - CopyComponent?: - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string }> - CopiedComponent?: React.FC<{ className: string; style: React.CSSProperties }> | React.Component<{ className: string; style: React.CSSProperties }> - - EditComponent?: - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string }> - - CancelComponent?: - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - - DoneComponent?: - | React.FC<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> - | React.Component<{ onClick: (event: React.MouseEvent) => void; className: string; style: React.CSSProperties }> + // Virtualization + virtual?: boolean | 'auto' + rowVirtualThreshold?: number + height?: number | string + maxHeight?: number | string + estimatedRowHeight?: number + overscan?: number + // Virtualize inside an existing scroll container instead of the library's own + // scroll box: pass a ref to that element. When set, height/maxHeight and the + // default 70vh cap are ignored and the referenced element owns scrolling. + scrollRef?: React.RefObject + + CopyComponent?: Config['CopyComponent'] + CopiedComponent?: Config['CopiedComponent'] + EditComponent?: Config['EditComponent'] + CancelComponent?: Config['CancelComponent'] + DoneComponent?: Config['DoneComponent'] + CustomOperation?: Config['CustomOperation'] +} - CustomOperation?: React.FC<{ node: any }> | React.Component<{ node: any }> +interface UIState { + editingKey?: string + deletingKey?: string + addingKey?: string } export default function JsonView({ @@ -179,103 +112,241 @@ export default function JsonView({ ignoreLargeArray = false, + virtual = 'auto', + rowVirtualThreshold = 100, + height, + maxHeight, + estimatedRowHeight = 20, + overscan = 8, + scrollRef, + CopyComponent, CopiedComponent, - EditComponent, CancelComponent, DoneComponent, CustomOperation }: JsonViewProps) { - const [_, update] = useState(0) - const forceUpdate = useCallback(() => update(state => ++state), []) + const [version, setVersion] = useState(0) + const forceUpdate = useCallback(() => setVersion(v => v + 1), []) + const [src, setSrc] = useState(_src) useEffect(() => setSrc(_src), [_src]) + + const [ui, setUI] = useState({}) + + const expand = useRef(new Map()) + const stringExpand = useRef>(new Map()) + + // Mirror the legacy reset: changing collapsed / collapseObjectsAfterLength + // discards user fold overrides so defaults recompute. + useEffect(() => { + expand.current.clear() + forceUpdate() + }, [collapsed, collapseObjectsAfterLength, forceUpdate]) + + // Latest refs so handlers can stay referentially stable (Phase 6 memo win). + const srcRef = useRef(src) + srcRef.current = src + const cbRef = useRef({ onEdit, onDelete, onAdd, onChange, onCollapse }) + cbRef.current = { onEdit, onDelete, onAdd, onChange, onCollapse } + + const handlers = useMemo(() => { + const fireEdit = (row: FlatRow, newValue: any, oldValue: any) => { + const depth = row.path.length + const parentType = row.parentType + const parentPath = row.parentPath.map(String) + cbRef.current.onEdit?.({ newValue, oldValue, depth, src: srcRef.current, indexOrName: row.indexOrName as any, parentType, parentPath }) + cbRef.current.onChange?.({ type: 'edit', depth, src: srcRef.current, indexOrName: row.indexOrName as any, parentType, parentPath }) + } + + return { + toggle(row) { + const key = row.expandKey! + const willExpand = row.kind === 'collapsed' + expand.current.set(key, willExpand) + cbRef.current.onCollapse?.({ isCollapsing: !willExpand, node: row.value, indexOrName: row.indexOrName, depth: row.path.length + 1 }) + forceUpdate() + }, + toggleChunk(row) { + const key = row.expandKey! + expand.current.set(key, row.kind === 'chunk') + forceUpdate() + }, + editValue(row, newValue) { + const oldValue = row.value + if (row.path.length === 0) { + setSrc(newValue) + cbRef.current.onEdit?.({ newValue, oldValue, depth: 1, src: srcRef.current, indexOrName: row.indexOrName as any, parentType: null, parentPath: [] }) + cbRef.current.onChange?.({ type: 'edit', depth: 1, src: srcRef.current, indexOrName: row.indexOrName as any, parentType: null, parentPath: [] }) + } else { + const parent = getParentByPath(srcRef.current, row.path) + if (Array.isArray(parent)) parent[Number(row.indexOrName)] = newValue + else if (parent) parent[row.indexOrName as string] = newValue + fireEdit(row, newValue, oldValue) + } + setUI(s => ({ ...s, editingKey: undefined })) + forceUpdate() + }, + deleteRow(row) { + const isContainer = row.kind === 'open' || row.kind === 'collapsed' + if (row.path.length === 0) { + setSrc(undefined) + cbRef.current.onDelete?.({ value: srcRef.current, depth: 1, src: srcRef.current, indexOrName: row.indexOrName as any, parentType: null, parentPath: [] }) + cbRef.current.onChange?.({ type: 'delete', depth: 1, src: srcRef.current, indexOrName: row.indexOrName as any, parentType: null, parentPath: [] }) + } else { + const parent = getParentByPath(srcRef.current, row.path) + if (Array.isArray(parent)) parent.splice(Number(row.indexOrName), 1) + else if (parent) delete parent[row.indexOrName as string] + const depth = row.path.length + 1 + const parentType = isContainer ? (row.nodeType === 'array' ? 'array' : 'object') : row.parentType + const parentPath = (isContainer ? row.path : row.parentPath).map(String) + cbRef.current.onDelete?.({ value: row.value, depth, src: srcRef.current, indexOrName: row.indexOrName as any, parentType, parentPath }) + cbRef.current.onChange?.({ type: 'delete', depth, src: srcRef.current, indexOrName: row.indexOrName as any, parentType, parentPath }) + } + setUI(s => ({ ...s, deletingKey: undefined })) + forceUpdate() + }, + addProperty(row, name) { + const container = getByPath(srcRef.current, row.path) + if (container && typeof container === 'object') container[name] = null + const depth = row.path.length + 1 + const parentPath = row.path.map(String) + cbRef.current.onAdd?.({ indexOrName: name, depth, src: srcRef.current, parentType: 'object', parentPath }) + cbRef.current.onChange?.({ type: 'add', indexOrName: name, depth, src: srcRef.current, parentType: 'object', parentPath }) + setUI(s => ({ ...s, addingKey: undefined })) + forceUpdate() + }, + pushArrayItem(row) { + const arr = getByPath(srcRef.current, row.path) + if (Array.isArray(arr)) { + arr.push(null) + const depth = row.path.length + 1 + const parentPath = row.path.map(String) + cbRef.current.onAdd?.({ indexOrName: arr.length - 1, depth, src: srcRef.current, parentType: 'array', parentPath }) + cbRef.current.onChange?.({ type: 'add', indexOrName: arr.length - 1, depth, src: srcRef.current, parentType: 'array', parentPath }) + } + forceUpdate() + }, + startEdit(row) { + setUI({ editingKey: pathKey(row.path) }) + }, + cancelEdit() { + setUI(s => ({ ...s, editingKey: undefined })) + }, + startDelete(row) { + setUI({ deletingKey: pathKey(row.path) }) + }, + cancelDelete() { + setUI(s => ({ ...s, deletingKey: undefined })) + }, + startAdd(row) { + setUI({ addingKey: row.expandKey }) + }, + cancelAdd() { + setUI(s => ({ ...s, addingKey: undefined })) + }, + setStringExpanded(key, expanded) { + stringExpand.current.set(key, expanded) + forceUpdate() + }, + stringExpanded(key) { + return stringExpand.current.get(key) + } + } + }, [forceUpdate]) + + const config = useMemo( + () => ({ + collapseStringsAfterLength, + collapseStringMode, + customizeCollapseStringUI, + enableClipboard, + editable, + displaySize, + displayArrayIndex, + matchesURL, + urlRegExp, + customizeCopy, + CopyComponent, + CopiedComponent, + EditComponent, + CancelComponent, + DoneComponent, + CustomOperation + }), + [ + collapseStringsAfterLength, + collapseStringMode, + customizeCollapseStringUI, + enableClipboard, + editable, + displaySize, + displayArrayIndex, + matchesURL, + urlRegExp, + customizeCopy, + CopyComponent, + CopiedComponent, + EditComponent, + CancelComponent, + DoneComponent, + CustomOperation + ] + ) + + const rows = useMemo( + () => flatten(src, { expand: expand.current, collapsed, collapseObjectsAfterLength, customizeNode, ignoreLargeArray, addingKey: ui.addingKey }), + // eslint-disable-next-line react-hooks/exhaustive-deps + [src, version, ui.addingKey, collapsed, collapseObjectsAfterLength, customizeNode, ignoreLargeArray] + ) + + const flagsFor = useCallback( + (row: FlatRow) => { + const nodeKey = pathKey(row.path) + return { + editing: row.kind === 'value' && ui.editingKey === nodeKey, + deleting: (row.kind === 'value' || row.kind === 'open' || row.kind === 'collapsed') && ui.deletingKey === nodeKey, + adding: row.kind === 'open' && ui.addingKey === nodeKey, + stringTruncated: row.kind === 'value' && row.nodeType === 'string' ? stringExpand.current.get(nodeKey) : undefined + } + }, + // version is a dep so string-truncation toggles (which bump it) recompute flags + // eslint-disable-next-line react-hooks/exhaustive-deps + [ui.editingKey, ui.deletingKey, ui.addingKey, version] + ) + + const rootClassName = 'json-view' + (dark ? ' dark' : '') + (theme && theme !== 'default' ? ' json-view_' + theme : '') + (className ? ' ' + className : '') + + const shouldVirtual = virtual === false ? false : virtual === true ? true : rows.length > rowVirtualThreshold || height != null || maxHeight != null + // A consumer-supplied scroll container owns scrolling, so skip the self-scroll + // box sizing (height/maxHeight and the 70vh fallback) in that mode. + const resolvedMaxHeight = scrollRef != null ? undefined : maxHeight != null ? maxHeight : shouldVirtual && height == null ? '70vh' : undefined + return ( - - - { - setSrc(newValue) - if (onEdit) - onEdit({ - newValue, - oldValue, - depth: 1, - src, - indexOrName: indexOrName, - parentType: null, - parentPath: parentPath - }) - if (onChange) onChange({ type: 'edit', depth: 1, src, indexOrName: indexOrName, parentType: null, parentPath: parentPath }) - }} - deleteHandle={(indexOrName: number | string, parentPath: string[]) => { - setSrc(undefined) - if (onDelete) - onDelete({ - value: src, - depth: 1, - src, - indexOrName: indexOrName, - parentType: null, - parentPath: parentPath - }) - if (onChange) - onChange({ - depth: 1, - src, - indexOrName: indexOrName, - parentType: null, - type: 'delete', - parentPath: parentPath - }) - }} - parentPath={[]} - /> - - + + + {shouldVirtual ? ( + + ) : ( + + {rows.map(row => { + const flags = flagsFor(row) + return + })} + + )} + + ) } diff --git a/src/components/large-array-node.tsx b/src/components/large-array-node.tsx deleted file mode 100644 index 4e14e17..0000000 --- a/src/components/large-array-node.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { useCallback, useContext, useState } from 'react' -import { JsonViewContext } from './json-view' -import { customCopy, objectSize, ifDisplay } from '../utils' -import { ReactComponent as AngleDownSVG } from '../svgs/angle-down.svg' -import CopyButton from './copy-button' -import NameValue from './name-value' -import type { CustomizeOptions } from '../types' - -interface Props { - originNode: Array - node: Array - depth: number - index: number - deleteHandle?: (_: string | number, currentPath: string[]) => void - customOptions?: CustomizeOptions - startIndex: number - parent?: Record | Array - parentPath: string[] -} - -export default function LargeArrayNode({ originNode, node, depth, index, deleteHandle: _deleteSelf, customOptions, startIndex, parent, parentPath }: Props) { - const { enableClipboard, src, onEdit, onChange, forceUpdate, displaySize, CustomOperation } = useContext(JsonViewContext) - - const currentPath = [...parentPath, String(index)] - - const [fold, setFold] = useState(true) - - // Edit property - const editHandle = useCallback( - (indexOrName: number | string, newValue: any, oldValue: any) => { - originNode[indexOrName as number] = newValue - if (onEdit) - onEdit({ - newValue, - oldValue, - depth, - src, - indexOrName, - parentType: 'array', - parentPath - }) - if (onChange) onChange({ type: 'edit', depth, src, indexOrName, parentType: 'array', parentPath }) - forceUpdate() - }, - [node, onEdit, onChange, forceUpdate] - ) - - // Delete property - const deleteHandle = (index: number | string) => { - originNode.splice(index as number, 1) - if (_deleteSelf) _deleteSelf(index, parentPath) - forceUpdate() - } - - const Icons = ( - <> - {!fold && ( - setFold(true)} className='jv-size-chevron'> - {ifDisplay(displaySize, depth, fold) && {objectSize(node)} Items} - - - - )} - - {!fold && enableClipboard && customCopy(customOptions) && ( - - )} - {typeof CustomOperation === 'function' ? : null} - - ) - - return ( -

- {'['} - - {Icons} - - {!fold ? ( -
- {node.map((n, i) => ( - - ))} -
- ) : ( - - )} - - {']'} -
- ) -} diff --git a/src/components/large-array.tsx b/src/components/large-array.tsx deleted file mode 100644 index f6334c7..0000000 --- a/src/components/large-array.tsx +++ /dev/null @@ -1,140 +0,0 @@ -import { useContext, useEffect, useState } from 'react' -import { JsonViewContext } from './json-view' -import { isCollapsed_largeArray, ifDisplay, editableAdd, editableDelete, customAdd, customCopy, customDelete } from '../utils' -import { ReactComponent as AngleDownSVG } from '../svgs/angle-down.svg' -import CopyButton from './copy-button' -import { ReactComponent as DeleteSVG } from '../svgs/trash.svg' -import { ReactComponent as AddSVG } from '../svgs/add-square.svg' -import { ReactComponent as DoneSVG } from '../svgs/done.svg' -import { ReactComponent as CancelSVG } from '../svgs/cancel.svg' -import type { CustomizeOptions } from '../types' -import LargeArrayNode from './large-array-node' - -interface Props { - node: Array - depth: number - indexOrName?: number | string - deleteHandle?: (_: string | number, currentPath: string[]) => void - customOptions?: CustomizeOptions - parent?: Record | Array - parentPath: string[] -} - -export default function LargeArray({ node, depth, deleteHandle: _deleteSelf, indexOrName, customOptions, parent, parentPath }: Props) { - const currentPath = typeof indexOrName !== 'undefined' ? [...parentPath, String(indexOrName)] : parentPath - - const nestCollapsedArray: any[] = [] - for (let i = 0; i < node.length; i += 100) { - nestCollapsedArray.push(node.slice(i, i + 100)) - } - - const { collapsed, enableClipboard, collapseObjectsAfterLength, editable, onDelete, src, onAdd, CustomOperation, onChange, forceUpdate, displaySize } = - useContext(JsonViewContext) - - const [fold, setFold] = useState(isCollapsed_largeArray(node, depth, indexOrName, collapsed, collapseObjectsAfterLength, customOptions)) - useEffect(() => { - setFold(isCollapsed_largeArray(node, depth, indexOrName, collapsed, collapseObjectsAfterLength, customOptions)) - }, [collapsed, collapseObjectsAfterLength]) - - // Delete self - const [deleting, setDeleting] = useState(false) - const deleteSelf = () => { - setDeleting(false) - if (_deleteSelf) _deleteSelf(indexOrName!, parentPath) - if (onDelete) onDelete({ value: node, depth, src, indexOrName: indexOrName!, parentType: 'array', parentPath }) - if (onChange) - onChange({ - type: 'delete', - depth, - src, - indexOrName: indexOrName!, - parentType: 'array', - parentPath - }) - } - - // Add - const [adding, setAdding] = useState(false) - const add = () => { - const arr = node as unknown as any[] - arr.push(null) - if (onAdd) onAdd({ indexOrName: arr.length - 1, depth, src, parentType: 'array', parentPath }) - if (onChange) onChange({ type: 'add', indexOrName: arr.length - 1, depth, src, parentType: 'array', parentPath }) - forceUpdate() - } - - const isEditing = deleting || adding - const cancel = () => { - setDeleting(false) - setAdding(false) - } - - const Icons = ( - <> - {!fold && !isEditing && ( - setFold(true)} className='jv-size-chevron'> - {ifDisplay(displaySize, depth, fold) && {node.length} Items} - - - - )} - - {isEditing && } - {isEditing && } - - {!fold && !isEditing && enableClipboard && customCopy(customOptions) && ( - - )} - {!fold && !isEditing && editableAdd(editable) && customAdd(customOptions) && ( - { - add() - }} - /> - )} - {!fold && !isEditing && editableDelete(editable) && customDelete(customOptions) && _deleteSelf && ( - setDeleting(true)} /> - )} - {typeof CustomOperation === 'function' ? : null} - - ) - - return ( - <> - {'['} - - {Icons} - - {!fold ? ( -
- {nestCollapsedArray.map((item, index) => ( - - ))} -
- ) : ( - - )} - - {']'} - - {fold && ifDisplay(displaySize, depth, fold) && ( - setFold(false)} className='jv-size'> - {node.length} Items - - )} - - ) -} diff --git a/src/components/long-string.tsx b/src/components/long-string.tsx index acf90da..6feb3e9 100644 --- a/src/components/long-string.tsx +++ b/src/components/long-string.tsx @@ -1,15 +1,21 @@ import React, { useContext, useRef, useState } from 'react' -import { JsonViewContext } from './json-view' +import { ConfigContext } from './contexts' interface Props { str: string className: string ctrlClick: ((event: React.MouseEvent) => void) | undefined + // When provided, truncation state is controlled by the caller (central store) + // so it survives virtualized unmount/remount. Falls back to local state. + truncated?: boolean + onToggleTruncated?: (next: boolean) => void } -const LongString = React.forwardRef(({ str, className, ctrlClick }, ref) => { - let { collapseStringMode, collapseStringsAfterLength, customizeCollapseStringUI } = useContext(JsonViewContext) - const [truncated, setTruncated] = useState(true) +const LongString = React.forwardRef(({ str, className, ctrlClick, truncated: truncatedProp, onToggleTruncated }, ref) => { + let { collapseStringMode, collapseStringsAfterLength, customizeCollapseStringUI } = useContext(ConfigContext) + const [truncatedLocal, setTruncatedLocal] = useState(true) + const truncated = truncatedProp ?? truncatedLocal + const setTruncated = (next: boolean) => (onToggleTruncated ? onToggleTruncated(next) : setTruncatedLocal(next)) const strRef = useRef(null) collapseStringsAfterLength = collapseStringsAfterLength > 0 ? collapseStringsAfterLength : 0 diff --git a/src/components/name-value.tsx b/src/components/name-value.tsx deleted file mode 100644 index 76bf272..0000000 --- a/src/components/name-value.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { useContext } from 'react' -import { JsonViewContext } from './json-view' - -import JsonNode from './json-node' - -interface Props { - indexOrName: number | string - value: any - depth: number - parent?: Record | Array - parentPath: string[] - deleteHandle: (indexOrName: string | number, parentPath: string[]) => void - editHandle: (indexOrName: string | number, newValue: any, oldValue: any, parentPath: string[]) => void -} - -export default function NameValue({ indexOrName, value, depth, deleteHandle, editHandle, parent, parentPath }: Props) { - const { displayArrayIndex } = useContext(JsonViewContext) - const isArray = Array.isArray(parent) - - return ( -
- {!isArray || (isArray && displayArrayIndex) ? ( - <> - {indexOrName}:{' '} - - ) : ( - <> - )} - deleteHandle(indexOrName, parentPath)} - editHandle={(indexOrName, newValue, oldValue, parentPath) => editHandle(indexOrName, newValue, oldValue, parentPath)} - parent={parent} - indexOrName={indexOrName} - parentPath={parentPath} - /> -
- ) -} diff --git a/src/components/object-node.tsx b/src/components/object-node.tsx deleted file mode 100644 index eb186c4..0000000 --- a/src/components/object-node.tsx +++ /dev/null @@ -1,266 +0,0 @@ -import { useCallback, useContext, useEffect, useRef, useState } from 'react' -import { JsonViewContext } from './json-view' -import { isObject, customAdd, customCopy, customDelete, editableAdd, editableDelete, isCollapsed, objectSize, ifDisplay } from '../utils' -import { ReactComponent as AngleDownSVG } from '../svgs/angle-down.svg' -import CopyButton from './copy-button' -import NameValue from './name-value' -import { ReactComponent as DeleteSVG } from '../svgs/trash.svg' -import { ReactComponent as AddSVG } from '../svgs/add-square.svg' -import { ReactComponent as DoneSVG } from '../svgs/done.svg' -import { ReactComponent as CancelSVG } from '../svgs/cancel.svg' -import type { CustomizeOptions } from '../types' -import LargeArray from './large-array' - -interface Props { - node: Record | Array - depth: number - indexOrName?: number | string - deleteHandle?: (_: string | number, currentPath: string[]) => void - customOptions?: CustomizeOptions - parent?: Record | Array - parentPath: string[] -} - -export default function ObjectNode({ node, depth, indexOrName, deleteHandle: _deleteSelf, customOptions, parent, parentPath }: Props) { - const { - collapsed, - onCollapse, - enableClipboard, - ignoreLargeArray, - collapseObjectsAfterLength, - editable, - onDelete, - src, - onAdd, - onEdit, - onChange, - forceUpdate, - displaySize, - CustomOperation - } = useContext(JsonViewContext) - - const currentPath = typeof indexOrName !== 'undefined' ? [...parentPath, String(indexOrName)] : parentPath - - if (!ignoreLargeArray && Array.isArray(node) && node.length > 100) { - return - } - - const isPlainObject = isObject(node) - - const [fold, _setFold] = useState(isCollapsed(node, depth, indexOrName, collapsed, collapseObjectsAfterLength, customOptions)) - - const setFold = (value: boolean) => { - onCollapse?.({ isCollapsing: !value, node, depth, indexOrName }) - _setFold(value) - } - - useEffect(() => { - setFold(isCollapsed(node, depth, indexOrName, collapsed, collapseObjectsAfterLength, customOptions)) - }, [collapsed, collapseObjectsAfterLength]) - - // Edit property - const editHandle = useCallback( - (indexOrName: number | string, newValue: any, oldValue: any) => { - if (Array.isArray(node)) { - node[+indexOrName] = newValue - } else if (node) { - node[indexOrName] = newValue - } - if (onEdit) - onEdit({ - newValue, - oldValue, - depth, - src, - indexOrName: indexOrName, - parentType: isPlainObject ? 'object' : 'array', - parentPath: currentPath - }) - if (onChange) onChange({ type: 'edit', depth, src, indexOrName: indexOrName, parentType: isPlainObject ? 'object' : 'array', parentPath: currentPath }) - forceUpdate() - }, - [node, onEdit, onChange, forceUpdate] - ) - - // Delete property - const deleteHandle = (indexOrName: number | string) => { - if (Array.isArray(node)) { - node.splice(+indexOrName, 1) - } else if (node) { - delete node[indexOrName] - } - forceUpdate() - } - - // Delete self - const [deleting, setDeleting] = useState(false) - const deleteSelf = () => { - setDeleting(false) - if (_deleteSelf) _deleteSelf(indexOrName!, currentPath) - if (onDelete) onDelete({ value: node, depth, src, indexOrName: indexOrName!, parentType: isPlainObject ? 'object' : 'array', parentPath: currentPath }) - if (onChange) - onChange({ - type: 'delete', - depth, - src, - indexOrName: indexOrName!, - parentType: isPlainObject ? 'object' : 'array', - parentPath: currentPath - }) - } - - // Add - const [adding, setAdding] = useState(false) - const inputRef = useRef(null) - const add = () => { - if (isPlainObject) { - const inputName = inputRef.current?.value - - if (inputName) { - ;(node as Record)[inputName] = null - - if (inputRef.current) inputRef.current.value = '' - setAdding(false) - - if (onAdd) onAdd({ indexOrName: inputName, depth, src, parentType: 'object', parentPath: currentPath }) - if (onChange) onChange({ type: 'add', indexOrName: inputName, depth, src, parentType: 'object', parentPath: currentPath }) - } - } else if (Array.isArray(node)) { - const arr = node as unknown as any[] - arr.push(null) - if (onAdd) onAdd({ indexOrName: arr.length - 1, depth, src, parentType: 'array', parentPath: currentPath }) - if (onChange) onChange({ type: 'add', indexOrName: arr.length - 1, depth, src, parentType: 'array', parentPath: currentPath }) - } - forceUpdate() - } - const handleAddKeyDown = (event: React.KeyboardEvent) => { - if (event.key === 'Enter') { - event.preventDefault() - add() - } else if (event.key === 'Escape') { - cancel() - } - } - - const isEditing = deleting || adding - const cancel = () => { - setDeleting(false) - setAdding(false) - } - - const Icons = ( - <> - {!fold && !isEditing && ( - setFold(true)} className='jv-size-chevron'> - {ifDisplay(displaySize, depth, fold) && {objectSize(node)} Items} - - - - )} - - {adding && isPlainObject && } - - {isEditing && } - {isEditing && } - - {!fold && !isEditing && enableClipboard && customCopy(customOptions) && ( - - )} - {!fold && !isEditing && editableAdd(editable) && customAdd(customOptions) && ( - { - if (isPlainObject) { - setAdding(true) - setTimeout(() => inputRef.current?.focus()) - } else { - add() - } - }} - /> - )} - {!fold && !isEditing && editableDelete(editable) && customDelete(customOptions) && _deleteSelf && ( - setDeleting(true)} /> - )} - {typeof CustomOperation === 'function' ? : null} - - ) - - if (Array.isArray(node)) { - return ( - <> - {'['} - - {Icons} - - {!fold ? ( -
- {node.map((n, i) => ( - - ))} -
- ) : ( - - )} - - {']'} - - {fold && ifDisplay(displaySize, depth, fold) && ( - setFold(false)} className='jv-size'> - {objectSize(node)} Items - - )} - - ) - } else if (isPlainObject) { - return ( - <> - {'{'} - - {Icons} - - {!fold ? ( -
- {Object.entries(node).map(([name, value]) => ( - - ))} -
- ) : ( - - )} - - {'}'} - - {fold && ifDisplay(displaySize, depth, fold) && ( - setFold(false)} className='jv-size'> - {objectSize(node)} Items - - )} - - ) - } else { - return {String(node)} - } -} diff --git a/src/components/row.tsx b/src/components/row.tsx new file mode 100644 index 0000000..070199b --- /dev/null +++ b/src/components/row.tsx @@ -0,0 +1,388 @@ +import React, { useContext, useEffect, useMemo, useRef } from 'react' +import { ConfigContext, HandlersContext } from './contexts' +import type { FlatRow } from '../core/row' +import { pathKey } from '../core/path' +import LongString from './long-string' +import CopyButton from './copy-button' +import { ReactComponent as AngleDownSVG } from '../svgs/angle-down.svg' +import { ReactComponent as EditSVG } from '../svgs/edit.svg' +import { ReactComponent as DeleteSVG } from '../svgs/trash.svg' +import { ReactComponent as AddSVG } from '../svgs/add-square.svg' +import { ReactComponent as DoneSVG } from '../svgs/done.svg' +import { ReactComponent as CancelSVG } from '../svgs/cancel.svg' +import { ReactComponent as LinkSVG } from '../svgs/link.svg' +import { + editableEdit, + editableDelete, + editableAdd, + customEdit, + customDelete, + customAdd, + customCopy, + customMatchesURL, + ifDisplay, + resolveEvalFailedNewValue +} from '../utils' +import type { CustomizeOptions } from '../types' + +export interface RowProps { + row: FlatRow + editing: boolean + deleting: boolean + adding: boolean + /** central long-string truncation state (undefined = use LongString default) */ + stringTruncated?: boolean + index?: number + style?: React.CSSProperties + measureRef?: (el: HTMLElement | null) => void +} + +function Done({ onClick }: { onClick: (e: React.MouseEvent) => void }) { + const { DoneComponent } = useContext(ConfigContext) + const style = { display: 'inline-block' } as React.CSSProperties + return typeof DoneComponent === 'function' ? ( + + ) : ( + + ) +} +function Cancel({ onClick }: { onClick: (e: React.MouseEvent) => void }) { + const { CancelComponent } = useContext(ConfigContext) + const style = { display: 'inline-block' } as React.CSSProperties + return typeof CancelComponent === 'function' ? ( + + ) : ( + + ) +} + +function Row({ row, editing, deleting, adding, stringTruncated, index, style, measureRef }: RowProps) { + const config = useContext(ConfigContext) + const handlers = useContext(HandlersContext) + const { displaySize, displayArrayIndex, CustomOperation } = config + const customOptions = row.customOptions + + // hoverable rows keep the legacy .json-view--pair class so consumer hover CSS + // (icons revealed on pair:hover) keeps working; icons stay direct children. + const isPair = row.kind === 'value' || row.kind === 'open' || row.kind === 'collapsed' || row.kind === 'chunk' || row.kind === 'chunk-open' || row.kind === 'custom' + const wrap = (children: React.ReactNode) => ( +
+ {children} +
+ ) + + const keyLabel = + row.path.length === 0 || (row.parentType === 'array' && !displayArrayIndex) ? null : ( + <> + {row.indexOrName}:{' '} + + ) + + switch (row.kind) { + case 'value': + return wrap( + <> + {keyLabel} + + + ) + case 'open': + return wrap( + <> + {keyLabel} + {row.bracket} + + + ) + case 'collapsed': + return wrap( + <> + {keyLabel} + {row.bracket} + {typeof CustomOperation === 'function' ? : null} + + {row.bracket === '{' ? '}' : ']'} + {ifDisplay(displaySize, row.depth, true) && ( + handlers.toggle(row)} className="jv-size"> + {row.size} Items + + )} + + ) + case 'close': + return wrap({row.bracket}) + case 'chunk': + return wrap( + <> + {'['} + {typeof CustomOperation === 'function' ? : null} + + {']'} + + ) + case 'chunk-open': + return wrap( + <> + {'['} + handlers.toggleChunk(row)} className="jv-size-chevron"> + {ifDisplay(displaySize, row.depth, false) && {(row.value as any[]).length} Items} + + + {config.enableClipboard && customCopy(customOptions) && ( + + )} + {typeof CustomOperation === 'function' ? : null} + + ) + case 'chunk-close': + return wrap({']'}) + case 'add-input': + return wrap() + case 'custom': { + const Custom = row.customRender as any + const content = React.isValidElement(Custom) ? Custom : + return wrap( + <> + {keyLabel} + {content} + + ) + } + default: + return null + } +} + +// flatten() produces fresh FlatRow objects on every recompute, so a default +// shallow compare would re-render every mounted row. Compare the fields that +// actually affect output (incl. the virtual row's translateY) so unchanged rows +// skip re-render — this is what keeps large / scrolling lists cheap. +function areEqual(a: RowProps, b: RowProps): boolean { + if (a.editing !== b.editing || a.deleting !== b.deleting || a.adding !== b.adding || a.index !== b.index) return false + if (a.stringTruncated !== b.stringTruncated) return false + if (a.style?.transform !== b.style?.transform) return false + const r1 = a.row + const r2 = b.row + return ( + r1.id === r2.id && + r1.kind === r2.kind && + r1.value === r2.value && + r1.depth === r2.depth && + r1.size === r2.size && + r1.indexOrName === r2.indexOrName && + r1.bracket === r2.bracket && + r1.customOptions === r2.customOptions && + r1.customRender === r2.customRender && + r1.chunk?.index === r2.chunk?.index && + r1.chunk?.start === r2.chunk?.start && + r1.chunk?.end === r2.chunk?.end + ) +} + +export default React.memo(Row, areEqual) + +function ValueLeaf({ row, editing, deleting, stringTruncated }: { row: FlatRow; editing: boolean; deleting: boolean; stringTruncated?: boolean }) { + const config = useContext(ConfigContext) + const handlers = useContext(HandlersContext) + const { editable, enableClipboard, matchesURL, urlRegExp, EditComponent, CustomOperation } = config + const customOptions = row.customOptions as CustomizeOptions | undefined + const type = row.nodeType + const node = row.value + const valueRef = useRef(null) + const key = pathKey(row.path) + + let className = 'json-view--string' + switch (type) { + case 'number': + case 'bigint': + className = 'json-view--number' + break + case 'boolean': + className = 'json-view--boolean' + break + case 'null': + className = 'json-view--null' + break + } + if (typeof customOptions?.className === 'string') className += ' ' + customOptions.className + if (deleting) className += ' json-view--deleting' + + let displayValue = String(node) + if (type === 'bigint') displayValue += 'n' + + const commit = () => { + const text = valueRef.current?.innerText ?? '' + try { + handlers.editValue(row, JSON.parse(text)) + } catch { + handlers.editValue(row, resolveEvalFailedNewValue(type, text)) + } + } + const handleKeyDown = (event: React.KeyboardEvent) => { + if (event.key === 'Enter') { + event.preventDefault() + commit() + } else if (event.key === 'Escape') { + handlers.cancelEdit() + } + } + + useEffect(() => { + if (editing && valueRef.current) { + const el = valueRef.current + setTimeout(() => { + window.getSelection()?.selectAllChildren(el) + el.focus() + }) + } + }, [editing]) + + const canEdit = editableEdit(editable) && customEdit(customOptions) + const ctrlClick = + !editing && !deleting && canEdit + ? (event: React.MouseEvent) => { + if (event.ctrlKey || event.metaKey) handlers.startEdit(row) + } + : undefined + + const EditingElement = useMemo( + () => ( + + ), + [displayValue, type, className] + ) + + const isEditing = editing || deleting + const icons = ( + <> + {isEditing && handlers.deleteRow(row) : commit} />} + {isEditing && handlers.cancelDelete() : () => handlers.cancelEdit()} />} + + {!isEditing && enableClipboard && customCopy(customOptions) && ( + + )} + {!isEditing && matchesURL && type === 'string' && urlRegExp.test(node) && customMatchesURL(customOptions) && ( + + + + )} + {!isEditing && + canEdit && + (typeof EditComponent === 'function' ? ( + handlers.startEdit(row)} /> + ) : ( + handlers.startEdit(row)} /> + ))} + {!isEditing && editableDelete(editable) && customDelete(customOptions) && handlers.startDelete(row)} />} + {typeof CustomOperation === 'function' ? : null} + + ) + + if (type === 'string') { + return ( + <> + {editing ? ( + EditingElement + ) : ( + handlers.setStringExpanded(key, next)} + /> + )} + {icons} + + ) + } + return ( + <> + {editing ? ( + EditingElement + ) : ( + + {displayValue} + + )} + {icons} + + ) +} + +function ContainerIcons({ row, deleting, adding, folded }: { row: FlatRow; deleting: boolean; adding: boolean; folded: boolean }) { + const config = useContext(ConfigContext) + const handlers = useContext(HandlersContext) + const { editable, enableClipboard, displaySize, CustomOperation } = config + const customOptions = row.customOptions + const isEditing = deleting || adding + const isArr = row.nodeType === 'array' + + return ( + <> + {!isEditing && ( + handlers.toggle(row)} className="jv-size-chevron"> + {ifDisplay(displaySize, row.depth, folded) && {row.size} Items} + + + )} + + {deleting && handlers.deleteRow(row)} />} + {deleting && handlers.cancelDelete()} />} + + {!isEditing && enableClipboard && customCopy(customOptions) && ( + + )} + {!isEditing && editableAdd(editable) && customAdd(customOptions) && ( + (isArr ? handlers.pushArrayItem(row) : handlers.startAdd(row))} /> + )} + {!isEditing && editableDelete(editable) && customDelete(customOptions) && handlers.startDelete(row)} />} + {typeof CustomOperation === 'function' ? : null} + + ) +} + +function AddInput({ row }: { row: FlatRow }) { + const handlers = useContext(HandlersContext) + const inputRef = useRef(null) + + useEffect(() => { + inputRef.current?.focus() + }, []) + + const submit = () => { + const name = inputRef.current?.value + if (name) handlers.addProperty(row, name) + } + const onKeyDown = (event: React.KeyboardEvent) => { + if (event.key === 'Enter') { + event.preventDefault() + submit() + } else if (event.key === 'Escape') { + handlers.cancelAdd() + } + } + + return ( + <> + + + handlers.cancelAdd()} /> + + ) +} diff --git a/src/components/virtual-list.tsx b/src/components/virtual-list.tsx new file mode 100644 index 0000000..e9e4046 --- /dev/null +++ b/src/components/virtual-list.tsx @@ -0,0 +1,79 @@ +import { useLayoutEffect, useRef, useState } from 'react' +import { useVirtualizer } from '@tanstack/react-virtual' +import Row from './row' +import type { FlatRow } from '../core/row' + +interface Props { + rows: FlatRow[] + flagsFor: (row: FlatRow) => { editing: boolean; deleting: boolean; adding: boolean; stringTruncated?: boolean } + className: string + style?: React.CSSProperties + height?: number | string + maxHeight?: number | string + estimatedRowHeight: number + overscan: number + scrollRef?: React.RefObject +} + +export default function VirtualList({ rows, flagsFor, className, style, height, maxHeight, estimatedRowHeight, overscan, scrollRef }: Props) { + const rootRef = useRef(null) + // External mode: the caller's element scrolls and this list may sit below other + // content in it. Self mode: the root below is itself the scroll element. + const external = scrollRef != null + + // In external mode the list can start partway down the scroll container, so the + // virtualizer needs that leading offset (scrollMargin) to map scroll position to + // rows. Measured from layout, refreshed when the row count changes; 0 in self mode. + const [scrollMargin, setScrollMargin] = useState(0) + useLayoutEffect(() => { + if (!external) { + setScrollMargin(0) + return + } + const scrollEl = scrollRef.current + const listEl = rootRef.current + if (!scrollEl || !listEl) return + setScrollMargin(listEl.getBoundingClientRect().top - scrollEl.getBoundingClientRect().top + scrollEl.scrollTop) + }, [external, scrollRef, rows.length]) + + const virtualizer = useVirtualizer({ + count: rows.length, + getScrollElement: () => (external ? scrollRef.current : rootRef.current), + estimateSize: () => estimatedRowHeight, + overscan, + scrollMargin + }) + + const items = virtualizer.getVirtualItems() + + return ( + // Root is to match the non-virtualized path so the UA monospace font + // applies identically in both modes. In self mode it owns the scroll box + // (jv-scroll class + overflow + height/maxHeight); in external mode the + // caller's element scrolls, so drop the scroll class and box styling and let + // this be a plain sizer host. + } + className={external ? className : className + ' jv-scroll'} + style={external ? style : { overflow: 'auto', height, maxHeight, ...style }} + > +
+ {/* rows */} + {items.map(vi => { + const row = rows[vi.index] + const flags = flagsFor(row) + return ( + + ) + })} +
+
+ ) +} diff --git a/src/core/expand-state.ts b/src/core/expand-state.ts new file mode 100644 index 0000000..1b5dd30 --- /dev/null +++ b/src/core/expand-state.ts @@ -0,0 +1,38 @@ +import type { Collapsed, CustomizeOptions } from '../types' +import { isCollapsed, isCollapsed_largeArray } from '../utils' + +// The store holds ONLY explicit user overrides (true = expanded, false = folded). +// Everything else resolves lazily from the existing isCollapsed helpers, so +// collapsed subtrees are never walked and there is no full-tree pre-pass. +export type ExpandState = Map + +export interface ExpandOpts { + collapsed: Collapsed + collapseObjectsAfterLength: number +} + +/** + * Whether a container node is expanded. `ownDepth` is the node's own depth + * (= path.length + 1), matching what the legacy ObjectNode passed to isCollapsed. + */ +export function isContainerExpanded( + overrides: ExpandState, + key: string, + node: any, + ownDepth: number, + indexOrName: number | string | undefined, + opts: ExpandOpts, + largeArray: boolean, + customOptions?: CustomizeOptions +): boolean { + if (overrides.has(key)) return overrides.get(key)! + const collapsedResult = largeArray + ? isCollapsed_largeArray(node, ownDepth, indexOrName, opts.collapsed, opts.collapseObjectsAfterLength, customOptions) + : isCollapsed(node, ownDepth, indexOrName, opts.collapsed, opts.collapseObjectsAfterLength, customOptions) + return !collapsedResult +} + +/** Large-array chunks default to folded (legacy LargeArrayNode useState(true)). */ +export function isChunkExpanded(overrides: ExpandState, key: string): boolean { + return overrides.get(key) ?? false +} diff --git a/src/core/flatten.test.ts b/src/core/flatten.test.ts new file mode 100644 index 0000000..5124cb9 --- /dev/null +++ b/src/core/flatten.test.ts @@ -0,0 +1,131 @@ +import { describe, test, expect } from 'vitest' +import { flatten, FlattenOpts } from './flatten' +import { ExpandState } from './expand-state' +import { pathKey, chunkKey } from './path' + +function opts(over: Partial = {}): FlattenOpts { + return { + expand: new Map(), + collapsed: undefined, + collapseObjectsAfterLength: 99, + ignoreLargeArray: false, + ...over + } +} + +const sig = (rows: ReturnType) => rows.map(r => `${r.kind}:${String(r.indexOrName)}@${r.depth}`) + +describe('flatten — primitives & containers', () => { + test('primitive root is a single value row at depth 1', () => { + const rows = flatten('hello', opts()) + expect(rows).toHaveLength(1) + expect(rows[0]).toMatchObject({ kind: 'value', path: [], depth: 1, nodeType: 'string', parentType: null, value: 'hello' }) + }) + + test('simple object: open, values, close in order with correct depths', () => { + const rows = flatten({ a: 1, b: 'x' }, opts()) + expect(sig(rows)).toEqual(['open:undefined@1', 'value:a@2', 'value:b@2', 'close:undefined@1']) + expect(rows[1]).toMatchObject({ path: ['a'], parentType: 'object', nodeType: 'number' }) + }) + + test('nested object depths follow visual nesting', () => { + const rows = flatten({ a: { b: 1 } }, opts()) + expect(sig(rows)).toEqual(['open:undefined@1', 'open:a@2', 'value:b@3', 'close:a@2', 'close:undefined@1']) + expect(rows[2]).toMatchObject({ path: ['a', 'b'] }) + }) + + test('array elements carry numeric indexOrName and array parentType', () => { + const rows = flatten([10, 20], opts()) + expect(sig(rows)).toEqual(['open:undefined@1', 'value:0@2', 'value:1@2', 'close:undefined@1']) + expect(rows[1]).toMatchObject({ indexOrName: 0, parentType: 'array', path: [0] }) + }) + + test('node types are classified (null vs object vs number vs bool)', () => { + const rows = flatten({ n: null, s: 'x', b: true, num: 3 }, opts()) + const byName = Object.fromEntries(rows.filter(r => r.kind === 'value').map(r => [r.indexOrName, r.nodeType])) + expect(byName).toEqual({ n: 'null', s: 'string', b: 'boolean', num: 'number' }) + }) +}) + +describe('flatten — collapse defaults', () => { + test('collapsed=true yields a single collapsed row, children not walked', () => { + const rows = flatten({ a: 1, b: 2 }, opts({ collapsed: true })) + expect(rows).toHaveLength(1) + expect(rows[0]).toMatchObject({ kind: 'collapsed', depth: 1 }) + }) + + test('collapsed as number collapses strictly below that depth', () => { + const rows = flatten({ a: { b: 1 } }, opts({ collapsed: 1 })) + // root (depth 1) open; inner object (own depth 2 > 1) collapsed + expect(sig(rows)).toEqual(['open:undefined@1', 'collapsed:a@2', 'close:undefined@1']) + }) + + test('collapseObjectsAfterLength folds oversized containers by default', () => { + const rows = flatten({ a: 1, b: 2, c: 3 }, opts({ collapseObjectsAfterLength: 2 })) + expect(rows[0].kind).toBe('collapsed') + }) + + test('expand override re-opens a would-be-collapsed node', () => { + const expand: ExpandState = new Map([[pathKey([]), true]]) + const rows = flatten({ a: 1 }, opts({ collapsed: true, expand })) + expect(rows[0].kind).toBe('open') + }) +}) + +describe('flatten — large-array chunking', () => { + const arr = Array.from({ length: 150 }, (_, i) => i) + + test('folds into chunk rows (folded by default) under the array', () => { + const rows = flatten(arr, opts()) + const kinds = rows.map(r => r.kind) + expect(kinds).toEqual(['open', 'chunk', 'chunk', 'close']) + expect(rows[1].chunk).toEqual({ index: 0, start: 0, end: 99 }) + expect(rows[2].chunk).toEqual({ index: 1, start: 100, end: 149 }) + // chunk rows sit one visual level below the array + expect(rows[1].depth).toBe(2) + }) + + test('expanding a chunk walks its real-indexed elements at depth+2', () => { + const expand: ExpandState = new Map([[chunkKey([], 1), true]]) + const rows = flatten(arr, opts({ expand })) + const open = rows.find(r => r.kind === 'chunk-open')! + expect(open.depth).toBe(2) + const el = rows.find(r => r.kind === 'value' && r.indexOrName === 149)! + expect(el).toMatchObject({ depth: 3, parentType: 'array', path: [149] }) + expect(rows.some(r => r.kind === 'chunk-close')).toBe(true) + }) + + test('ignoreLargeArray renders elements directly (no chunks)', () => { + const rows = flatten(arr, opts({ ignoreLargeArray: true, collapsed: false })) + expect(rows.some(r => r.kind.startsWith('chunk'))).toBe(false) + expect(rows.filter(r => r.kind === 'value')).toHaveLength(150) + }) +}) + +describe('flatten — customizeNode & path safety', () => { + test('customizeNode element short-circuits to a custom row (subtree not walked)', () => { + const el = { $$typeof: Symbol.for('react.element'), type: 'span', props: {}, key: null } as any + const rows = flatten({ a: { deep: 1 } }, opts({ customizeNode: ({ indexOrName }) => (indexOrName === 'a' ? el : undefined) })) + expect(sig(rows)).toEqual(['open:undefined@1', 'custom:a@2', 'close:undefined@1']) + }) + + test('customizeNode options object feeds collapse (collapsed:true)', () => { + const rows = flatten({ a: { b: 1 } }, opts({ customizeNode: ({ indexOrName }) => (indexOrName === 'a' ? { collapsed: true } : undefined) })) + const aRow = rows.find(r => r.indexOrName === 'a')! + expect(aRow.kind).toBe('collapsed') + expect(aRow.customOptions).toEqual({ collapsed: true }) + }) + + test('dotted keys do not collide in path ids', () => { + const rows = flatten({ 'a.b': 1, a: { b: 2 } }, opts()) + const ids = rows.map(r => r.id) + expect(new Set(ids).size).toBe(ids.length) + }) +}) + +describe('flatten — add-input injection', () => { + test('injects an add-input row right after the container open row', () => { + const rows = flatten({ a: 1 }, opts({ addingKey: pathKey([]) })) + expect(sig(rows)).toEqual(['open:undefined@1', 'add-input:undefined@2', 'value:a@2', 'close:undefined@1']) + }) +}) diff --git a/src/core/flatten.ts b/src/core/flatten.ts new file mode 100644 index 0000000..c2a6a13 --- /dev/null +++ b/src/core/flatten.ts @@ -0,0 +1,162 @@ +import { isValidElement } from 'react' +import type { Collapsed, CustomizeNode, CustomizeOptions } from '../types' +import { objectSize, isReactComponent, safeCall } from '../utils' +import { FlatRow, RowKind, getNodeType } from './row' +import { pathKey, chunkKey } from './path' +import { ExpandState, isContainerExpanded, isChunkExpanded } from './expand-state' + +export const CHUNK_SIZE = 100 +export const LARGE_ARRAY_THRESHOLD = 100 + +export interface FlattenOpts { + expand: ExpandState + collapsed: Collapsed + collapseObjectsAfterLength: number + customizeNode?: CustomizeNode + ignoreLargeArray: boolean + /** pathKey of a container currently showing its add-property input row */ + addingKey?: string +} + +type Frame = + | { t: 'node'; value: any; path: (string | number)[]; depth: number; indexOrName: string | number | undefined; parentType: 'object' | 'array' | null } + | { t: 'chunk'; array: any[]; path: (string | number)[]; depth: number; index: number; start: number; end: number } + | { t: 'emit'; row: FlatRow } + +function makeId(path: (string | number)[], kind: RowKind, expandKey?: string): string { + if (kind === 'chunk' || kind === 'chunk-open' || kind === 'chunk-close') return expandKey + ':' + kind + return pathKey(path) + ':' + kind +} + +/** + * Turn `root` + the expand-state overrides into an ordered flat array of visible + * rows. Collapsed subtrees are never walked, so cost is O(visible rows). + */ +export function flatten(root: any, opts: FlattenOpts): FlatRow[] { + const { expand, collapsed, collapseObjectsAfterLength, customizeNode, ignoreLargeArray, addingKey } = opts + const rows: FlatRow[] = [] + const stack: Frame[] = [{ t: 'node', value: root, path: [], depth: 1, indexOrName: undefined, parentType: null }] + + while (stack.length) { + const frame = stack.pop()! + + if (frame.t === 'emit') { + rows.push(frame.row) + continue + } + + if (frame.t === 'chunk') { + processChunk(frame, expand, rows, stack) + continue + } + + const { value, path, depth, indexOrName, parentType } = frame + const ownDepth = path.length + 1 + + // customizeNode runs first, exactly like json-node.tsx short-circuit + let customOptions: CustomizeOptions | undefined + if (typeof customizeNode === 'function') { + const ret = safeCall(customizeNode, [{ node: value, depth: ownDepth, indexOrName }]) + if (ret) { + if (isValidElement(ret)) { + rows.push(mkRow({ kind: 'custom', path, depth, indexOrName, parentType, value, customRender: ret })) + continue + } else if (isReactComponent(ret)) { + rows.push(mkRow({ kind: 'custom', path, depth, indexOrName, parentType, value, customRender: ret as React.ComponentType })) + continue + } else if (typeof ret === 'object') { + customOptions = ret as CustomizeOptions + } + } + } + + const nodeType = getNodeType(value) + const isArr = nodeType === 'array' + const isObj = nodeType === 'object' + + if (!isArr && !isObj) { + rows.push(mkRow({ kind: 'value', path, depth, indexOrName, parentType, value, nodeType, customOptions })) + continue + } + + const key = pathKey(path) + const size = objectSize(value) + const largeArray = isArr && !ignoreLargeArray && (value as any[]).length > LARGE_ARRAY_THRESHOLD + const expanded = isContainerExpanded(expand, key, value, ownDepth, indexOrName, { collapsed, collapseObjectsAfterLength }, largeArray, customOptions) + const openBracket = isArr ? '[' : '{' + const closeBracket = isArr ? ']' : '}' + + if (!expanded) { + rows.push(mkRow({ kind: 'collapsed', path, depth, indexOrName, parentType, value, nodeType, bracket: openBracket, size, expandKey: key, customOptions })) + continue + } + + rows.push(mkRow({ kind: 'open', path, depth, indexOrName, parentType, value, nodeType, bracket: openBracket, size, expandKey: key, customOptions })) + + const closeRow = mkRow({ kind: 'close', path, depth, indexOrName, parentType, value, nodeType, bracket: closeBracket, size, expandKey: key }) + stack.push({ t: 'emit', row: closeRow }) + + // children, pushed reversed so the first child pops first + if (largeArray) { + const arr = value as any[] + const chunkCount = Math.ceil(arr.length / CHUNK_SIZE) + for (let c = chunkCount - 1; c >= 0; c--) { + const start = c * CHUNK_SIZE + const end = Math.min(arr.length, start + CHUNK_SIZE) + stack.push({ t: 'chunk', array: arr, path, depth: depth + 1, index: c, start, end }) + } + } else if (isArr) { + const arr = value as any[] + for (let i = arr.length - 1; i >= 0; i--) { + stack.push({ t: 'node', value: arr[i], path: [...path, i], depth: depth + 1, indexOrName: i, parentType: 'array' }) + } + } else { + const entries = Object.entries(value) + for (let i = entries.length - 1; i >= 0; i--) { + const [k, v] = entries[i] + stack.push({ t: 'node', value: v, path: [...path, k], depth: depth + 1, indexOrName: k, parentType: 'object' }) + } + } + + // add-input row emits right after the open row (top of stack) + if (addingKey !== undefined && addingKey === key) { + stack.push({ t: 'emit', row: mkRow({ kind: 'add-input', path, depth: depth + 1, indexOrName, parentType: isArr ? 'array' : 'object', value: null }) }) + } + } + + return rows +} + +function processChunk(frame: Extract, expand: ExpandState, rows: FlatRow[], stack: Frame[]) { + const { array, path, depth, index, start, end } = frame + const key = chunkKey(path, index) + const chunkMeta = { index, start, end: end - 1 } + const expanded = isChunkExpanded(expand, key) + + if (!expanded) { + rows.push( + mkRow({ kind: 'chunk', path, depth, indexOrName: undefined, parentType: 'array', value: array.slice(start, end), nodeType: 'array', bracket: '[', expandKey: key, chunk: chunkMeta }) + ) + return + } + + rows.push( + mkRow({ kind: 'chunk-open', path, depth, indexOrName: undefined, parentType: 'array', value: array.slice(start, end), nodeType: 'array', bracket: '[', expandKey: key, chunk: chunkMeta }) + ) + const closeRow = mkRow({ kind: 'chunk-close', path, depth, indexOrName: undefined, parentType: 'array', value: null, nodeType: 'array', bracket: ']', expandKey: key, chunk: chunkMeta }) + stack.push({ t: 'emit', row: closeRow }) + + for (let i = end - 1; i >= start; i--) { + stack.push({ t: 'node', value: array[i], path: [...path, i], depth: depth + 1, indexOrName: i, parentType: 'array' }) + } +} + +function mkRow(partial: Omit & { nodeType?: FlatRow['nodeType'] }): FlatRow { + const nodeType = partial.nodeType ?? getNodeType(partial.value) + return { + ...partial, + nodeType, + parentPath: partial.path.slice(0, -1), + id: makeId(partial.path, partial.kind, partial.expandKey) + } +} diff --git a/src/core/path.ts b/src/core/path.ts new file mode 100644 index 0000000..7872fb2 Binary files /dev/null and b/src/core/path.ts differ diff --git a/src/core/row.ts b/src/core/row.ts new file mode 100644 index 0000000..39a43f8 --- /dev/null +++ b/src/core/row.ts @@ -0,0 +1,49 @@ +import type { ReactElement } from 'react' +import type { CustomizeOptions } from '../types' + +// One visible line in the flattened tree. +// +// depth = VISUAL indentation level (root = 1); padding-left = (depth - 1) * 1em. +// This differs from the callback/collapse "own depth" (= path.length + 1) only +// inside large-array chunks, which add a visual indent level without a real path +// segment. Callback depths are derived from `path` in the mutation layer, not +// from `depth`, to preserve the exact legacy semantics. +export type RowKind = + | 'open' // "[key: ]{" or "[key: ][" — expanded container header + | 'close' // "}" or "]" — expanded container footer + | 'collapsed' // "[key: ]{...} N Items" — folded container (children not walked) + | 'value' // "[key: ]primitive" — leaf + | 'custom' // customizeNode element/component (subtree not walked) + | 'chunk' // folded large-array bucket "[ start ... end ]" + | 'chunk-open' // "[" of an expanded bucket + | 'chunk-close' // "]" of an expanded bucket + | 'add-input' // transient add-property input row + +export type NodeType = 'object' | 'array' | 'string' | 'number' | 'boolean' | 'null' | 'undefined' | 'bigint' | 'function' | 'symbol' + +export interface FlatRow { + id: string + path: (string | number)[] + parentPath: (string | number)[] + depth: number + kind: RowKind + indexOrName: string | number | undefined + parentType: 'object' | 'array' | null + value: any + nodeType: NodeType + bracket?: '{' | '}' | '[' | ']' + size?: number + /** expand-state key for container/chunk rows (open/collapsed/chunk*) */ + expandKey?: string + customOptions?: CustomizeOptions + customRender?: ReactElement | React.ComponentType + chunk?: { index: number; start: number; end: number } +} + +export function getNodeType(node: any): NodeType { + if (node === null) return 'null' + if (Array.isArray(node)) return 'array' + const t = typeof node + if (t === 'object') return 'object' + return t as NodeType +} diff --git a/src/stories/json-view.stories.tsx b/src/stories/json-view.stories.tsx index c7c515d..5bd4395 100644 --- a/src/stories/json-view.stories.tsx +++ b/src/stories/json-view.stories.tsx @@ -487,6 +487,59 @@ export const LargeArray: StoryObj = { } } +const genWideObject = (n: number) => Object.fromEntries(Array.from({ length: n }, (_, i) => [`key_${i}`, { id: i, name: `item ${i}`, active: i % 2 === 0, tags: [`t${i}`, `t${i + 1}`] }])) + +// ~10k nodes (deep + wide). Bounded height => windowed rendering. +export const Virtualized: StoryObj = { + args: { + src: genWideObject(2000), + height: 400, + collapsed: false, + displaySize: true + }, + decorators: [ + Story => ( +
+ +
+ ) + ] +} + +// 100k flat array via ignoreLargeArray (no chunking) — stress test. +export const VirtualizedFlatArray: StoryObj = { + args: { + src: Array.from({ length: 100000 }, (_, i) => i), + ignoreLargeArray: true, + collapsed: false, + maxHeight: 400 + }, + decorators: [ + Story => ( +
+ +
+ ) + ] +} + +// Editable inside a virtualized viewport. +export const VirtualizedEditable: StoryObj = { + args: { + src: genWideObject(500), + editable: true, + height: 400, + collapsed: false + }, + decorators: [ + Story => ( +
+ +
+ ) + ] +} + export const CustomIcons: StoryObj = { args: { src: { diff --git a/src/style.css b/src/style.css index ec97279..e812686 100644 --- a/src/style.css +++ b/src/style.css @@ -31,6 +31,20 @@ .json-view .jv-indent { padding-left: 1em; } +/* Flattened renderer: each visible line is a .jv-row; nesting is expressed via + inline padding-left (depth - 1)em instead of nested .jv-indent blocks. */ +.json-view .jv-row { + display: block; +} +/* Virtualized scroll container + absolute-positioned sizer. min-width:max-content + lets deeply-indented / long rows scroll horizontally together. */ +.json-view.jv-scroll { + overflow: auto; +} +.json-view .jv-sizer { + position: relative; + min-width: max-content; +} .json-view .jv-chevron { display: inline-block; vertical-align: -20%; @@ -77,8 +91,8 @@ text-decoration-line: line-through; } -:is(.json-view:hover, .json-view--pair:hover) > :is(.json-view--copy, .json-view--edit), -:is(.json-view:hover, .json-view--pair:hover) > .json-view--link svg { +:is(.json-view:hover, .json-view--pair:hover, .jv-row:hover) > :is(.json-view--copy, .json-view--edit), +:is(.json-view:hover, .json-view--pair:hover, .jv-row:hover) > .json-view--link svg { display: inline-block; } diff --git a/src/test/characterization/callbacks.test.tsx b/src/test/characterization/callbacks.test.tsx new file mode 100644 index 0000000..3a526c2 --- /dev/null +++ b/src/test/characterization/callbacks.test.tsx @@ -0,0 +1,146 @@ +import { describe, test, expect, vi } from 'vitest' +import { render, screen, fireEvent, within } from '@testing-library/react' +import JsonView from '../../components/json-view' + +/** + * Characterization tests: these lock the CURRENT observable callback behavior + * of the recursive renderer so the virtualization rewrite can be proven + * byte-compatible. They intentionally encode quirks (notably the edit-vs-delete + * `depth` inconsistency) — do NOT "fix" them here; replicate them in the rewrite. + */ + +function editLeaf(pair: HTMLElement, newText: string) { + // enter edit mode via the pencil (first .json-view--edit in the leaf's pair) + const editIcon = pair.querySelector('.json-view--edit') as HTMLElement + fireEvent.click(editIcon) + const editable = pair.querySelector('[contenteditable]') as HTMLElement + editable.textContent = newText + // after entering edit mode, the first .json-view--edit is the Done control + const doneIcon = pair.querySelector('.json-view--edit') as HTMLElement + fireEvent.click(doneIcon) +} + +describe('onEdit / onChange (leaf edit)', () => { + test('reports container depth (=1) and empty parentPath for a root-object leaf', () => { + const onEdit = vi.fn() + const onChange = vi.fn() + const src = { name: 'Alice' } + render() + + const pair = screen.getByText('name').closest('.json-view--pair') as HTMLElement + editLeaf(pair, '"Bob"') + + expect(onEdit).toHaveBeenCalledTimes(1) + expect(onEdit.mock.calls[0][0]).toMatchObject({ + newValue: 'Bob', + oldValue: 'Alice', + depth: 1, + indexOrName: 'name', + parentType: 'object', + parentPath: [] + }) + expect(onChange).toHaveBeenCalledTimes(1) + expect(onChange.mock.calls[0][0]).toMatchObject({ + type: 'edit', + depth: 1, + indexOrName: 'name', + parentType: 'object', + parentPath: [] + }) + }) + + test('nested leaf edit reports parent container depth and parentPath', () => { + const onEdit = vi.fn() + const src = { outer: { inner: 1 } } + render() + + const pair = screen.getByText('inner').closest('.json-view--pair') as HTMLElement + editLeaf(pair, '2') + + // `outer` object node is at depth 2 (root object depth 1 -> child object depth 2) + expect(onEdit.mock.calls[0][0]).toMatchObject({ + newValue: 2, + oldValue: 1, + depth: 2, + indexOrName: 'inner', + parentType: 'object', + parentPath: ['outer'] + }) + }) +}) + +describe('onDelete / onChange (leaf delete)', () => { + test('reports leaf depth (=container+1) — the edit/delete depth quirk', () => { + const onDelete = vi.fn() + const onChange = vi.fn() + const src = { name: 'Alice' } + render() + + const pair = screen.getByText('name').closest('.json-view--pair') as HTMLElement + // click the leaf trash (first .json-view--edit in the pair), then confirm via Done + fireEvent.click(pair.querySelector('.json-view--edit') as HTMLElement) + fireEvent.click(pair.querySelector('.json-view--edit') as HTMLElement) + + expect(onDelete).toHaveBeenCalledTimes(1) + expect(onDelete.mock.calls[0][0]).toMatchObject({ + value: 'Alice', + depth: 2, // NOTE: edit reported depth 1 for this same leaf; delete reports 2 + indexOrName: 'name', + parentType: 'object', + parentPath: [] + }) + expect(onChange.mock.calls[0][0]).toMatchObject({ type: 'delete', depth: 2, indexOrName: 'name', parentType: 'object', parentPath: [] }) + }) +}) + +describe('onAdd / onChange (add property to object)', () => { + test('reports container depth and parentPath', () => { + const onAdd = vi.fn() + const onChange = vi.fn() + const src = { a: 1 } + render() + + // object-level add icon lives after the opening brace, not inside a pair + const root = document.querySelector('.json-view') as HTMLElement + const addIcon = root.querySelector('.json-view--edit') as HTMLElement + fireEvent.click(addIcon) + const input = root.querySelector('.json-view--input') as HTMLInputElement + fireEvent.change(input, { target: { value: 'b' } }) + fireEvent.keyDown(input, { key: 'Enter' }) + + expect(onAdd).toHaveBeenCalledTimes(1) + expect(onAdd.mock.calls[0][0]).toMatchObject({ indexOrName: 'b', depth: 1, parentType: 'object', parentPath: [] }) + expect(onChange.mock.calls[0][0]).toMatchObject({ type: 'add', indexOrName: 'b', depth: 1, parentType: 'object', parentPath: [] }) + }) +}) + +describe('onCollapse (fold toggle)', () => { + // INTENTIONAL BEHAVIOR CHANGE in the virtualization rewrite (semver-major): + // the legacy renderer fired onCollapse once per container on MOUNT and used an + // INVERTED isCollapsing flag (collapsing reported false). Replicating the + // mount-fire under windowing would spam the callback on every scroll, and the + // inverted flag was a bug. The rewrite fires onCollapse only on user toggle, + // with isCollapsing:true when the node is being collapsed. + test('does not fire on mount; fires with isCollapsing:true on collapse click', () => { + const onCollapse = vi.fn() + const src = { a: 1, b: 2 } + render() + + expect(onCollapse).not.toHaveBeenCalled() + + const chevron = document.querySelector('.jv-size-chevron') as HTMLElement + fireEvent.click(chevron) + + expect(onCollapse).toHaveBeenCalledTimes(1) + expect(onCollapse.mock.calls[0][0]).toMatchObject({ isCollapsing: true, depth: 1, indexOrName: undefined }) + expect(onCollapse.mock.calls[0][0].node).toBe(src) + }) + + test('fires with isCollapsing:false when expanding a folded node', () => { + const onCollapse = vi.fn() + render() + fireEvent.click(screen.getByText('...')) + expect(onCollapse).toHaveBeenCalledTimes(1) + expect(onCollapse.mock.calls[0][0]).toMatchObject({ isCollapsing: false, depth: 1 }) + }) +}) diff --git a/src/test/characterization/custom.test.tsx b/src/test/characterization/custom.test.tsx new file mode 100644 index 0000000..748ad6e --- /dev/null +++ b/src/test/characterization/custom.test.tsx @@ -0,0 +1,56 @@ +import { describe, test, expect } from 'vitest' +import { render, screen } from '@testing-library/react' +import JsonView from '../../components/json-view' + +describe('customizeNode', () => { + test('returning a React element replaces the node and skips its subtree', () => { + const rendered = render( + (indexOrName === 'a' ? CUSTOM : undefined)} + /> + ) + expect(rendered.getByTestId('custom-a')).toHaveTextContent('CUSTOM') + // subtree not walked + expect(screen.queryByText('deep')).toBeNull() + // sibling still renders normally + expect(screen.getByText('b')).toBeInTheDocument() + }) + + test('returning a component renders it with node/depth/indexOrName props', () => { + const Comp = ({ node, indexOrName }: any) => ( + + {String(indexOrName)}={String(node)} + + ) + render( (indexOrName === 'x' ? Comp : undefined)} />) + expect(screen.getByTestId('comp')).toHaveTextContent('x=42') + }) + + test('returning options applies className to the leaf', () => { + render( (indexOrName === 'v' ? { className: 'my-class' } : undefined)} />) + expect(screen.getByText('"hi"')).toHaveClass('my-class') + }) +}) + +describe('CustomOperation', () => { + test('renders after each node', () => { + const Op = ({ node }: any) => op + const { container } = render() + // one per value leaf + one on the container open row + expect(container.querySelectorAll('.op').length).toBeGreaterThanOrEqual(3) + }) +}) + +describe('custom Copy component', () => { + test('uses the provided CopyComponent', () => { + const Copy = ({ onClick }: any) => ( + + ) + const { container } = render() + expect(container.querySelector('.my-copy')).toBeInTheDocument() + }) +}) diff --git a/src/test/characterization/render.test.tsx b/src/test/characterization/render.test.tsx new file mode 100644 index 0000000..b42f5ff --- /dev/null +++ b/src/test/characterization/render.test.tsx @@ -0,0 +1,115 @@ +import { describe, test, expect } from 'vitest' +import { render, screen, fireEvent } from '@testing-library/react' +import JsonView from '../../components/json-view' + +/** Characterization: current DOM/text output. Locks parity targets for the rewrite. */ + +describe('object / array rendering', () => { + test('renders object keys as .json-view--property and primitive values', () => { + render() + expect(screen.getByText('name')).toHaveClass('json-view--property') + expect(screen.getByText('age')).toHaveClass('json-view--property') + // values + expect(screen.getByText('"Alice"')).toHaveClass('json-view--string') + expect(screen.getByText('30')).toHaveClass('json-view--number') + expect(screen.getByText('true')).toHaveClass('json-view--boolean') + expect(screen.getByText('null')).toHaveClass('json-view--null') + }) + + test('array indices render as .json-view--index when displayArrayIndex is default (true)', () => { + render() + expect(screen.getByText('0')).toHaveClass('json-view--index') + expect(screen.getByText('1')).toHaveClass('json-view--index') + }) + + test('array indices are hidden when displayArrayIndex is false', () => { + render() + expect(screen.queryByText('0')).toBeNull() + expect(screen.queryByText('1')).toBeNull() + expect(screen.getByText('10')).toBeInTheDocument() + }) + + test('renders function / symbol / bigint values without crashing', () => { + const src = { fn: function () {}, sym: Symbol('x'), big: BigInt(10) } + const { container } = render() + const text = container.textContent || '' + expect(text).toContain('fn') + expect(text).toContain('10n') // bigint suffix + expect(text).toContain('Symbol(x)') + }) + + test('nested indentation uses per-row padding-left (depth - 1 em)', () => { + // The flattened renderer replaces nested .jv-indent divs with inline + // padding-left = (depth - 1)em on each row. + render() + const aRow = screen.getByText('a').closest('.jv-row') as HTMLElement + const bRow = screen.getByText('b').closest('.jv-row') as HTMLElement + expect(aRow.style.paddingLeft).toBe('1em') // depth 2 + expect(bRow.style.paddingLeft).toBe('2em') // depth 3 + }) +}) + +describe('collapse behavior', () => { + test('collapsed={true} renders the "..." button and hides children', () => { + render() + expect(screen.getByText('...')).toBeInTheDocument() + expect(screen.queryByText('a')).toBeNull() + }) + + test('collapsed as a number collapses only below that depth', () => { + render() + // depth-1 root stays open (key `a` visible), depth-2 object is folded + expect(screen.getByText('a')).toBeInTheDocument() + expect(screen.queryByText('b')).toBeNull() + }) + + test('displaySize renders the "N Items" label', () => { + render() + expect(screen.getByText(/3 Items/)).toBeInTheDocument() + }) +}) + +describe('long strings', () => { + test('directly mode truncates after collapseStringsAfterLength with an ellipsis', () => { + const { container } = render() + const text = container.textContent || '' + expect(text).toContain('abcde') + expect(text).toContain('...') + expect(text).not.toContain('fghij') + }) + + test('strings at or below the threshold render in full', () => { + render() + expect(screen.getByText('"short"')).toBeInTheDocument() + }) + + test('clicking a truncated string expands it (central truncation state)', () => { + const { container } = render() + expect(container.textContent).not.toContain('fghij') + const strSpan = container.querySelector('.json-view--string') as HTMLElement + fireEvent.click(strSpan) + expect(container.textContent).toContain('abcdefghij') + }) +}) + +describe('large array chunking (>100 items)', () => { + test('renders 100-item chunk buttons labelled "start ... end", folded by default', () => { + const arr = Array.from({ length: 150 }, (_, i) => i) + const { container } = render() + const buttons = Array.from(container.querySelectorAll('button.jv-button')).map(b => b.textContent) + expect(buttons).toContain('0 ... 99') + expect(buttons).toContain('100 ... 149') + }) + + test('ignoreLargeArray renders elements directly (no chunk buttons)', () => { + const arr = Array.from({ length: 150 }, (_, i) => i) + // collapsed={false} keeps the (>99-item) array expanded so elements render inline + // virtual={false} keeps all rows in the DOM (jsdom has no layout, so the + // virtualizer would otherwise render 0 rows) + const { container } = render() + const chunkButtons = Array.from(container.querySelectorAll('button.jv-button')).filter(b => /\.\.\./.test(b.textContent || '')) + expect(chunkButtons.length).toBe(0) + // element 149 is present (both its index label and value render as "149") + expect(screen.getAllByText('149').length).toBeGreaterThan(0) + }) +}) diff --git a/src/test/setup.ts b/src/test/setup.ts new file mode 100644 index 0000000..c05e5a0 --- /dev/null +++ b/src/test/setup.ts @@ -0,0 +1,40 @@ +import '@testing-library/jest-dom/vitest' + +// jsdom lacks ResizeObserver (required by @tanstack/react-virtual) and +// Element.prototype.scrollTo / scrollToIndex targets. Polyfill both so +// virtualized components can mount in tests. +if (typeof globalThis.ResizeObserver === 'undefined') { + globalThis.ResizeObserver = class { + observe() {} + unobserve() {} + disconnect() {} + } as unknown as typeof ResizeObserver +} + +if (typeof Element !== 'undefined' && !Element.prototype.scrollTo) { + Element.prototype.scrollTo = function () {} as unknown as typeof Element.prototype.scrollTo +} + +// json-node's edit() schedules a focus/selection in a setTimeout. If the edit +// is committed synchronously in a test, the contentEditable unmounts and the +// timer fires with a null node, which jsdom's selectAllChildren rejects. Make +// it a safe no-op for tests. +if (typeof Selection !== 'undefined') { + Selection.prototype.selectAllChildren = function () {} +} + +// jsdom does not implement `innerText` (returns undefined). The component's +// in-place edit commit reads `valueRef.current.innerText`, so alias it to +// `textContent` for tests. Layout-aware differences between the two don't +// matter here — edited values are single-line text. +if (typeof HTMLElement !== 'undefined' && !Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'innerText')) { + Object.defineProperty(HTMLElement.prototype, 'innerText', { + configurable: true, + get() { + return this.textContent + }, + set(value: string) { + this.textContent = value + } + }) +} diff --git a/src/test/virtualization.test.tsx b/src/test/virtualization.test.tsx new file mode 100644 index 0000000..303eeb3 --- /dev/null +++ b/src/test/virtualization.test.tsx @@ -0,0 +1,56 @@ +import { describe, test, expect, beforeAll, afterAll } from 'vitest' +import { render } from '@testing-library/react' +import JsonView from '../components/json-view' + +// jsdom has no layout, so give the scroll container and rows fake sizes and +// prove that only a viewport-sized window of rows is mounted. @tanstack/react-virtual +// (v3.14+) reads offsetWidth/offsetHeight for both the scroll rect and row measurement. +const VIEWPORT = 200 +const ROW_H = 20 + +const sizeGetter = (dim: 'height' | 'width') => + function (this: HTMLElement) { + if (dim === 'width') return 400 + return this.classList?.contains('jv-scroll') ? VIEWPORT : ROW_H + } + +let originals: Record = {} + +beforeAll(() => { + originals.offsetHeight = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'offsetHeight') + originals.offsetWidth = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'offsetWidth') + Object.defineProperty(HTMLElement.prototype, 'offsetHeight', { configurable: true, get: sizeGetter('height') }) + Object.defineProperty(HTMLElement.prototype, 'offsetWidth', { configurable: true, get: sizeGetter('width') }) +}) +afterAll(() => { + if (originals.offsetHeight) Object.defineProperty(HTMLElement.prototype, 'offsetHeight', originals.offsetHeight) + if (originals.offsetWidth) Object.defineProperty(HTMLElement.prototype, 'offsetWidth', originals.offsetWidth) +}) + +describe('virtualization windowing', () => { + test('only a window of rows is mounted for a large array (default auto)', () => { + const arr = Array.from({ length: 5000 }, (_, i) => i) + const { container } = render() + + // virtual path engaged + expect(container.querySelector('.jv-scroll')).toBeInTheDocument() + expect(container.querySelector('.jv-sizer')).toBeInTheDocument() + + const rendered = container.querySelectorAll('.jv-row').length + // 5000 elements -> 5002 rows; a ~200px viewport at 20px/row should mount + // far fewer than the full set. + expect(rendered).toBeGreaterThan(0) + expect(rendered).toBeLessThan(80) + }) + + test('small documents stay non-virtualized under auto (no scroll container)', () => { + const { container } = render() + expect(container.querySelector('.jv-scroll')).toBeNull() + expect(container.querySelector('code.json-view')).toBeInTheDocument() + }) + + test('explicit height forces virtualization even for small documents', () => { + const { container } = render() + expect(container.querySelector('.jv-scroll')).toBeInTheDocument() + }) +}) diff --git a/tsconfig.json b/tsconfig.json index 18c6225..c10422e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,5 +16,5 @@ "declarationDir": "./dist" }, "include": ["./src"], - "exclude": ["./node_modules", "./test", "**/*.stories.tsx"] + "exclude": ["./node_modules", "./test", "**/*.stories.tsx", "**/*.test.ts", "**/*.test.tsx", "./src/test"] } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..a15af77 --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,36 @@ +import { defineConfig } from 'vitest/config' +import react from '@vitejs/plugin-react' +import type { Plugin } from 'vite' + +// Stub `*.svg` imports so the `import { ReactComponent as X } from '../svgs/x.svg'` +// convention resolves in tests without pulling in vite-plugin-svgr (which has a +// conflicting vite peer range). Tests don't care about the SVG content — a +// forwardRef that passes props/ref through is enough. +function svgStub(): Plugin { + return { + name: 'svg-stub', + enforce: 'pre', + load(id) { + if (id.endsWith('.svg')) { + return [ + "import * as React from 'react'", + 'const Svg = React.forwardRef((props, ref) => React.createElement("svg", Object.assign({}, props, { ref })))', + 'export default Svg', + 'export const ReactComponent = Svg' + ].join('\n') + } + return null + } + } +} + +export default defineConfig({ + plugins: [svgStub(), react()], + test: { + globals: true, + environment: 'jsdom', + setupFiles: ['./src/test/setup.ts'], + include: ['src/**/*.{test,spec}.{ts,tsx}'], + css: false + } +})