From b322bcfc8c7a45cdfc84a66d1bf01a91ee6bec63 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 6 May 2024 15:51:11 +0200 Subject: [PATCH 01/93] chore: upgrade to svelte 5 (WIP) --- package-lock.json | 177 +++++++----------- package.json | 2 +- .../components/modals/TransformWizard.svelte | 88 ++++----- .../modals/popup/AbsolutePopup.svelte | 2 +- 4 files changed, 110 insertions(+), 159 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3a74fde5..540f81e5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,7 +32,7 @@ "memoize-one": "^6.0.0", "natural-compare-lite": "^1.4.0", "sass": "^1.72.0", - "svelte": "^4.2.12", + "svelte": "5.0.0-next.123", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", "svelte-simple-modal": "^1.6.2", @@ -3575,6 +3575,18 @@ "vite": "^5.0.0" } }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, "node_modules/@testing-library/dom": { "version": "9.3.3", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.3.tgz", @@ -4476,9 +4488,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", "bin": { "acorn": "bin/acorn" }, @@ -4495,6 +4507,14 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, "node_modules/acorn-walk": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", @@ -5116,26 +5136,6 @@ "node": ">=12" } }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, - "node_modules/code-red/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/codemirror-wrapped-line-indent": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/codemirror-wrapped-line-indent/-/codemirror-wrapped-line-indent-1.0.8.tgz", @@ -6468,18 +6468,6 @@ "node": ">= 8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -7819,8 +7807,7 @@ "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" }, "node_modules/espree": { "version": "9.6.1", @@ -7851,6 +7838,15 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -10800,11 +10796,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", @@ -11575,32 +11566,6 @@ "node": "*" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/periscopic/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/periscopic/node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -11651,9 +11616,9 @@ } }, "node_modules/postcss": { - "version": "8.4.37", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.37.tgz", - "integrity": "sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -13089,27 +13054,26 @@ } }, "node_modules/svelte": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.12.tgz", - "integrity": "sha512-d8+wsh5TfPwqVzbm4/HCXC783/KPHV60NvwitJnyTA5lWn1elhXMNWhXGCJ7PwPa8qFUnyJNIyuIRt2mT0WMug==", + "version": "5.0.0-next.123", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.123.tgz", + "integrity": "sha512-EKdXcqT795J34V8TyyUO5ExI0amjeKBECA2t7Py8QeDTMgS9//pQElD0jKsCT/sfmKV4HEoOwf7sqPYINKEfUQ==", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", + "@types/estree": "^1.0.5", + "acorn": "^8.11.3", + "acorn-typescript": "^1.4.13", "aria-query": "^5.3.0", "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "magic-string": "^0.30.5", + "zimmerframe": "^1.1.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/svelte-awesome": { @@ -13143,16 +13107,16 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.33.1.tgz", - "integrity": "sha512-vo7xPGTlKBGdLH8T5L64FipvTrqv3OQRx9d2z5X05KKZDlF4rQk8KViZO4flKERY+5BiVdOh7zZ7JGJWo5P0uA==", + "version": "0.35.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.35.0.tgz", + "integrity": "sha512-CtbPseajW0gjwEvHiuzYJkPDjAcHz2FaHt540j6RVYrZgnE6xWkzUBodQ4I3nV+G5AS0Svt8K6aIA/CIU9xT2Q==", "dev": true, "dependencies": { - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "postcss": "^8.4.29", - "postcss-scss": "^4.0.8" + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "postcss": "^8.4.38", + "postcss-scss": "^4.0.9" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -13161,7 +13125,7 @@ "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.112" }, "peerDependenciesMeta": { "svelte": { @@ -13178,18 +13142,6 @@ "@floating-ui/dom": "^1.5.3" } }, - "node_modules/svelte-hmr": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", - "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", - "dev": true, - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0" - } - }, "node_modules/svelte-preprocess": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", @@ -13269,14 +13221,6 @@ "svelte": "^3.30.0 || ^4.0.0" } }, - "node_modules/svelte/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/svelte/node_modules/is-reference": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", @@ -14301,6 +14245,11 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==" } } } diff --git a/package.json b/package.json index 56ebeed8..87a37129 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,7 @@ "memoize-one": "^6.0.0", "natural-compare-lite": "^1.4.0", "sass": "^1.72.0", - "svelte": "^4.2.12", + "svelte": "^5.0.0-next.123", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", "svelte-simple-modal": "^1.6.2", diff --git a/src/lib/components/modals/TransformWizard.svelte b/src/lib/components/modals/TransformWizard.svelte index 597f8403..d02f9d02 100644 --- a/src/lib/components/modals/TransformWizard.svelte +++ b/src/lib/components/modals/TransformWizard.svelte @@ -108,49 +108,51 @@ - - - - - - - - - - - - + + + + + + + + + + + + + +
Filter -
- - -
-
Sort -
- -
-
Pick -
-
Filter +
+ + +
+
Sort +
+ +
+
Pick +
+
diff --git a/src/lib/components/modals/popup/AbsolutePopup.svelte b/src/lib/components/modals/popup/AbsolutePopup.svelte index c464ff64..3718cc97 100644 --- a/src/lib/components/modals/popup/AbsolutePopup.svelte +++ b/src/lib/components/modals/popup/AbsolutePopup.svelte @@ -2,7 +2,7 @@ From 18c47439dde7ada4f20894a536f86d410b037c8f Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 17 Jun 2024 09:32:39 +0200 Subject: [PATCH 05/93] fix: short cut key `Ctrl+F` and `Ctrl+H` not working in table mode whilst editing a value --- src/lib/components/modes/tablemode/TableMode.svelte | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index 1d9e32c6..781431f9 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -381,7 +381,7 @@ focus, onPatch: handlePatch, onSelect: updateSelection, - onFind: handleFind, + onFind: openFind, onPasteJson: handlePasteJson, onRenderValue } @@ -663,12 +663,6 @@ } } - function handleFind(findAndReplace: boolean) { - debug('handleFind', findAndReplace) - - // TODO: implement handleFind - } - function handlePasteJson(newPastedJson: PastedJson) { debug('pasted json as text', newPastedJson) From 47683d4d615e83bff656c3e32d4825f75b740556 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 17 Jun 2024 09:40:07 +0200 Subject: [PATCH 06/93] chore: cleanup deprecation messages BREAKING CHANGE: Old deprecation messages are removed. --- src/lib/components/JSONEditor.svelte | 12 +- .../__snapshots__/JSONEditor.test.ts.snap | 368 +++++++++--------- .../components/modes/JSONEditorRoot.svelte | 5 +- .../validator/createAjvValidator.test.ts | 11 - .../plugins/validator/createAjvValidator.ts | 12 - src/lib/themes/defaults.scss | 11 +- src/routes/development/+page.svelte | 1 - 7 files changed, 188 insertions(+), 232 deletions(-) diff --git a/src/lib/components/JSONEditor.svelte b/src/lib/components/JSONEditor.svelte index b14d6510..7ef4010c 100644 --- a/src/lib/components/JSONEditor.svelte +++ b/src/lib/components/JSONEditor.svelte @@ -434,17 +434,7 @@ jsoneditorModalState = undefined } - $: { - debug('mode changed to', mode) - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-expect-error - if (mode === 'code') { - // check for 'code' is here for backward compatibility (deprecated since v0.4.0) - console.warn( - 'Deprecation warning: "code" mode is renamed to "text". Please use mode="text" instead.' - ) - } - } + $: debug('mode changed to', mode) diff --git a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap index 2a2f2623..bfe492e7 100644 --- a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap +++ b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap @@ -7,18 +7,18 @@ exports[`JSONEditor > render table mode 1`] = `
- + - {/if} diff --git a/src/lib/components/controls/contextmenu/ContextMenu.svelte b/src/lib/components/controls/contextmenu/ContextMenu.svelte index 3820e52f..8b196ec5 100644 --- a/src/lib/components/controls/contextmenu/ContextMenu.svelte +++ b/src/lib/components/controls/contextmenu/ContextMenu.svelte @@ -96,7 +96,7 @@ {:else if isMenuDropDownButton(columnItem)} {:else if isMenuSeparator(columnItem)} -
+
{:else if isMenuLabel(columnItem)}
{columnItem.text} @@ -107,14 +107,14 @@ {/each}
{:else if isMenuSeparator(rowItem)} -
+
{:else} {unknownMenuItem(rowItem)} {/if} {/each}
{:else if isMenuSeparator(item)} -
+
{:else} {unknownMenuItem(item)} {/if} diff --git a/src/lib/components/modes/tablemode/JSONValue.svelte b/src/lib/components/modes/tablemode/JSONValue.svelte index 53e20359..1f930883 100644 --- a/src/lib/components/modes/tablemode/JSONValue.svelte +++ b/src/lib/components/modes/tablemode/JSONValue.svelte @@ -55,7 +55,7 @@ class="jse-value" data-type="selectable-value" use:action={renderer.props} - /> + >
{/key} {:else} {#key renderer.component} diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index 76bf7591..516f8069 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -1813,7 +1813,7 @@ {/if}
- {#each visibleSection.visibleItems as item, visibleIndex} {@const rowIndex = visibleSection.startIndex + visibleIndex} @@ -1890,13 +1890,13 @@ {/each} {#if showRefreshButton} - {/if} {/each} -
0
render table mode 1`] = `
render table mode 1`] = `
1
render table mode 1`] = `
render table mode 1`] = `
2
render table mode 1`] = `
render table mode 1`] = ` class="jse-table-invisible-end-section" >
@@ -468,17 +468,17 @@ exports[`JSONEditor > render text mode 1`] = `
render text mode 1`] = `
@@ -1032,19 +1032,19 @@ exports[`JSONEditor > render tree mode 1`] = `
0
:
{
@@ -1531,36 +1531,36 @@ exports[`JSONEditor > render tree mode 1`] = `
@@ -1572,13 +1572,13 @@ exports[`JSONEditor > render tree mode 1`] = `
:
render tree mode 1`] = `
@@ -1604,21 +1604,21 @@ exports[`JSONEditor > render tree mode 1`] = `
- + (and {count - MAX_VALIDATION_ERRORS} more errors) +
+
+
+
@@ -1986,7 +1986,7 @@ {/if} {:else}
-
+
loading...
{/if} diff --git a/src/lib/components/modes/tablemode/TableModeWelcome.svelte b/src/lib/components/modes/tablemode/TableModeWelcome.svelte index 6e04b39e..148cbb49 100644 --- a/src/lib/components/modes/tablemode/TableModeWelcome.svelte +++ b/src/lib/components/modes/tablemode/TableModeWelcome.svelte @@ -43,7 +43,7 @@
onClick()} role="none"> -
+
{documentType}
@@ -77,7 +77,7 @@
-
+
diff --git a/src/lib/components/modes/textmode/TextMode.svelte b/src/lib/components/modes/textmode/TextMode.svelte index ae06ab40..a8fb0c5f 100644 --- a/src/lib/components/modes/textmode/TextMode.svelte +++ b/src/lib/components/modes/textmode/TextMode.svelte @@ -1020,7 +1020,7 @@ {#if !isSSR} {@const editorDisabled = disableTextEditor(text, acceptTooLarge)} -
+
{#if editorDisabled} -
+
loading...
{/if} diff --git a/src/lib/components/modes/treemode/JSONNode.svelte b/src/lib/components/modes/treemode/JSONNode.svelte index a0efa8bd..a3d1039a 100644 --- a/src/lib/components/modes/treemode/JSONNode.svelte +++ b/src/lib/components/modes/treemode/JSONNode.svelte @@ -635,14 +635,14 @@ class="jse-insert-selection-area jse-inside" data-type="insert-selection-area-inside" on:click={handleInsertInside} - /> + >
{:else}
+ >
{/if}
{#if expanded} @@ -714,7 +714,7 @@ class="jse-insert-selection-area jse-after" data-type="insert-selection-area-after" on:click={handleInsertAfter} - /> + >
{/if}
{/if} @@ -766,14 +766,14 @@ class="jse-insert-selection-area jse-inside" data-type="insert-selection-area-inside" on:click={handleInsertInside} - /> + >
{:else if !root}
+ >
{/if}
{#if expanded} @@ -843,7 +843,7 @@ class="jse-insert-selection-area jse-after" data-type="insert-selection-area-after" on:click={handleInsertAfter} - /> + >
{/if}
{/if} @@ -877,7 +877,7 @@ class="jse-insert-selection-area jse-after" data-type="insert-selection-area-after" on:click={handleInsertAfter} - /> + >
{/if}
{/if} diff --git a/src/lib/components/modes/treemode/JSONValue.svelte b/src/lib/components/modes/treemode/JSONValue.svelte index 65241e36..d0132e7b 100644 --- a/src/lib/components/modes/treemode/JSONValue.svelte +++ b/src/lib/components/modes/treemode/JSONValue.svelte @@ -42,7 +42,7 @@ class="jse-value" data-type="selectable-value" use:action={renderer.props} - /> + > {/key} {:else} {#key renderer.component} diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index 2163c4b4..4513727b 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -2068,7 +2068,7 @@ {/if} {:else}
-
+
loading...
{/if} diff --git a/src/lib/components/modes/treemode/Welcome.svelte b/src/lib/components/modes/treemode/Welcome.svelte index 279e1cdb..861e5814 100644 --- a/src/lib/components/modes/treemode/Welcome.svelte +++ b/src/lib/components/modes/treemode/Welcome.svelte @@ -6,7 +6,7 @@
onClick()} role="none"> -
+
Empty document
{#if !readOnly} @@ -23,7 +23,7 @@ > {/if}
-
+
diff --git a/src/lib/plugins/value/components/ColorPicker.svelte b/src/lib/plugins/value/components/ColorPicker.svelte index 805f98da..1624950f 100644 --- a/src/lib/plugins/value/components/ColorPicker.svelte +++ b/src/lib/plugins/value/components/ColorPicker.svelte @@ -72,6 +72,6 @@ style="background: {color}" title={!readOnly ? 'Click to open a color picker' : `Color ${value}`} on:click={openColorPicker} -/> +> From affd63ee0e089efa7a3a28547cab6a2b67e1a7c3 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 8 Jul 2024 10:18:03 +0200 Subject: [PATCH 18/93] chore: fix a linting issue --- src/lib/components/modals/TransformWizard.svelte | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/lib/components/modals/TransformWizard.svelte b/src/lib/components/modals/TransformWizard.svelte index eaed7aab..12272aa9 100644 --- a/src/lib/components/modals/TransformWizard.svelte +++ b/src/lib/components/modals/TransformWizard.svelte @@ -111,7 +111,12 @@ Filter
- - - - {#if jsonIsArray && ((properties && properties?.length > 1) || selectedProperty === undefined)} + +
+
+ +
+ + + + + + - + + {#if jsonIsArray && ((properties && properties?.length > 1) || selectedProperty === undefined)} + + + + + {/if} + + + + + +
PropertyPath -
Property +
Direction +
+ +
+ {#if sortError} +
+ {sortError} +
{/if} - - Direction - - - -
-
- +
+
Path
-
- {#if showWizard} - {#if Array.isArray(selectedJson)} - - {:else} - (Only available for arrays, not for objects) - {/if} - {/if} + -
-
Query
-
- -
-
-
-
- {#if showOriginal} - + {#if showWizard} + {#if Array.isArray(selectedJson)} + + {:else} + (Only available for arrays, not for objects) + {/if} {/if} -
-
+
-
Preview
+
Query
- {#if !previewError} - - {:else} -
- {previewError} + +
+
+
+
+
+ +
- {/if} + {#if showOriginal} + + {/if} +
+
+
+
Preview
+
+ {#if !previewError} + + {:else} +
+ {previewError} +
+ {/if} +
-
-
- +
+ +
-
- -
+ +
+
diff --git a/src/lib/components/modals/TransformModalHeader.svelte b/src/lib/components/modals/TransformModalHeader.svelte index eedc4d3d..2bd0d947 100644 --- a/src/lib/components/modals/TransformModalHeader.svelte +++ b/src/lib/components/modals/TransformModalHeader.svelte @@ -6,18 +6,17 @@ import { faCog } from '@fortawesome/free-solid-svg-icons' import SelectQueryLanguage from '../controls/selectQueryLanguage/SelectQueryLanguage.svelte' import type { AbsolutePopupContext, OnChangeQueryLanguage, QueryLanguage } from '$lib/types.js' - import type { Context } from 'svelte-simple-modal' import Header from './Header.svelte' export let queryLanguages: QueryLanguage[] export let queryLanguageId: string - export let onChangeQueryLanguage: OnChangeQueryLanguage export let fullscreen: boolean + export let onChangeQueryLanguage: OnChangeQueryLanguage + export let onClose: () => void let refConfigButton: HTMLButtonElement | undefined let popupId: number | undefined - const { close } = getContext('simple-modal') const { openAbsolutePopup, closeAbsolutePopup } = getContext('absolute-popup') @@ -40,7 +39,7 @@ } -
+
+{#if copyPasteModalOpen} + (copyPasteModalOpen = false)} /> +{/if} + diff --git a/src/lib/components/modes/tablemode/menu/TableMenu.svelte b/src/lib/components/modes/tablemode/menu/TableMenu.svelte index 5d697e6b..2143e024 100644 --- a/src/lib/components/modes/tablemode/menu/TableMenu.svelte +++ b/src/lib/components/modes/tablemode/menu/TableMenu.svelte @@ -93,7 +93,7 @@ ] let items: MenuItem[] - $: items = onRenderMenu(defaultItems) + $: items = onRenderMenu(defaultItems) || defaultItems diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index 5a1ead58..cd28216b 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -2066,7 +2066,7 @@
{#if copyPasteModalOpen} - copyPasteModalOpen = false} /> + (copyPasteModalOpen = false)} /> {/if} diff --git a/src/lib/components/modes/treemode/menu/TreeMenu.svelte b/src/lib/components/modes/treemode/menu/TreeMenu.svelte index a07966c3..5324a39d 100644 --- a/src/lib/components/modes/treemode/menu/TreeMenu.svelte +++ b/src/lib/components/modes/treemode/menu/TreeMenu.svelte @@ -152,7 +152,7 @@ } ] - $: items = onRenderMenu(defaultItems) + $: items = onRenderMenu(defaultItems) || defaultItems diff --git a/src/lib/types.ts b/src/lib/types.ts index 3e15a9df..35d40026 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -395,7 +395,7 @@ export type RenderMenuContext = { readOnly: boolean } export type OnRenderMenu = (items: MenuItem[], context: RenderMenuContext) => MenuItem[] | undefined -export type OnRenderMenuInternal = (items: MenuItem[]) => MenuItem[] +export type OnRenderMenuInternal = (items: MenuItem[]) => MenuItem[] | undefined export type RenderContextMenuContext = RenderMenuContext & { selection: JSONEditorSelection | undefined } @@ -403,12 +403,14 @@ export type OnRenderContextMenu = ( items: ContextMenuItem[], context: RenderContextMenuContext ) => ContextMenuItem[] | false | undefined -export type OnRenderContextMenuInternal = (items: ContextMenuItem[]) => ContextMenuItem[] | false +export type OnRenderContextMenuInternal = ( + items: ContextMenuItem[] +) => ContextMenuItem[] | false | undefined export type OnError = (error: Error) => void export type OnFocus = () => void export type OnBlur = () => void export type OnSortModal = (props: SortModalProps) => void -export type OnTransformModal = (props: TransformModalProps) => void +export type OnTransformModal = (props: TransformModalCallback) => void export type OnJSONEditorModal = (props: JSONEditorModalCallback) => void export type FindNextInside = (path: JSONPath) => JSONSelection | undefined @@ -639,10 +641,35 @@ export interface TransformModalOptions { onClose?: () => void } -export interface TransformModalProps { +export interface TransformModalCallback { id: string + json: unknown rootPath: JSONPath + onTransform: (operations: JSONPatchDocument) => void + onClose: () => void +} + +export interface TransformModalProps extends TransformModalCallback { + id: string json: unknown + rootPath: JSONPath + indentation: number | string + escapeControlCharacters: boolean + escapeUnicodeCharacters: boolean + parser: JSONParser + parseMemoizeOne: JSONParser['parse'] + validationParser: JSONParser + pathParser: JSONPathParser + + queryLanguages: QueryLanguage[] + queryLanguageId: string + onChangeQueryLanguage: OnChangeQueryLanguage + + onRenderValue: OnRenderValue + onRenderMenu: OnRenderMenuInternal + onRenderContextMenu: OnRenderContextMenuInternal + onClassName: OnClassName + onTransform: (operations: JSONPatchDocument) => void onClose: () => void } From 3586283fe6485aa8dba09c0485c1f5209429c25d Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 9 Jul 2024 08:45:07 +0200 Subject: [PATCH 26/93] chore: change `husky install` into `husky` --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 110fb967..59d6f7b7 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "lint:prettier": "prettier --check --plugin prettier-plugin-svelte .", "lint:eslint": "eslint --cache --ignore-path .gitignore .", "format": "prettier --write --plugin prettier-plugin-svelte .", - "prepare": "husky install && cd tools && node generateDiffSequenceEsm.js && cd ..", + "prepare": "husky && cd tools && node generateDiffSequenceEsm.js && cd ..", "release": "npm-run-all release:**", "release:lint": "npm run lint", "release:test": "npm run test-ci", From 55aca0680105f2d48a17c97bf98324e0f73de612 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 9 Jul 2024 08:49:08 +0200 Subject: [PATCH 27/93] chore: update package-lock.json --- package-lock.json | 1040 +++++++++++++++++++++++++-------------------- 1 file changed, 569 insertions(+), 471 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1c575c7a..474960c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1724,9 +1724,9 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.24.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.5.tgz", - "integrity": "sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.7.tgz", + "integrity": "sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1794,7 +1794,6 @@ "version": "6.17.0", "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.17.0.tgz", "integrity": "sha512-fdfj6e6ZxZf8yrkMHUSJJir7OJkHkZKaOZGzLWIYp2PZ3jd+d+UjG8zVPqJF6d3bKxkhvXTPan/UZ1t7Bqm0gA==", - "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", @@ -1845,7 +1844,6 @@ "version": "6.8.1", "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.1.tgz", "integrity": "sha512-IZ0Y7S4/bpaunwggW2jYqwLuHj0QtESf5xcROewY6+lDNwZ/NzvR4t+vpYgg9m7V8UXLPYqG+lu3DF470E5Oxg==", - "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -1871,7 +1869,6 @@ "version": "6.28.4", "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.28.4.tgz", "integrity": "sha512-QScv95fiviSQ/CaVGflxAvvvDy/9wi0RFyDl4LkHHWiMr/UPebyuTspmYSeN5Nx6eujcPYwsQzA6ZIZucKZVHQ==", - "license": "MIT", "dependencies": { "@codemirror/state": "^6.4.0", "style-mod": "^4.1.0", @@ -1989,26 +1986,11 @@ "node": ">=v18" } }, - "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@commitlint/is-ignored/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -2016,12 +1998,6 @@ "node": ">=10" } }, - "node_modules/@commitlint/is-ignored/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@commitlint/lint": { "version": "19.2.2", "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-19.2.2.tgz", @@ -2572,9 +2548,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -2585,7 +2561,6 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, - "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -2609,7 +2584,6 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2626,7 +2600,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2637,7 +2610,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -2652,15 +2624,13 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2673,32 +2643,31 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, - "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@floating-ui/core": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.1.tgz", - "integrity": "sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==", + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.4.tgz", + "integrity": "sha512-a4IowK4QkXl4SCWTGUR0INAfEOX3wtsYw3rKK5InQEHMGObkR8Xk44qYQD9P4r6HHw0iIfK6GUKECmY8sTkqRA==", "dependencies": { - "@floating-ui/utils": "^0.2.0" + "@floating-ui/utils": "^0.2.4" } }, "node_modules/@floating-ui/dom": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.5.tgz", - "integrity": "sha512-Nsdud2X65Dz+1RHjAIP0t8z5e2ff/IRbei6BqFrl1urT8sDVzM1HMQ+R0XcU5ceRfyO3I6ayeqIfh+6Wb8LGTw==", + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.7.tgz", + "integrity": "sha512-wmVfPG5o2xnKDU4jx/m4w5qva9FWHcnZ8BvzEe90D/RpwsJaTAVYPEPdQ8sbr/N8zZTAHlZUTQdqg8ZUbzHmng==", "dependencies": { - "@floating-ui/core": "^1.0.0", - "@floating-ui/utils": "^0.2.0" + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.4" } }, "node_modules/@floating-ui/utils": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.2.tgz", - "integrity": "sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==" + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.4.tgz", + "integrity": "sha512-dWO2pw8hhi+WrXq1YJy2yCuWoL20PddgGaqTgVe4cOS9Q6qklXCiA1tJEqX6BEwRNSCP84/afac9hd4MS+zEUA==" }, "node_modules/@fortawesome/fontawesome-common-types": { "version": "6.5.2", @@ -2739,7 +2708,6 @@ "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "deprecated": "Use @eslint/config-array instead", "dev": true, - "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.2", "debug": "^4.3.1", @@ -2754,7 +2722,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2765,7 +2732,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2791,8 +2757,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" + "dev": true }, "node_modules/@hutson/parse-repository-url": { "version": "3.0.2", @@ -2832,41 +2797,6 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@isaacs/cliui/node_modules/strip-ansi": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", @@ -2882,23 +2812,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", @@ -2997,9 +2910,9 @@ } }, "node_modules/@lezer/lr": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.0.tgz", - "integrity": "sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.1.tgz", + "integrity": "sha512-CHsKq8DMKBf9b3yXPDIU4DbH+ZJd/sJdYOW2llbW/HudP5u0VS6Bfq1hLYfgU7uAYGFIyGGQIsSOXGPEErZiJw==", "dependencies": { "@lezer/common": "^1.0.0" } @@ -3468,7 +3381,6 @@ "integrity": "sha512-+g06hvpVAnH7b4CDjhnTDgFWBKBiQJpuSmQeGYOuzbO3SC3tdYjRNlDCrafvDtKbGiT2uxY5Dn9qdEUGVZdWOQ==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@types/cookie": "^0.6.0", "cookie": "^0.6.0", @@ -3517,26 +3429,11 @@ "svelte": "^3.44.0 || ^4.0.0 || ^5.0.0-next.1" } }, - "node_modules/@sveltejs/package/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/@sveltejs/package/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -3544,12 +3441,6 @@ "node": ">=10" } }, - "node_modules/@sveltejs/package/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/@sveltejs/vite-plugin-svelte": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.1.tgz", @@ -3590,11 +3481,10 @@ } }, "node_modules/@testing-library/dom": { - "version": "10.3.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.3.0.tgz", - "integrity": "sha512-pT/TYB2+IyMYkkB6lqpkzD7VFbsR0JBJtflK3cS68sCNWxmOhWwRm1XvVHlseNEorsNcxkYsb4sRDV3aNIpttg==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.3.1.tgz", + "integrity": "sha512-q/WL+vlXMpC0uXDyfsMtc1rmotzLV8Y0gq6q1gfrrDjQeHoeLrqHbxdPvPNAh1i+xuJl7+BezywcXArz7vLqKQ==", "dev": true, - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -3614,7 +3504,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -3630,7 +3519,6 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3647,7 +3535,6 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -3659,22 +3546,19 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@testing-library/dom/node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -3684,7 +3568,6 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3809,7 +3692,6 @@ "resolved": "https://registry.npmjs.org/@testing-library/svelte/-/svelte-5.2.0.tgz", "integrity": "sha512-oMIFfxMcaPOXp+BQTRVgkeKzfAx7ee9fMrWaiKbMN36tN61kLl4Uj5ZZ/y1w9aL3a0BuBEoErV5iorYwCHqVUA==", "dev": true, - "license": "MIT", "dependencies": { "@testing-library/dom": "^10.0.0" }, @@ -3834,8 +3716,7 @@ "version": "5.0.4", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/@types/conventional-commits-parser": { "version": "5.0.0", @@ -3870,9 +3751,9 @@ "dev": true }, "node_modules/@types/lodash": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.1.tgz", - "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.6.tgz", + "integrity": "sha512-OpXEVoCKSS3lQqjx9GGGOapBeuW5eUboYHRlHP9urXPX25IKZ6AnP5ZRxtVf63iieUbsHxLn8NQ5Nlftc6yzAA==", "dev": true }, "node_modules/@types/lodash-es": { @@ -3891,9 +3772,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.9.tgz", - "integrity": "sha512-o93r47yu04MHumPBCFg0bMPBMNgtMg3jzbhl7e68z50+BMHmRMGDJv13eBlUgOdc9i/uoJXGMGYLtJV4ReTXEg==", + "version": "20.14.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.10.tgz", + "integrity": "sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -3922,7 +3803,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.15.0", @@ -3951,17 +3831,17 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": { + "node_modules/@typescript-eslint/parser": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", + "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", "dev": true, - "license": "MIT", "dependencies": { + "@typescript-eslint/scope-manager": "7.15.0", + "@typescript-eslint/types": "7.15.0", "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "@typescript-eslint/visitor-keys": "7.15.0", + "debug": "^4.3.4" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3979,17 +3859,14 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { + "node_modules/@typescript-eslint/scope-manager": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", + "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", "dev": true, - "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.15.0", "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0" + "@typescript-eslint/visitor-keys": "7.15.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3997,23 +3874,18 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.56.0" } }, - "node_modules/@typescript-eslint/parser": { + "node_modules/@typescript-eslint/type-utils": { "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", + "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", - "debug": "^4.3.4" + "@typescript-eslint/utils": "7.15.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -4031,30 +3903,11 @@ } } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0" - }, - "engines": { - "node": "^18.18.0 || >=20.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/@typescript-eslint/types": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -4068,7 +3921,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", "dev": true, - "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.15.0", "@typescript-eslint/visitor-keys": "7.15.0", @@ -4097,7 +3949,6 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4105,12 +3956,33 @@ "node": ">=10" } }, + "node_modules/@typescript-eslint/utils": { + "version": "7.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", + "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.15.0", + "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/typescript-estree": "7.15.0" + }, + "engines": { + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" + } + }, "node_modules/@typescript-eslint/visitor-keys": { "version": "7.15.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.15.0", "eslint-visitor-keys": "^3.4.3" @@ -4127,8 +3999,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/@vitest/coverage-v8": { "version": "1.6.0", @@ -4318,7 +4189,6 @@ "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", - "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4336,10 +4206,13 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", + "version": "8.3.3", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", + "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", "dev": true, + "dependencies": { + "acorn": "^8.11.0" + }, "engines": { "node": ">=0.4.0" } @@ -4499,7 +4372,6 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -4709,9 +4581,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.23.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", + "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", "dev": true, "funding": [ { @@ -4728,10 +4600,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", + "caniuse-lite": "^1.0.30001629", + "electron-to-chromium": "^1.4.796", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.0.16" }, "bin": { "browserslist": "cli.js" @@ -4831,9 +4703,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001616", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001616.tgz", - "integrity": "sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==", + "version": "1.0.30001640", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz", + "integrity": "sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA==", "dev": true, "funding": [ { @@ -4958,6 +4830,76 @@ "node": ">=12" } }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cliui/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/code-red": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", @@ -5428,13 +5370,10 @@ } }, "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -5670,13 +5609,10 @@ } }, "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -6167,13 +6103,10 @@ } }, "node_modules/conventional-recommended-bump/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -6242,9 +6175,9 @@ } }, "node_modules/core-js-compat": { - "version": "3.37.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.0.tgz", - "integrity": "sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==", + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", "dev": true, "dependencies": { "browserslist": "^4.23.0" @@ -6441,6 +6374,12 @@ "node": ">=18" } }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "dev": true + }, "node_modules/dargs": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-8.1.0.tgz", @@ -6527,9 +6466,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -6590,9 +6529,9 @@ "dev": true }, "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", + "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", "dev": true, "dependencies": { "type-detect": "^4.0.0" @@ -6945,13 +6884,10 @@ } }, "node_modules/del-cli/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -7125,7 +7061,6 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -7254,15 +7189,15 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.756", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.756.tgz", - "integrity": "sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==", + "version": "1.4.820", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.820.tgz", + "integrity": "sha512-kK/4O/YunacfboFEk/BDf7VO1HoPmDudLTJAU9NmXIOSjsV7qVIX3OrI4REZo0VmdqhcpUcncQc6N8Q3aEXlHg==", "dev": true }, "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, "node_modules/entities": { @@ -7495,7 +7430,6 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -7710,7 +7644,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.41.0.tgz", "integrity": "sha512-gjU9Q/psxbWG1VNwYbEb0Q6U4W5PBGaDpYmO2zlQ+zlAMVS3Qt0luAK0ACi/tMSwRK6JENiySvMyJbO0YWmXSg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -7900,7 +7833,6 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -8049,9 +7981,9 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -8181,7 +8113,6 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -8222,7 +8153,6 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, - "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -8236,8 +8166,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/for-each": { "version": "0.3.3", @@ -8249,9 +8178,9 @@ } }, "node_modules/foreground-child": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.0.tgz", - "integrity": "sha512-CrWQNaEl1/6WeZoarcM9LHupTo3RpZO2Pdk1vktwzPiQTsJnAKJmm3TACKeG5UZbWDfaH2AbvYxzP96y0MT7fA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", + "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", "dev": true, "dependencies": { "cross-spawn": "^7.0.0", @@ -8397,6 +8326,21 @@ "node": ">=6.9.0" } }, + "node_modules/get-pkg-repo/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/get-pkg-repo/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -8408,6 +8352,30 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/get-pkg-repo/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/get-pkg-repo/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/get-pkg-repo/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/get-pkg-repo/node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -8468,6 +8436,20 @@ "safe-buffer": "~5.1.0" } }, + "node_modules/get-pkg-repo/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/get-pkg-repo/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -8478,6 +8460,23 @@ "xtend": "~4.0.1" } }, + "node_modules/get-pkg-repo/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/get-pkg-repo/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -8685,13 +8684,10 @@ } }, "node_modules/git-semver-tags/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -8855,22 +8851,23 @@ "dev": true }, "node_modules/glob": { - "version": "10.4.1", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", - "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "version": "10.4.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.4.tgz", + "integrity": "sha512-XsOKvHsu38Xe19ZQupE6N/HENeHQBA05o3hV8labZZT2zYDg1+emxWHnc/Bm9AcCMPXfD6jt+QC7zC5JSFyumw==", "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "14 >=14.21 || 16 >=16.20 || 18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -8938,7 +8935,6 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -8959,7 +8955,6 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } @@ -9143,9 +9138,9 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, "dependencies": { "agent-base": "^7.0.2", @@ -9201,9 +9196,9 @@ } }, "node_modules/immutable": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", - "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==" + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", + "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==" }, "node_modules/immutable-json-patch": { "version": "6.0.1", @@ -9267,6 +9262,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "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.", "dev": true, "dependencies": { "once": "^1.3.0", @@ -9391,12 +9387,15 @@ } }, "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", + "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", "dev": true, "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -9727,9 +9726,9 @@ } }, "node_modules/istanbul-lib-source-maps": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.4.tgz", - "integrity": "sha512-wHOoEsNJTVltaJp8eVkm8w+GVkVNHT2YDYo53YdzQEL2gWm1hBX5cGFR9hQJtuGLebidVX7et3+dmDZrmclduw==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.23", @@ -9754,15 +9753,15 @@ } }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.2.tgz", + "integrity": "sha512-qH3nOSj8q/8+Eg8LUPOq3C+6HWkpUioIjDsq1+D4zY91oZvpPttw8GwtF1nReRYKXl+1AORyFqtm2f5Q1SB6/Q==", "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=14" + "node": "14 >=14.21 || 16 >=16.20 || >=18" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -9772,9 +9771,9 @@ } }, "node_modules/jiti": { - "version": "1.21.0", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", - "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", "dev": true, "bin": { "jiti": "bin/jiti.js" @@ -9846,12 +9845,6 @@ } } }, - "node_modules/jsdom/node_modules/rrweb-cssom": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.0.tgz", - "integrity": "sha512-KlSv0pm9kgQSRxXEMgtivPJ4h826YHsuob8pSHcfSZsSXGtvpEAie8S0AnXuObEJ7nhikOb4ahwxDm0H2yW17g==", - "dev": true - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -9868,8 +9861,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -9967,7 +9959,6 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, - "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -9994,8 +9985,7 @@ "version": "0.34.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/levn": { "version": "0.4.1", @@ -10204,7 +10194,6 @@ "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", "dev": true, - "license": "MIT", "bin": { "lz-string": "bin/bin.js" } @@ -10238,31 +10227,16 @@ }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -10270,12 +10244,6 @@ "node": ">=10" } }, - "node_modules/make-dir/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", @@ -10335,12 +10303,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -10390,9 +10358,9 @@ } }, "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -10458,14 +10426,14 @@ } }, "node_modules/mlly": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.0.tgz", - "integrity": "sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", + "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", "dev": true, "dependencies": { "acorn": "^8.11.3", "pathe": "^1.1.2", - "pkg-types": "^1.1.0", + "pkg-types": "^1.1.1", "ufo": "^1.5.3" } }, @@ -10742,10 +10710,13 @@ "dev": true }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", "dev": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10975,6 +10946,12 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -11077,12 +11054,12 @@ } }, "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "version": "10.4.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.2.tgz", + "integrity": "sha512-voV4dDrdVZVNz84n39LFKDaRzfwhdzJ7akpyXfTMxCgRUp07U3lcJUXRlhTKP17rgt09sUzLi5iCitpEAr+6ug==", "dev": true, "engines": { - "node": "14 || >=16.14" + "node": "14 || 16 || 18 || 20 || >=22" } }, "node_modules/path-type": { @@ -11139,8 +11116,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true, - "license": "ISC" + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", @@ -11175,13 +11151,13 @@ } }, "node_modules/pkg-types": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.0.tgz", - "integrity": "sha512-/RpmvKdxKf8uILTtoOhAgf30wYbP2Qw+L9p3Rvshx1JZVX+XQNZQFjlbmGHEGIm4CkVPlSn+NXmIM8+9oWQaSA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", + "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", "dev": true, "dependencies": { "confbox": "^0.1.7", - "mlly": "^1.6.1", + "mlly": "^1.7.1", "pathe": "^1.1.2" } }, @@ -11213,7 +11189,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.1", @@ -11287,7 +11262,6 @@ "url": "https://github.com/sponsors/ai" } ], - "license": "MIT", "engines": { "node": ">=12.0" }, @@ -11337,7 +11311,6 @@ "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.5.tgz", "integrity": "sha512-vP/M/Goc8z4iVIvrwXwbrYVjJgA0Hf8PO1G4LBh/ocSt6vUP6sLvyu9F3ABEGr+dbKyxZjEKLkeFsWy/yYl0HQ==", "dev": true, - "license": "MIT", "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" @@ -11348,7 +11321,6 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", "dev": true, - "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1", "ansi-styles": "^5.0.0", @@ -11363,7 +11335,6 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "MIT", "engines": { "node": ">=10" }, @@ -11395,6 +11366,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", "dev": true, "engines": { "node": ">=0.6.0", @@ -11449,8 +11421,7 @@ "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/read-pkg": { "version": "3.0.0", @@ -11757,6 +11728,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, "dependencies": { "glob": "^7.1.3" @@ -11782,6 +11754,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -11898,9 +11871,9 @@ } }, "node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", + "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", "dev": true }, "node_modules/run-parallel": { @@ -12071,7 +12044,6 @@ "version": "1.77.6", "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", - "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12319,9 +12291,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.17", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", - "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/split": { @@ -12379,6 +12351,21 @@ "node": ">=10" } }, + "node_modules/standard-version/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/standard-version/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -12390,6 +12377,24 @@ "wrap-ansi": "^7.0.0" } }, + "node_modules/standard-version/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/standard-version/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/standard-version/node_modules/conventional-changelog-conventionalcommits": { "version": "4.6.3", "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.3.tgz", @@ -12404,6 +12409,12 @@ "node": ">=10" } }, + "node_modules/standard-version/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, "node_modules/standard-version/node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -12435,18 +12446,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/standard-version/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/standard-version/node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -12487,13 +12486,10 @@ } }, "node_modules/standard-version/node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -12501,11 +12497,36 @@ "node": ">=10" } }, - "node_modules/standard-version/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "node_modules/standard-version/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/standard-version/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/standard-version/node_modules/yargs": { "version": "16.2.0", @@ -12562,17 +12583,20 @@ } }, "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/string-width-cjs": { @@ -12590,6 +12614,39 @@ "node": ">=8" } }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/string.prototype.padend": { "version": "3.1.6", "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", @@ -12727,7 +12784,6 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" }, @@ -12819,7 +12875,6 @@ "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.8.4.tgz", "integrity": "sha512-61aHMkdinWyH8BkkTX9jPLYxYzaAAz/FK/VQqdr2FiCQQ/q04WCwDlpGbHff1GdrMYTmW8chlTFvRWL9k0A8vg==", "dev": true, - "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "chokidar": "^3.4.1", @@ -12902,7 +12957,6 @@ "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.39.2.tgz", "integrity": "sha512-87UwLuWTtDIuzWOhOi1zBL5wYVd07M5BK1qZ57YmXJB5/UmjUNJqGy3XSOhPqjckY1dATNV9y+mx+nI0WH6HPA==", "dev": true, - "license": "MIT", "dependencies": { "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", @@ -13038,9 +13092,9 @@ } }, "node_modules/svelte2tsx": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.8.tgz", - "integrity": "sha512-ABK3RDFcy59AqAiU1N5Kxu1RnKrb1GDMrQjLgNgJfE8Q+coCKpjCAPtUVKQM2HnmuqeNWcT3NqfXbE+ZmN5Pow==", + "version": "0.7.13", + "resolved": "https://registry.npmjs.org/svelte2tsx/-/svelte2tsx-0.7.13.tgz", + "integrity": "sha512-aObZ93/kGAiLXA/I/kP+x9FriZM+GboB/ReOIGmLNbVGEd2xC+aTCppm3mk1cc9I/z60VQf7b2QDxC3jOXu3yw==", "dev": true, "dependencies": { "dedent-js": "^1.0.1", @@ -13058,9 +13112,9 @@ "dev": true }, "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "version": "5.31.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", + "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -13103,6 +13157,7 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -13300,9 +13355,9 @@ } }, "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", "dev": true }, "node_modules/type-check": { @@ -13331,7 +13386,6 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13423,7 +13477,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, - "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -13439,9 +13492,9 @@ "dev": true }, "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", "dev": true, "optional": true, "bin": { @@ -13534,9 +13587,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.15.tgz", - "integrity": "sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -13554,7 +13607,7 @@ ], "dependencies": { "escalade": "^3.1.2", - "picocolors": "^1.0.0" + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -13610,7 +13663,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-5.3.3.tgz", "integrity": "sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.39", @@ -13873,9 +13925,9 @@ } }, "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, "dependencies": { "siginfo": "^2.0.0", @@ -13904,17 +13956,17 @@ "dev": true }, "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/wrap-ansi?sponsor=1" @@ -13971,39 +14023,65 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { - "color-name": "~1.1.4" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -14011,9 +14089,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "dev": true, "engines": { "node": ">=10.0.0" @@ -14106,10 +14184,30 @@ "node": ">=12" } }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", + "integrity": "sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==", "dev": true, "engines": { "node": ">=12.20" From 58072b4d3ba7b3765b06bfd8e855ecaf3e96d472 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 9 Jul 2024 09:29:26 +0200 Subject: [PATCH 28/93] chore: refactor `JSONRepairModal` to use dialog --- .../components/modals/JSONRepairModal.scss | 4 ++ .../components/modals/JSONRepairModal.svelte | 31 +++++++------ .../modes/tablemode/TableMode.svelte | 44 +++++++------------ .../components/modes/treemode/TreeMode.svelte | 41 ++++++----------- src/lib/types.ts | 8 ++++ 5 files changed, 57 insertions(+), 71 deletions(-) diff --git a/src/lib/components/modals/JSONRepairModal.scss b/src/lib/components/modals/JSONRepairModal.scss index 948a1c68..6fa20c86 100644 --- a/src/lib/components/modals/JSONRepairModal.scss +++ b/src/lib/components/modals/JSONRepairModal.scss @@ -2,4 +2,8 @@ .jse-modal.jse-repair { @include jse-modal-style; + + display: flex; + width: 600px; + height: 500px; } diff --git a/src/lib/components/modals/JSONRepairModal.svelte b/src/lib/components/modals/JSONRepairModal.svelte index 147acb0d..07714221 100644 --- a/src/lib/components/modals/JSONRepairModal.svelte +++ b/src/lib/components/modals/JSONRepairModal.svelte @@ -1,36 +1,35 @@ -
- -
+ +
+ +
+
diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index f79728bf..59065777 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -34,7 +34,8 @@ TransformModalOptions, ValidationError, Validator, - ValueNormalization + ValueNormalization, + JSONRepairModalProps } from '$lib/types' import { Mode, SortDirection, ValidationSeverity } from '$lib/types.js' import TableMenu from './menu/TableMenu.svelte' @@ -121,8 +122,7 @@ CONTEXT_MENU_HEIGHT, CONTEXT_MENU_WIDTH, SCROLL_DURATION, - SEARCH_BOX_HEIGHT, - SIMPLE_MODAL_OPTIONS + SEARCH_BOX_HEIGHT } from '$lib/constants.js' import { noop } from '$lib/utils/noop.js' import { createJump } from '$lib/assets/jump.js/src/jump.js' @@ -146,13 +146,11 @@ import TableModeWelcome from './TableModeWelcome.svelte' import JSONPreview from '../../controls/JSONPreview.svelte' import RefreshColumnHeader from './RefreshColumnHeader.svelte' - import type { Context } from 'svelte-simple-modal' import createTableContextMenuItems from './contextmenu/createTableContextMenuItems' import ContextMenu from '../../controls/contextmenu/ContextMenu.svelte' import { flattenSearchResults, toRecursiveSearchResults } from '$lib/logic/search.js' const debug = createDebug('jsoneditor:TableMode') - const { open } = getContext('simple-modal') const { openAbsolutePopup, closeAbsolutePopup } = getContext('absolute-popup') const jump = createJump() @@ -196,6 +194,8 @@ let refContents: HTMLDivElement | undefined let refHiddenInput: HTMLInputElement + let jsonRepairModalProps: JSONRepairModalProps | undefined = undefined + createFocusTracker({ onMount, onDestroy, @@ -1566,29 +1566,13 @@ } function openRepairModal(text: string, onApply: (repairedText: string) => void) { - open( - JSONRepairModal, - { - text, - onParse: (text: string) => parsePartialJson(text, (t) => parseAndRepair(t, parser)), - onRepair: repairPartialJson, - onApply - }, - { - ...SIMPLE_MODAL_OPTIONS, - styleWindow: { - width: '600px', - height: '500px' - }, - styleContent: { - padding: 0, - height: '100%' - } - }, - { - onClose: () => focus() - } - ) + jsonRepairModalProps = { + text, + onParse: (text) => parsePartialJson(text, (t) => parseAndRepair(t, parser)), + onRepair: repairPartialJson, + onApply, + onClose: focus + } } function handleSortAll() { @@ -1987,4 +1971,8 @@ (copyPasteModalOpen = false)} /> {/if} +{#if jsonRepairModalProps} + (jsonRepairModalProps = undefined)} /> +{/if} + diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index cd28216b..4135e206 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -20,8 +20,7 @@ CONTEXT_MENU_HEIGHT, CONTEXT_MENU_WIDTH, SCROLL_DURATION, - SEARCH_BOX_HEIGHT, - SIMPLE_MODAL_OPTIONS + SEARCH_BOX_HEIGHT } from '$lib/constants.js' import { collapsePath, @@ -118,6 +117,7 @@ JSONParser, JSONPatchResult, JSONPathParser, + JSONRepairModalProps, JSONSelection, OnBlur, OnChange, @@ -157,7 +157,6 @@ onRemove } from '$lib/logic/actions.js' import JSONPreview from '../../controls/JSONPreview.svelte' - import type { Context } from 'svelte-simple-modal' import ContextMenu from '../../controls/contextmenu/ContextMenu.svelte' import createTreeContextMenuItems from './contextmenu/createTreeContextMenuItems' import { toRecursiveSearchResults as toRecursiveSearchResults } from 'svelte-jsoneditor/logic/search.js' @@ -167,7 +166,6 @@ const isSSR = typeof window === 'undefined' debug('isSSR:', isSSR) - const { open } = getContext('simple-modal') const sortModalId = uniqueId() const transformModalId = uniqueId() @@ -211,6 +209,7 @@ // This is used to track whether the editor still has focus let modalOpen = false let copyPasteModalOpen = false + let jsonRepairModalProps: JSONRepairModalProps | undefined = undefined createFocusTracker({ onMount, @@ -768,29 +767,13 @@ } function openRepairModal(text: string, onApply: (repairedText: string) => void) { - open( - JSONRepairModal, - { - text, - onParse: (text: string) => parsePartialJson(text, (t) => parseAndRepair(t, parser)), - onRepair: repairPartialJson, - onApply - }, - { - ...SIMPLE_MODAL_OPTIONS, - styleWindow: { - width: '600px', - height: '500px' - }, - styleContent: { - padding: 0, - height: '100%' - } - }, - { - onClose: () => focus() - } - ) + jsonRepairModalProps = { + text, + onParse: (text) => parsePartialJson(text, (t) => parseAndRepair(t, parser)), + onRepair: repairPartialJson, + onApply, + onClose: focus + } } function handleRemove() { @@ -2069,4 +2052,8 @@ (copyPasteModalOpen = false)} /> {/if} +{#if jsonRepairModalProps} + (jsonRepairModalProps = undefined)} /> +{/if} + diff --git a/src/lib/types.ts b/src/lib/types.ts index 35d40026..b15ecb7f 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -682,6 +682,14 @@ export interface SortModalProps { onClose: () => void } +export interface JSONRepairModalProps { + text: string + onParse: (text: string) => void + onRepair: (text: string) => string + onApply: (repairedText: string) => void + onClose: () => void +} + export interface JSONEditorModalCallback { content: Content path: JSONPath From df6b02c8e3090f14bc8be413f6049140ee1c0fdb Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 9 Jul 2024 10:26:49 +0200 Subject: [PATCH 29/93] chore: refactor `JSONEditorModal` to use dialog, remove dependency `svelte-simple-modal` --- package-lock.json | 9 - package.json | 1 - src/lib/actions/onEscape.ts | 6 +- src/lib/assets/svelte-simple-modal/types.d.ts | 268 ------------------ src/lib/components/JSONEditor.svelte | 194 ++++++------- src/lib/components/modals/Header.svelte | 16 +- .../components/modals/JSONEditorModal.svelte | 164 +++++------ .../components/modals/JSONRepairModal.svelte | 2 +- src/lib/components/modals/Modal.scss | 54 ---- src/lib/components/modals/Modal.svelte | 6 +- src/lib/components/modals/ModalRef.svelte | 21 -- .../components/modals/TransformModal.svelte | 2 +- src/lib/constants.ts | 23 -- src/lib/types.ts | 33 ++- 14 files changed, 210 insertions(+), 589 deletions(-) delete mode 100644 src/lib/assets/svelte-simple-modal/types.d.ts delete mode 100644 src/lib/components/modals/ModalRef.svelte diff --git a/package-lock.json b/package-lock.json index 474960c4..cdfcd588 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,7 +34,6 @@ "sass": "^1.77.6", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", - "svelte-simple-modal": "^1.6.2", "vanilla-picker": "^2.12.3" }, "devDependencies": { @@ -13067,14 +13066,6 @@ "svelte-floating-ui": "1.5.8" } }, - "node_modules/svelte-simple-modal": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/svelte-simple-modal/-/svelte-simple-modal-1.6.2.tgz", - "integrity": "sha512-cRjpqjZTH0rU5G+SRhUDHOV6TISQs6AnEW/Z7D5uXiz5V/3axrBYcBCPnKMI2Z0EyXmpwPXK4q9grroQTL6rhQ==", - "peerDependencies": { - "svelte": "^3.30.0 || ^4.0.0" - } - }, "node_modules/svelte/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", diff --git a/package.json b/package.json index 59d6f7b7..40d596f8 100644 --- a/package.json +++ b/package.json @@ -100,7 +100,6 @@ "sass": "^1.77.6", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", - "svelte-simple-modal": "^1.6.2", "vanilla-picker": "^2.12.3" }, "peerDependencies": { diff --git a/src/lib/actions/onEscape.ts b/src/lib/actions/onEscape.ts index ea883797..324d7c45 100644 --- a/src/lib/actions/onEscape.ts +++ b/src/lib/actions/onEscape.ts @@ -1,6 +1,6 @@ import { isEmpty, last } from 'lodash-es' -type Callback = () => void +type Callback = (event: KeyboardEvent) => void // singleton stack with callbacks let callbacks: Callback[] = [] @@ -9,7 +9,7 @@ function handleKeyDown(event: KeyboardEvent) { if (event.key === 'Escape') { const callback = last(callbacks) if (callback) { - callback() + callback(event) } } } @@ -21,7 +21,7 @@ function handleKeyDown(event: KeyboardEvent) { * This is useful for example when opening a model on top of another modal: * you only want the top modal to close on Escape, and not the second modal. */ -export function onEscape(element: Element | undefined, callback: Callback) { +export function onEscape(_element: Element | undefined, callback: Callback) { if (isEmpty(callbacks)) { window.addEventListener('keydown', handleKeyDown) } diff --git a/src/lib/assets/svelte-simple-modal/types.d.ts b/src/lib/assets/svelte-simple-modal/types.d.ts deleted file mode 100644 index dc7ca8e3..00000000 --- a/src/lib/assets/svelte-simple-modal/types.d.ts +++ /dev/null @@ -1,268 +0,0 @@ -// This file is copied from svelte-simple-modal as a workaround for the types not being found: -// -// Svelte: Cannot find module svelte-simple-modal or its corresponding type declarations. -// -// Version: svelte-simple-modal@1.6.1, date: 2023-12-15 -// -// Additionally: the type `Component` is extended with the following to fix some issues: -// -// | typeof import('svelte').SvelteComponent> - -declare module 'svelte-simple-modal' { - import type { SvelteComponent } from 'svelte' - - /** - * Create a Svelte component with props bound to it. - */ - export declare function bind(component: Component, props: Record): Component - - export type Component = - | typeof import('svelte').SvelteComponent - | typeof import('svelte').SvelteComponent - | typeof import('svelte').SvelteComponent> - - export type BlurParams = import('svelte/types/runtime/transition').BlurParams - - export type FadeParams = import('svelte/types/runtime/transition').FadeParams - - export type FlyParams = import('svelte/types/runtime/transition').FlyParams - - export type SlideParams = import('svelte/types/runtime/transition').SlideParams - - export type TransitionConfig = import('svelte/types/runtime/transition').TransitionConfig - - export type Styles = Record - - export type TransitionFn = ( - node: Element, - parameters: BlurParams | FadeParams | FlyParams | SlideParams - ) => TransitionConfig - - export interface Options { - id: string | null - ariaLabel: string | null - ariaLabelledBy: string | null - closeButton: Component | boolean - closeOnEsc: boolean - closeOnOuterClick: boolean - styleBg: Styles - styleWindowWrap: Styles - styleWindow: Styles - styleContent: Styles - styleCloseButton: Styles - classBg: string | null - classWindowWrap: string | null - classWindow: string | null - classContent: string | null - classCloseButton: string | null - transitionBg: TransitionFn - transitionBgProps: BlurParams - transitionWindow: TransitionFn - transitionWindowProps: BlurParams - disableFocusTrap: boolean - isTabbable: boolean - unstyled: boolean - } - - export type Callback = () => void - - export interface Callbacks { - onOpen: Callback - onOpened: Callback - onClose: Callback - onClosed: Callback - } - - export type Open = ( - NewComponent: Component, - newProps?: Record, - options?: Partial, - callbacks?: Partial - ) => void - - export type Close = (callback?: Partial) => void - - export interface Context { - open: Open - close: Close - } - - export interface ModalProps { - /** - * A function to determine if an HTML element is tabbable - * @default undefined - */ - isTabbable?: (node: Element) => boolean - - /** - * Svelte component to be shown as the modal - * @default null - */ - show?: Component | null - - /** - * Element ID assigned to the modal's root DOM element - * @default null - */ - id?: string | null - - /** - * Svelte context key to reference the simple modal context - * @default 'simple-modal' - */ - key?: string - - /** - * Accessibility label of the modal - * @see https://www.w3.org/TR/wai-aria-1.1/#aria-label - * @default null - */ - ariaLabel?: string | null - - /** - * Element ID holding the accessibility label of the modal - * @see https://www.w3.org/TR/wai-aria-1.1/#aria-labelledby - * @default null - */ - ariaLabelledBy?: string | null - - /** - * Whether to show a close button or not - * @default true - */ - closeButton?: Component | boolean - - /** - * Whether to close the modal on hitting the escape key or not - * @default true - */ - closeOnEsc?: boolean - - /** - * Whether to close the modal upon an outside mouse click or not - * @default true - */ - closeOnOuterClick?: boolean - - /** - * CSS for styling the background element - * @default {} - */ - styleBg?: Styles - - /** - * CSS for styling the window wrapper element - * @default {} - */ - styleWindowWrap?: Styles - - /** - * CSS for styling the window element - * @default {} - */ - styleWindow?: Styles - - /** - * CSS for styling the content element - * @default {} - */ - styleContent?: Styles - - /** - * CSS for styling the close element - * @default {} - */ - styleCloseButton?: Styles - - /** - * Class name for the background element - * @default null - */ - classBg?: string | null - - /** - * Class name for window wrapper element - * @default null - */ - classWindowWrap?: string | null - - /** - * Class name for window element - * @default null - */ - classWindow?: string | null - - /** - * Class name for content element - * @default null - */ - classContent?: string | null - - /** - * Class name for close element - * @default null - */ - classCloseButton?: string | null - - /** - * Do not apply default styles to the modal - * @default false - */ - unstyled?: boolean - - /** - * The setContext() function associated with this library - * @description If you want to bundle simple-modal with its own version of - * Svelte you have to pass `setContext()` from your main app to simple-modal - * using this parameter - * @see https://svelte.dev/docs#run-time-svelte-setcontext - * @default undefined - */ - setContext?: (key: unknown, context: T) => T - - /** - * Transition function for the background element - * @see https://svelte.dev/docs#transition_fn - * @default undefined - */ - transitionBg?: TransitionFn - - /** - * Parameters for the background element transition - * @default { duration: 250 } - */ - transitionBgProps?: BlurParams | FadeParams | FlyParams | SlideParams - - /** - * Transition function for the window element - * @see https://svelte.dev/docs#transition_fn - * @default undefined - */ - transitionWindow?: TransitionFn - - /** - * Parameters for the window element transition - * @default undefined - */ - transitionWindowProps?: BlurParams | FadeParams | FlyParams | SlideParams - - /** - * If `true` elements outside the modal can be focused - * @default false - */ - disableFocusTrap?: boolean - } - - export default class Modal extends SvelteComponent< - ModalProps, - { - open: CustomEvent - opening: CustomEvent - close: CustomEvent - closing: CustomEvent - opened: CustomEvent - closed: CustomEvent - }, - { default: Record } - > {} -} diff --git a/src/lib/components/JSONEditor.svelte b/src/lib/components/JSONEditor.svelte index e417d158..70526f9c 100644 --- a/src/lib/components/JSONEditor.svelte +++ b/src/lib/components/JSONEditor.svelte @@ -2,9 +2,6 @@ - - - -
- {#key instanceId} - - {/key} -
- - {#if sortModalProps} - (sortModalProps = undefined)} /> - {/if} - - {#if transformModalProps} - (transformModalProps = undefined)} - /> - {/if} -
-
+
+ {#key instanceId} + + {/key} +
+ + {#if sortModalProps} + (sortModalProps = undefined)} /> + {/if} + + {#if transformModalProps} + (transformModalProps = undefined)} /> + {/if} + + {#if jsonEditorModalProps} + (jsonEditorModalProps = undefined)} /> + {/if}
diff --git a/src/lib/components/modals/Header.svelte b/src/lib/components/modals/Header.svelte index 8912955a..0045e1ca 100644 --- a/src/lib/components/modals/Header.svelte +++ b/src/lib/components/modals/Header.svelte @@ -1,21 +1,17 @@
@@ -33,17 +29,7 @@ {/if} -
diff --git a/src/lib/components/modals/JSONEditorModal.svelte b/src/lib/components/modals/JSONEditorModal.svelte index 5d79666b..5263fab5 100644 --- a/src/lib/components/modals/JSONEditorModal.svelte +++ b/src/lib/components/modals/JSONEditorModal.svelte @@ -1,7 +1,7 @@ -
-
- -
-
-
Path
-
- - -
-
Contents
-
- -
- -
- -
- {#if error} -
- {error} -
- {/if} - - {#if stack.length > 1} - - {/if} - {#if !readOnly} - - {:else} - - {/if} + +
+
+ +
+
+
Path
+
+ + +
+
Contents
+
+ +
+ +
+ +
+ {#if error} +
+ {error} +
+ {/if} + + {#if stack.length > 1} + + {/if} + {#if !readOnly} + + {:else} + + {/if} +
-
+ diff --git a/src/lib/components/modals/JSONRepairModal.svelte b/src/lib/components/modals/JSONRepairModal.svelte index 07714221..fa4bd98e 100644 --- a/src/lib/components/modals/JSONRepairModal.svelte +++ b/src/lib/components/modals/JSONRepairModal.svelte @@ -2,7 +2,7 @@ diff --git a/src/lib/components/modals/TransformModal.svelte b/src/lib/components/modals/TransformModal.svelte index 149b49a4..c97fa181 100644 --- a/src/lib/components/modals/TransformModal.svelte +++ b/src/lib/components/modals/TransformModal.svelte @@ -29,7 +29,7 @@ } from '$lib/types.js' import { onEscape } from '$lib/actions/onEscape.js' import { readonlyProxy } from '$lib/utils/readonlyProxy.js' - import Modal from '$lib/components/modals/Modal.svelte' + import Modal from './Modal.svelte' const debug = createDebug('jsoneditor:TransformModal') diff --git a/src/lib/constants.ts b/src/lib/constants.ts index a6d3673f..e6102fdf 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -20,29 +20,6 @@ export const MAX_AUTO_REPAIRABLE_SIZE = 1024 * 1024 // 1 MB export const MAX_DOCUMENT_SIZE_TEXT_MODE = 10 * 1024 * 1024 // 10 MB export const MAX_DOCUMENT_SIZE_EXPAND_ALL = 10 * 1024 // 10 KB -export const SIMPLE_MODAL_OPTIONS = { - closeButton: false, - classBg: 'jse-modal-bg', - classWindow: 'jse-modal-window', - classWindowWrap: 'jse-modal-window-wrap', - classContent: 'jse-modal-container' -} - -export const SORT_MODAL_OPTIONS = { - ...SIMPLE_MODAL_OPTIONS, - classWindow: 'jse-modal-window jse-modal-window-sort' -} - -export const TRANSFORM_MODAL_OPTIONS = { - ...SIMPLE_MODAL_OPTIONS, - classWindow: 'jse-modal-window jse-modal-window-transform' -} - -export const JSONEDITOR_MODAL_OPTIONS = { - ...SIMPLE_MODAL_OPTIONS, - classWindow: 'jse-modal-window jse-modal-window-jsoneditor' -} - export const INSERT_EXPLANATION = 'Insert or paste contents, ' + 'enter [ insert a new array, ' + diff --git a/src/lib/types.ts b/src/lib/types.ts index b15ecb7f..6b6771a9 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -409,7 +409,7 @@ export type OnRenderContextMenuInternal = ( export type OnError = (error: Error) => void export type OnFocus = () => void export type OnBlur = () => void -export type OnSortModal = (props: SortModalProps) => void +export type OnSortModal = (props: SortModalCallback) => void export type OnTransformModal = (props: TransformModalCallback) => void export type OnJSONEditorModal = (props: JSONEditorModalCallback) => void export type FindNextInside = (path: JSONPath) => JSONSelection | undefined @@ -557,6 +557,35 @@ export interface JSONEditorPropsOptional { onBlur?: OnBlur } +export interface JSONEditorModalProps { + content: Content + path: JSONPath + onPatch: OnPatch + + readOnly: boolean + indentation: number | string + tabSize: number + mainMenuBar: boolean + navigationBar: boolean + statusBar: boolean + askToFormat: boolean + escapeControlCharacters: boolean + escapeUnicodeCharacters: boolean + flattenColumns: boolean + parser: JSONParser + validator: Validator | undefined + validationParser: JSONParser + pathParser: JSONPathParser + + onRenderValue: OnRenderValue + onClassName: OnClassName + onRenderMenu: OnRenderMenu + onRenderContextMenu: OnRenderContextMenu + onSortModal: (props: SortModalCallback) => void + onTransformModal: (props: TransformModalCallback) => void + onClose: () => void +} + export interface JSONEditorContext { readOnly: boolean parser: JSONParser @@ -674,7 +703,7 @@ export interface TransformModalProps extends TransformModalCallback { onClose: () => void } -export interface SortModalProps { +export interface SortModalCallback { id: string json: unknown rootPath: JSONPath From cb7bcf68106e1034d5cfc68f7588e68bb25db888 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 9 Jul 2024 13:04:17 +0200 Subject: [PATCH 30/93] chore: refactor the sizing of the modals --- src/lib/components/modals/CopyPasteModal.scss | 25 +- .../components/modals/CopyPasteModal.svelte | 50 ++-- .../components/modals/JSONEditorModal.scss | 12 +- .../components/modals/JSONEditorModal.svelte | 4 +- .../components/modals/JSONRepairModal.scss | 9 - .../components/modals/JSONRepairModal.svelte | 20 +- src/lib/components/modals/Modal.scss | 47 ---- src/lib/components/modals/Modal.svelte | 65 ++++- src/lib/components/modals/SortModal.scss | 76 +++--- src/lib/components/modals/SortModal.svelte | 120 +++++---- src/lib/components/modals/TransformModal.scss | 230 +++++++++--------- .../components/modals/TransformModal.svelte | 4 +- src/lib/styles.scss | 25 ++ 13 files changed, 354 insertions(+), 333 deletions(-) delete mode 100644 src/lib/components/modals/JSONRepairModal.scss delete mode 100644 src/lib/components/modals/Modal.scss diff --git a/src/lib/components/modals/CopyPasteModal.scss b/src/lib/components/modals/CopyPasteModal.scss index a0bddd6b..e1caaa1e 100644 --- a/src/lib/components/modals/CopyPasteModal.scss +++ b/src/lib/components/modals/CopyPasteModal.scss @@ -1,18 +1,19 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-copy-paste { - .jse-shortcuts { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: $padding-double 0; +.jse-modal-contents { + @include jse-modal-contents; +} + +.jse-shortcuts { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: $padding-double 0; - .jse-shortcut { - .jse-key { - font-size: 200%; - color: $theme-color; - } + .jse-shortcut { + .jse-key { + font-size: 200%; + color: $theme-color; } } } diff --git a/src/lib/components/modals/CopyPasteModal.svelte b/src/lib/components/modals/CopyPasteModal.svelte index 1d37d6e7..ab996fe8 100644 --- a/src/lib/components/modals/CopyPasteModal.svelte +++ b/src/lib/components/modals/CopyPasteModal.svelte @@ -10,37 +10,35 @@ const ctrl = isMac() ? '⌘' : 'Ctrl' - -
-
- -
-
These actions are unavailable via the menu. Please use:
- -
-
-
- {ctrl}+C -
- for copy + +
+ +
+
These actions are unavailable via the menu. Please use:
+ +
+
+
+ {ctrl}+C
-
-
- {ctrl}+X -
- for cut + for copy +
+
+
+ {ctrl}+X
-
-
- {ctrl}+V -
- for paste + for cut +
+
+
+ {ctrl}+V
+ for paste
+
-
- -
+
+
diff --git a/src/lib/components/modals/JSONEditorModal.scss b/src/lib/components/modals/JSONEditorModal.scss index 53a21310..5c4e8b24 100644 --- a/src/lib/components/modals/JSONEditorModal.scss +++ b/src/lib/components/modals/JSONEditorModal.scss @@ -1,9 +1,14 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-jsoneditor-modal { +.jse-modal-wrapper { + flex: 1; + display: flex; + min-width: 0; + min-height: 0; + flex-direction: column; + .jse-modal-contents { - padding-top: 0; + @include jse-modal-contents; .jse-label { font-weight: bold; @@ -27,6 +32,7 @@ flex: 1; min-height: 150px; min-width: 0; + max-width: 100%; display: flex; --jse-theme-color: #{$modal-editor-theme-color}; diff --git a/src/lib/components/modals/JSONEditorModal.svelte b/src/lib/components/modals/JSONEditorModal.svelte index 5263fab5..275fe005 100644 --- a/src/lib/components/modals/JSONEditorModal.svelte +++ b/src/lib/components/modals/JSONEditorModal.svelte @@ -224,8 +224,8 @@ } - -
+ +
- -
- -
+ + - - diff --git a/src/lib/components/modals/Modal.scss b/src/lib/components/modals/Modal.scss deleted file mode 100644 index 409b6a1d..00000000 --- a/src/lib/components/modals/Modal.scss +++ /dev/null @@ -1,47 +0,0 @@ -@import '../../styles'; - -.jse-modal { - // styling for the select box, svelte-select - // see docs: https://github.com/rob-balfre/svelte-select#css-custom-properties-variables - :global(.svelte-select) { - --border: #{$svelte-select-border}; - --item-is-active-bg: #{$svelte-select-item-is-active-bg}; - --border-radius: #{$svelte-select-border-radius}; - --background: #{$svelte-select-background}; - --padding: #{$svelte-select-padding}; - --multi-select-padding: #{$svelte-select-multi-select-padding}; - --font-size: #{$svelte-select-font-size}; - --height: 36px; - --multi-item-height: 28px; - --multi-item-margin: 2px; - --multi-item-padding: 2px 8px; - --multi-item-border-radius: 6px; - --indicator-top: 8px; - } - - @include jse-modal-style; - - .jse-modal-contents { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; - - .jse-actions { - display: flex; - flex-direction: row; - justify-content: flex-end; - - padding-top: $padding; - - button { - &.jse-primary { - @include jsoneditor-button-primary; - } - } - } - } -} diff --git a/src/lib/components/modals/Modal.svelte b/src/lib/components/modals/Modal.svelte index 43eedd1d..3b371908 100644 --- a/src/lib/components/modals/Modal.svelte +++ b/src/lib/components/modals/Modal.svelte @@ -3,6 +3,8 @@ import { onEscape } from '$lib/actions/onEscape.js' import { onDestroy, onMount } from 'svelte' + export let className: string | undefined = undefined + export let fullscreen = false export let onClose: () => void let dialog: HTMLDialogElement @@ -10,8 +12,8 @@ onMount(() => dialog.showModal()) onDestroy(() => dialog.close()) - function handleEscape(event: KeyboardEvent) { - event.stopPropagation() + function handleEscape() { + onClose() } function close() { @@ -20,9 +22,15 @@ - + -
+
@@ -35,16 +43,39 @@ border: none; padding: 0; display: flex; + min-width: 0; + + &.jse-sort-modal { + width: 400px; + } + + &.jse-repair-modal { + width: 600px; + height: 500px; + } + + &.jse-jsoneditor-modal { + width: 800px; + height: 600px; + } + + &.jse-transform-modal { + width: 1200px; + height: 1200px; + } + + &.jse-fullscreen { + width: 100%; + height: 100%; + } } dialog::backdrop { background: $modal-overlay-background; } - dialog > div { - padding: 0; - flex: 1; - display: flex; + dialog > .jse-modal { + @include jse-modal-style; } dialog[open] { @@ -72,4 +103,22 @@ opacity: 1; } } + + // styling for the select box, svelte-select + // see docs: https://github.com/rob-balfre/svelte-select#css-custom-properties-variables + :global(.svelte-select) { + --border: #{$svelte-select-border}; + --item-is-active-bg: #{$svelte-select-item-is-active-bg}; + --border-radius: #{$svelte-select-border-radius}; + --background: #{$svelte-select-background}; + --padding: #{$svelte-select-padding}; + --multi-select-padding: #{$svelte-select-multi-select-padding}; + --font-size: #{$svelte-select-font-size}; + --height: 36px; + --multi-item-height: 28px; + --multi-item-margin: 2px; + --multi-item-padding: 2px 8px; + --multi-item-border-radius: 6px; + --indicator-top: 8px; + } diff --git a/src/lib/components/modals/SortModal.scss b/src/lib/components/modals/SortModal.scss index d8174873..3e647918 100644 --- a/src/lib/components/modals/SortModal.scss +++ b/src/lib/components/modals/SortModal.scss @@ -1,50 +1,48 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-sort { - .jse-modal-contents { - } +.jse-modal-contents { + @include jse-modal-contents; +} - table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - - th, - td { - text-align: left; - vertical-align: middle; - font-weight: normal; - padding-bottom: $padding; - - input.jse-path { - width: 100%; - box-sizing: border-box; - padding: 6px 16px; // TODO: define variables for those props - border: $input-border; - border-radius: $input-radius; - font-family: inherit; - font-size: inherit; - background: inherit; - color: inherit; - outline: none; - - &:read-only { - background: $input-background-readonly; - } +table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + + th, + td { + text-align: left; + vertical-align: middle; + font-weight: normal; + padding-bottom: $padding; + + input.jse-path { + width: 100%; + box-sizing: border-box; + padding: 6px 16px; // TODO: define variables for those props + border: $input-border; + border-radius: $input-radius; + font-family: inherit; + font-size: inherit; + background: inherit; + color: inherit; + outline: none; + + &:read-only { + background: $input-background-readonly; } + } - :global(.svelte-select input) { - box-sizing: border-box; - } + :global(.svelte-select input) { + box-sizing: border-box; } } +} - .jse-space { - height: 200px; // Trick for the property select box dropdown to be fully visible +.jse-space { + height: 200px; // Trick for the property select box dropdown to be fully visible - .jse-error { - color: $error-color; - } + .jse-error { + color: $error-color; } } diff --git a/src/lib/components/modals/SortModal.svelte b/src/lib/components/modals/SortModal.svelte index 45457279..fc151fb4 100644 --- a/src/lib/components/modals/SortModal.svelte +++ b/src/lib/components/modals/SortModal.svelte @@ -75,72 +75,70 @@ } - -
-
- -
- - - - - - + +
+ +
+
+ + + + + + + + + + {#if jsonIsArray && ((properties && properties?.length > 1) || selectedProperty === undefined)} - + - {#if jsonIsArray && ((properties && properties?.length > 1) || selectedProperty === undefined)} - - - - - {/if} - - - - - -
Path + +
PathProperty - +
Property -
Direction -
- -
- {#if sortError} -
- {sortError} -
{/if} -
- -
- -
+ + Direction + + - -
-
Contents
-
- -
- +
+ +
+
+
Path
+
+ -
-
- {#if error} -
- {error} -
- {/if} - - {#if stack.length > 1} - - {/if} - {#if !readOnly} - - {:else} - - {/if} +
+
Contents
+
+ +
+ +
+ +
+ {#if error} +
+ {error} +
+ {/if} + + {#if stack.length > 1} + + {/if} + {#if !readOnly} + + {:else} + + {/if} +
-
+
From dfcd39f92c087d8c80112d2b00bcd97536878455 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Thu, 11 Jul 2024 12:07:38 +0200 Subject: [PATCH 35/93] fix: linting issues --- src/lib/components/JSONEditor.svelte | 33 ++++++++++++------- .../modes/tablemode/TableMode.svelte | 11 ++++--- .../components/modes/treemode/TreeMode.svelte | 11 ++++--- 3 files changed, 35 insertions(+), 20 deletions(-) diff --git a/src/lib/components/JSONEditor.svelte b/src/lib/components/JSONEditor.svelte index 674b0a73..8d71e4e7 100644 --- a/src/lib/components/JSONEditor.svelte +++ b/src/lib/components/JSONEditor.svelte @@ -451,24 +451,33 @@
{#if sortModalProps} - { - sortModalProps?.onClose() - sortModalProps = undefined - }} /> + { + sortModalProps?.onClose() + sortModalProps = undefined + }} + /> {/if} {#if transformModalProps} - { - transformModalProps?.onClose() - transformModalProps = undefined - }} /> + { + transformModalProps?.onClose() + transformModalProps = undefined + }} + /> {/if} {#if jsonEditorModalProps} - { - jsonEditorModalProps?.onClose() - jsonEditorModalProps = undefined - }} /> + { + jsonEditorModalProps?.onClose() + jsonEditorModalProps = undefined + }} + /> {/if} diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index f2148945..8525397f 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -1972,10 +1972,13 @@ {/if} {#if jsonRepairModalProps} - { - jsonRepairModalProps?.onClose() - jsonRepairModalProps = undefined - }} /> + { + jsonRepairModalProps?.onClose() + jsonRepairModalProps = undefined + }} + /> {/if} diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index 89e2a4b7..6eaa5083 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -2051,10 +2051,13 @@ {/if} {#if jsonRepairModalProps} - { - jsonRepairModalProps?.onClose() - jsonRepairModalProps = undefined - }} /> + { + jsonRepairModalProps?.onClose() + jsonRepairModalProps = undefined + }} + /> {/if} From 1d5f98369df7d89c4e55794601095397158f2f26 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Thu, 11 Jul 2024 12:08:19 +0200 Subject: [PATCH 36/93] fix: update test snapshots --- .../__snapshots__/JSONEditor.test.ts.snap | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap index 3f5640a9..c08f86bb 100644 --- a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap +++ b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap @@ -3,9 +3,6 @@ exports[`JSONEditor > render table mode 1`] = `
- - -
@@ -457,11 +454,13 @@ exports[`JSONEditor > render table mode 1`] = `
+
+
`; @@ -469,9 +468,6 @@ exports[`JSONEditor > render table mode 1`] = ` exports[`JSONEditor > render text mode 1`] = `
- - -
@@ -1028,6 +1024,7 @@ exports[`JSONEditor > render text mode 1`] = `
+
`; @@ -1035,9 +1032,6 @@ exports[`JSONEditor > render text mode 1`] = ` exports[`JSONEditor > render tree mode 1`] = `
- - -
@@ -2063,11 +2057,13 @@ exports[`JSONEditor > render tree mode 1`] = `
+
+
`; From 2df86b5ca5711515a5f18a1db2fed5987831e8e7 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Thu, 11 Jul 2024 12:42:19 +0200 Subject: [PATCH 37/93] feat: export more utility functions (fixes #454) --- README.md | 17 +++++++++++++++++ src/lib/index.ts | 23 ++++++++++++++++++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e7d7c2d6..3523286b 100644 --- a/README.md +++ b/README.md @@ -826,6 +826,9 @@ The library exports a set of utility functions. The exact definitions of those f - `EnumValue` - `ReadonlyValue` - `TimestampTag` + - HTML: + - `getValueClass` + - `keyComboFromEvent` - Validation: - `createAjvValidator` - Query languages: @@ -857,6 +860,11 @@ The library exports a set of utility functions. The exact definitions of those f - `createInsideSelection`, - `createAfterSelection` - `createMultiSelection` + - `getFocusPath` + - `getAnchorPath` + - `getStartPath` + - `getEndPath` + - `getSelectionPaths` - Parser: - `isEqualParser` - Path: @@ -865,6 +873,15 @@ The library exports a set of utility functions. The exact definitions of those f - Actions: - `resizeObserver` - `onEscape` +- Type checking: + - `valueType` + - `stringConvert` + - `isObject` + - `isObjectOrArray` + - `isBoolean` + - `isTimestamp` + - `isColor` + - `isUrl` - Typeguards: - `isContentParseError` - `isContentValidationErrors` diff --git a/src/lib/index.ts b/src/lib/index.ts index 58553aae..2b145d2a 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -15,6 +15,10 @@ export { renderValue } from './plugins/value/renderValue.js' export { renderJSONSchemaEnum } from './plugins/value/renderJSONSchemaEnum.js' export { BooleanToggle, ColorPicker, EditableValue, EnumValue, ReadonlyValue, TimestampTag } +// HTML +export { getValueClass } from './plugins/value/components/utils/getValueClass' +export { keyComboFromEvent } from './utils/keyBindings' + // validator plugins export * from './plugins/validator/createAjvValidator.js' @@ -49,7 +53,12 @@ export { createKeySelection, createInsideSelection, createAfterSelection, - createMultiSelection + createMultiSelection, + getFocusPath, + getAnchorPath, + getStartPath, + getEndPath, + getSelectionPaths } from './logic/selection.js' // parser @@ -62,5 +71,17 @@ export { parseJSONPath, stringifyJSONPath } from './utils/pathUtils.js' export { resizeObserver } from './actions/resizeObserver.js' export { onEscape } from './actions/onEscape.js' +// type checking +export { + valueType, + stringConvert, + isObject, + isObjectOrArray, + isBoolean, + isTimestamp, + isColor, + isUrl +} from './utils/typeUtils' + // typeguards export * from './typeguards.js' From 2f3c250cf4cd13ce0a0660b5d4b1760b4b930185 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Thu, 11 Jul 2024 12:44:28 +0200 Subject: [PATCH 38/93] chore: refactor paste as JSON logic (#460) --- .../components/controls/EditableDiv.svelte | 6 ---- .../modes/tablemode/TableMode.svelte | 25 +++-------------- .../components/modes/treemode/TreeMode.svelte | 28 +++---------------- .../value/components/EditableValue.svelte | 22 +++++++++++++-- src/lib/types.ts | 8 ++++-- src/lib/utils/domUtils.ts | 14 ---------- 6 files changed, 34 insertions(+), 69 deletions(-) diff --git a/src/lib/components/controls/EditableDiv.svelte b/src/lib/components/controls/EditableDiv.svelte index 26a2f7d7..88ac4ca1 100644 --- a/src/lib/components/controls/EditableDiv.svelte +++ b/src/lib/components/controls/EditableDiv.svelte @@ -38,12 +38,6 @@ // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore domValue.refresh = handleValueInput - - // The cancel method can be used to cancel editing, without firing a change - // when the contents did change in the meantime. It is the same as pressing ESC - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - domValue.cancel = handleCancel } }) diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index 38b5c079..31f0ac84 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -77,8 +77,7 @@ findParentWithNodeName, getDataPathFromTarget, getWindow, - isChildOf, - isEditableDivRef + isChildOf } from '$lib/utils/domUtils.js' import { createDebug } from '$lib/utils/debug.js' import { @@ -219,7 +218,7 @@ let text: string | undefined let parseError: ParseError | undefined = undefined - let pastedJson: PastedJson + let pastedJson: PastedJson | undefined let searchResultDetails: SearchResultDetails | undefined let searchResults: SearchResults | undefined @@ -1096,24 +1095,8 @@ return } - const { path, contents } = pastedJson - - // exit edit mode - const refEditableDiv = refContents?.querySelector('.jse-editable-div') ?? undefined - if (isEditableDivRef(refEditableDiv)) { - refEditableDiv.cancel() - } - - // replace the value with the JSON object/array - const operations: JSONPatchDocument = [ - { - op: 'replace', - path: compileJSONPointer(path), - value: contents - } - ] - - handlePatch(operations) + const { onPasteAsJson } = pastedJson + onPasteAsJson() // TODO: get rid of the setTimeout here setTimeout(focus) diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index e9eef6ef..e1cd9923 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -79,8 +79,7 @@ findParentWithNodeName, getWindow, isChildOf, - isChildOfNodeName, - isEditableDivRef + isChildOfNodeName } from '$lib/utils/domUtils.js' import { convertValue, @@ -264,7 +263,7 @@ $: debug('selection', selection) - let pastedJson: PastedJson + let pastedJson: PastedJson | undefined let searchResultDetails: SearchResultDetails | undefined let searchResults: SearchResults | undefined @@ -1770,29 +1769,10 @@ return } - const { path, contents } = pastedJson + const { onPasteAsJson } = pastedJson pastedJson = undefined - // exit edit mode - const refEditableDiv = refContents?.querySelector('.jse-editable-div') ?? undefined - if (isEditableDivRef(refEditableDiv)) { - refEditableDiv.cancel() - } - - // replace the value with the JSON object/array - const operations: JSONPatchDocument = [ - { - op: 'replace', - path: compileJSONPointer(path), - value: contents - } - ] - - handlePatch(operations, (patchedJson, patchedState) => { - return { - state: expandSmart(patchedJson, patchedState, path) - } - }) + onPasteAsJson() // TODO: get rid of the setTimeout here setTimeout(focus) diff --git a/src/lib/plugins/value/components/EditableValue.svelte b/src/lib/plugins/value/components/EditableValue.svelte index 7b5ce285..4ff13c14 100644 --- a/src/lib/plugins/value/components/EditableValue.svelte +++ b/src/lib/plugins/value/components/EditableValue.svelte @@ -1,7 +1,7 @@ - -
+ +
{/if} {#if !readOnly} - {:else} - {/if} diff --git a/src/lib/components/modals/Modal.svelte b/src/lib/components/modals/Modal.svelte index f725007b..8bad845c 100644 --- a/src/lib/components/modals/Modal.svelte +++ b/src/lib/components/modals/Modal.svelte @@ -12,10 +12,6 @@ onMount(() => dialog.showModal()) onDestroy(() => dialog.close()) - function handleEscape() { - onClose() - } - function close() { onClose() } @@ -26,11 +22,11 @@ bind:this={dialog} on:close={close} on:click|self={close} + use:onEscape={close} class={className} class:jse-fullscreen={fullscreen} > - -
+
@@ -40,11 +36,13 @@ dialog { border-radius: $border-radius; + font-size: $padding; // for some reason that I don't understand, the font-size of the dialog is used as margin around the dialog border: none; padding: 0; display: flex; min-width: 0; overflow: visible; + transition: width 0.1s ease-in-out, height 0.1s ease-in-out; &.jse-sort-modal { width: 400px; @@ -62,7 +60,7 @@ &.jse-transform-modal { width: 1200px; - height: 1200px; + height: 800px; } &.jse-fullscreen { From 551c8afaa29fbf2fd9154a879082d0da662173c0 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Thu, 11 Jul 2024 17:28:54 +0200 Subject: [PATCH 42/93] fix: some reorganization of the styles --- .../components/modals/JSONEditorModal.svelte | 12 ++++--- src/lib/components/modals/Modal.svelte | 35 ++++++++++--------- 2 files changed, 27 insertions(+), 20 deletions(-) diff --git a/src/lib/components/modals/JSONEditorModal.svelte b/src/lib/components/modals/JSONEditorModal.svelte index 35f594d4..624e5028 100644 --- a/src/lib/components/modals/JSONEditorModal.svelte +++ b/src/lib/components/modals/JSONEditorModal.svelte @@ -299,13 +299,17 @@ {/if} {#if !readOnly} - {:else} - + {/if}
diff --git a/src/lib/components/modals/Modal.svelte b/src/lib/components/modals/Modal.svelte index 8bad845c..36682a9c 100644 --- a/src/lib/components/modals/Modal.svelte +++ b/src/lib/components/modals/Modal.svelte @@ -2,6 +2,7 @@ // code based on: https://svelte.dev/examples/modal import { onEscape } from '$lib/actions/onEscape.js' import { onDestroy, onMount } from 'svelte' + import { classnames } from '$lib/utils/cssUtils.js' export let className: string | undefined = undefined export let fullscreen = false @@ -23,10 +24,10 @@ on:close={close} on:click|self={close} use:onEscape={close} - class={className} + class={classnames('jse-modal', className)} class:jse-fullscreen={fullscreen} > -
+
@@ -34,7 +35,7 @@ diff --git a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap index d2655b3e..c08f86bb 100644 --- a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap +++ b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap @@ -3,9 +3,6 @@ exports[`JSONEditor > render table mode 1`] = `
- - -
@@ -456,17 +453,21 @@ exports[`JSONEditor > render table mode 1`] = `
+ + +
+ + + +
`; exports[`JSONEditor > render text mode 1`] = `
- - -
@@ -1021,15 +1022,16 @@ exports[`JSONEditor > render text mode 1`] = `
+ + + +
`; exports[`JSONEditor > render tree mode 1`] = `
- - -
@@ -2054,7 +2056,14 @@ exports[`JSONEditor > render tree mode 1`] = `
+ + +
+ + + +
`; diff --git a/src/lib/components/modals/CopyPasteModal.scss b/src/lib/components/modals/CopyPasteModal.scss index a0bddd6b..e1caaa1e 100644 --- a/src/lib/components/modals/CopyPasteModal.scss +++ b/src/lib/components/modals/CopyPasteModal.scss @@ -1,18 +1,19 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-copy-paste { - .jse-shortcuts { - display: flex; - flex-wrap: wrap; - justify-content: space-around; - margin: $padding-double 0; +.jse-modal-contents { + @include jse-modal-contents; +} + +.jse-shortcuts { + display: flex; + flex-wrap: wrap; + justify-content: space-around; + margin: $padding-double 0; - .jse-shortcut { - .jse-key { - font-size: 200%; - color: $theme-color; - } + .jse-shortcut { + .jse-key { + font-size: 200%; + color: $theme-color; } } } diff --git a/src/lib/components/modals/CopyPasteModal.svelte b/src/lib/components/modals/CopyPasteModal.svelte index 94f27193..ab996fe8 100644 --- a/src/lib/components/modals/CopyPasteModal.svelte +++ b/src/lib/components/modals/CopyPasteModal.svelte @@ -1,19 +1,17 @@ -
close()}> -
+ +
These actions are unavailable via the menu. Please use:
@@ -40,9 +38,9 @@
- +
-
+ diff --git a/src/lib/components/modals/Header.svelte b/src/lib/components/modals/Header.svelte index 010a8ba4..0045e1ca 100644 --- a/src/lib/components/modals/Header.svelte +++ b/src/lib/components/modals/Header.svelte @@ -1,21 +1,17 @@
@@ -33,17 +29,7 @@ {/if} -
diff --git a/src/lib/components/modals/JSONEditorModal.scss b/src/lib/components/modals/JSONEditorModal.scss index 53a21310..5c4e8b24 100644 --- a/src/lib/components/modals/JSONEditorModal.scss +++ b/src/lib/components/modals/JSONEditorModal.scss @@ -1,9 +1,14 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-jsoneditor-modal { +.jse-modal-wrapper { + flex: 1; + display: flex; + min-width: 0; + min-height: 0; + flex-direction: column; + .jse-modal-contents { - padding-top: 0; + @include jse-modal-contents; .jse-label { font-weight: bold; @@ -27,6 +32,7 @@ flex: 1; min-height: 150px; min-width: 0; + max-width: 100%; display: flex; --jse-theme-color: #{$modal-editor-theme-color}; diff --git a/src/lib/components/modals/JSONEditorModal.svelte b/src/lib/components/modals/JSONEditorModal.svelte index 5d79666b..624e5028 100644 --- a/src/lib/components/modals/JSONEditorModal.svelte +++ b/src/lib/components/modals/JSONEditorModal.svelte @@ -1,7 +1,7 @@ -
-
- -
-
-
Path
-
- - -
-
Contents
-
- -
- +
+ +
-
-
- {#if error} -
- {error} +
+
+
Path
+
+ + +
+
Contents
+
+ +
+ +
+ +
+ {#if error} +
+ {error} +
+ {/if} + + {#if stack.length > 1} + + {/if} + {#if !readOnly} + + {:else} + + {/if}
- {/if} - - {#if stack.length > 1} - - {/if} - {#if !readOnly} - - {:else} - - {/if} -
+
+
-
+ diff --git a/src/lib/components/modals/JSONRepairModal.scss b/src/lib/components/modals/JSONRepairModal.scss deleted file mode 100644 index 948a1c68..00000000 --- a/src/lib/components/modals/JSONRepairModal.scss +++ /dev/null @@ -1,5 +0,0 @@ -@import '../../styles'; - -.jse-modal.jse-repair { - @include jse-modal-style; -} diff --git a/src/lib/components/modals/JSONRepairModal.svelte b/src/lib/components/modals/JSONRepairModal.svelte index 147acb0d..08abd087 100644 --- a/src/lib/components/modals/JSONRepairModal.svelte +++ b/src/lib/components/modals/JSONRepairModal.svelte @@ -1,29 +1,26 @@ -
+ -
- - + diff --git a/src/lib/components/modals/Modal.scss b/src/lib/components/modals/Modal.scss deleted file mode 100644 index 8fd1a213..00000000 --- a/src/lib/components/modals/Modal.scss +++ /dev/null @@ -1,101 +0,0 @@ -@import '../../styles'; - -.jse-modal { - // styling for the select box, svelte-select - // see docs: https://github.com/rob-balfre/svelte-select#css-custom-properties-variables - :global(.svelte-select) { - --border: #{$svelte-select-border}; - --item-is-active-bg: #{$svelte-select-item-is-active-bg}; - --border-radius: #{$svelte-select-border-radius}; - --background: #{$svelte-select-background}; - --padding: #{$svelte-select-padding}; - --multi-select-padding: #{$svelte-select-multi-select-padding}; - --font-size: #{$svelte-select-font-size}; - --height: 36px; - --multi-item-height: 28px; - --multi-item-margin: 2px; - --multi-item-padding: 2px 8px; - --multi-item-border-radius: 6px; - --indicator-top: 8px; - } - - @include jse-modal-style; - - .jse-modal-contents { - flex: 1; - display: flex; - flex-direction: column; - padding: 20px; - overflow: auto; - min-width: 0; - min-height: 0; - - .jse-actions { - display: flex; - flex-direction: row; - justify-content: flex-end; - - padding-top: $padding; - - button { - &.jse-primary { - @include jsoneditor-button-primary; - } - } - } - } -} - -// custom styling for the modal. -:global(.bg.jse-modal-bg) { - width: 100%; - height: 100%; - top: 0; - left: 0; - background: $modal-overlay-background; -} - -:global(.bg.jse-modal-bg .jse-modal-window-wrap) { - margin: 0; - overflow: auto; -} - -:global(.bg.jse-modal-bg .jse-modal-window) { - max-width: 90%; - margin: 4rem auto 2rem auto; - border-radius: 2px; -} - -:global(.bg.jse-modal-bg .jse-modal-window.jse-modal-window-sort) { - width: 400px; -} - -:global(.bg.jse-modal-bg .jse-modal-window.jse-modal-window-transform) { - width: 1200px; - height: 1200px; - max-height: 80%; - display: flex; -} - -:global(.bg.jse-modal-bg .jse-modal-window.jse-modal-window-jsoneditor) { - width: 800px; - max-height: 500px; - display: flex; -} - -:global(.bg.jse-modal-bg .jse-modal-window:has(div.fullscreen)) { - margin: $padding; - padding: 0; - width: calc(100vw - 2 * $padding); - height: calc(100vh - 2 * $padding); - max-width: none; - max-height: none; -} - -:global(.bg.jse-modal-bg .jse-modal-container) { - flex: 1; - display: flex; - flex-direction: column; - padding: 0; - max-height: none; -} diff --git a/src/lib/components/modals/Modal.svelte b/src/lib/components/modals/Modal.svelte new file mode 100644 index 00000000..36682a9c --- /dev/null +++ b/src/lib/components/modals/Modal.svelte @@ -0,0 +1,126 @@ + + + + +
+ +
+
+ + diff --git a/src/lib/components/modals/ModalRef.svelte b/src/lib/components/modals/ModalRef.svelte deleted file mode 100644 index 866302b5..00000000 --- a/src/lib/components/modals/ModalRef.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - diff --git a/src/lib/components/modals/SortModal.scss b/src/lib/components/modals/SortModal.scss index d8174873..3e647918 100644 --- a/src/lib/components/modals/SortModal.scss +++ b/src/lib/components/modals/SortModal.scss @@ -1,50 +1,48 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-sort { - .jse-modal-contents { - } +.jse-modal-contents { + @include jse-modal-contents; +} - table { - width: 100%; - border-collapse: collapse; - border-spacing: 0; - - th, - td { - text-align: left; - vertical-align: middle; - font-weight: normal; - padding-bottom: $padding; - - input.jse-path { - width: 100%; - box-sizing: border-box; - padding: 6px 16px; // TODO: define variables for those props - border: $input-border; - border-radius: $input-radius; - font-family: inherit; - font-size: inherit; - background: inherit; - color: inherit; - outline: none; - - &:read-only { - background: $input-background-readonly; - } +table { + width: 100%; + border-collapse: collapse; + border-spacing: 0; + + th, + td { + text-align: left; + vertical-align: middle; + font-weight: normal; + padding-bottom: $padding; + + input.jse-path { + width: 100%; + box-sizing: border-box; + padding: 6px 16px; // TODO: define variables for those props + border: $input-border; + border-radius: $input-radius; + font-family: inherit; + font-size: inherit; + background: inherit; + color: inherit; + outline: none; + + &:read-only { + background: $input-background-readonly; } + } - :global(.svelte-select input) { - box-sizing: border-box; - } + :global(.svelte-select input) { + box-sizing: border-box; } } +} - .jse-space { - height: 200px; // Trick for the property select box dropdown to be fully visible +.jse-space { + height: 200px; // Trick for the property select box dropdown to be fully visible - .jse-error { - color: $error-color; - } + .jse-error { + color: $error-color; } } diff --git a/src/lib/components/modals/SortModal.svelte b/src/lib/components/modals/SortModal.svelte index 0a24e7d7..fc151fb4 100644 --- a/src/lib/components/modals/SortModal.svelte +++ b/src/lib/components/modals/SortModal.svelte @@ -2,19 +2,17 @@ -
-
+ +
@@ -94,7 +93,9 @@ type="text" readonly title="Selected path" - value={!isEmpty(rootPath) ? stringifyJSONPath(rootPath) : '(document root)'} + value={rootPath && !isEmpty(rootPath) + ? stringifyJSONPath(rootPath) + : '(document root)'} /> @@ -140,6 +141,6 @@ - + diff --git a/src/lib/components/modals/TransformModal.scss b/src/lib/components/modals/TransformModal.scss index c1fba5e7..b5255c43 100644 --- a/src/lib/components/modals/TransformModal.scss +++ b/src/lib/components/modals/TransformModal.scss @@ -1,158 +1,164 @@ @import '../../styles'; -@import 'Modal'; -.jse-modal.jse-transform { - .jse-modal-contents { - color: inherit; - min-height: 0; - padding: 0; +.jse-transform-modal-inner { + flex: 1; + display: flex; + flex-direction: column; + min-width: 0; + min-height: 0; +} - .jse-main-contents { - flex: 1; - display: flex; - gap: $padding-double; - min-height: 0; - box-sizing: border-box; +.jse-modal-contents { + @include jse-modal-contents; - padding: 0 $padding-double $padding; + color: inherit; + padding: 0; - .jse-query-contents { - flex: 1; - display: flex; - flex-direction: column; + .jse-main-contents { + flex: 1; + display: flex; + gap: $padding-double; + min-height: 0; + box-sizing: border-box; + + padding: 0 $padding-double $padding; - .jse-description { - :global(p) { - margin: $padding 0; + .jse-query-contents { + flex: 1; + display: flex; + flex-direction: column; - &:first-child { - margin-top: 0; - } + .jse-description { + :global(p) { + margin: $padding 0; - &:last-child { - margin-bottom: 0; - } + &:first-child { + margin-top: 0; } - :global(code) { - background: $modal-code-background; - font-family: $font-family-mono; - font-size: $font-size-mono; + &:last-child { + margin-bottom: 0; } } - textarea.jse-query { - flex: 1; - outline: none; - resize: vertical; // prevent resizing horizontally + :global(code) { + background: $modal-code-background; + font-family: $font-family-mono; + font-size: $font-size-mono; } } - .jse-data-contents { + textarea.jse-query { + flex: 1; + outline: none; + resize: vertical; // prevent resizing horizontally + } + } + + .jse-data-contents { + flex: 1; + display: flex; + flex-direction: column; + gap: $padding-double; + + .jse-original-data { flex: 1; display: flex; flex-direction: column; - gap: $padding-double; + min-height: 0; + box-sizing: border-box; - .jse-original-data { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - box-sizing: border-box; - - &.jse-hide { - flex: none; - } + &.jse-hide { + flex: none; } + } - .jse-preview-data { - flex: 1; - display: flex; - flex-direction: column; - min-height: 0; - box-sizing: border-box; - } + .jse-preview-data { + flex: 1; + display: flex; + flex-direction: column; + min-height: 0; + box-sizing: border-box; + } - &.jse-hide-original-data { - flex-direction: column; - gap: 0; - margin-bottom: 0; - } + &.jse-hide-original-data { + flex-direction: column; + gap: 0; + margin-bottom: 0; } } + } - .jse-actions { - padding: $padding $padding-double $padding-double; - } + .jse-actions { + padding: $padding $padding-double $padding-double; + } - @media screen and (max-width: 1200px) { - .jse-main-contents { - flex-direction: column; - overflow: auto; + @media screen and (max-width: 1200px) { + .jse-main-contents { + flex-direction: column; + overflow: auto; - .jse-query-contents { - textarea.jse-query { - min-height: 150px; - flex: none; - } + .jse-query-contents { + textarea.jse-query { + min-height: 150px; + flex: none; } + } - .jse-data-contents { - :global(.jse-tree-mode) { - height: 300px; - flex: none; - } + .jse-data-contents { + :global(.jse-tree-mode) { + height: 300px; + flex: none; } } } } +} - .jse-label { - font-weight: bold; - display: block; - box-sizing: border-box; +.jse-label { + font-weight: bold; + display: block; + box-sizing: border-box; - .jse-label-inner { - margin-top: $padding-double; - margin-bottom: $padding-half; - box-sizing: border-box; + .jse-label-inner { + margin-top: $padding-double; + margin-bottom: $padding-half; + box-sizing: border-box; - button { - @include jsoneditor-button; - font-weight: bold; - padding: 0; - } + button { + @include jsoneditor-button; + font-weight: bold; + padding: 0; } } +} - :global(.jse-tree-mode) { - flex: 1; - background: $input-background-readonly; - box-shadow: none; - box-sizing: border-box; +:global(.jse-tree-mode) { + flex: 1; + background: $input-background-readonly; + box-shadow: none; + box-sizing: border-box; - --jse-main-border: #{$input-border}; - } + --jse-main-border: #{$input-border}; +} - input, - textarea { - @include modal-input-mixin; - } +input, +textarea { + @include modal-input-mixin; +} - .jse-preview.jse-error { - flex: 1; - background: $input-background-readonly; - border: $input-border; - color: $error-color; - padding: $padding-half; - } +.jse-preview.jse-error { + flex: 1; + background: $input-background-readonly; + border: $input-border; + color: $error-color; + padding: $padding-half; +} - :global(a) { - color: $a-color; - } +:global(a) { + color: $a-color; +} - :global(a:hover) { - color: $a-color-highlight; - } +:global(a:hover) { + color: $a-color-highlight; } diff --git a/src/lib/components/modals/TransformModal.svelte b/src/lib/components/modals/TransformModal.svelte index be755792..bf155419 100644 --- a/src/lib/components/modals/TransformModal.svelte +++ b/src/lib/components/modals/TransformModal.svelte @@ -1,13 +1,12 @@ -
- - -
-
-
-
-
Language
-
-
- - {@html getSelectedQueryLanguage(queryLanguageId).description} -
+ +
+ + +
+
+
+
+
Language
+
+
+ + {@html getSelectedQueryLanguage(queryLanguageId).description} +
-
-
Path
-
- - -
-
- +
+
Path
-
- {#if showWizard} - {#if Array.isArray(selectedJson)} - - {:else} - (Only available for arrays, not for objects) - {/if} - {/if} + -
-
Query
-
- -
-
-
-
- {#if showOriginal} - + {#if showWizard} + {#if Array.isArray(selectedJson)} + + {:else} + (Only available for arrays, not for objects) + {/if} {/if} -
-
+
-
Preview
+
Query
- {#if !previewError} - - {:else} -
- {previewError} + +
+
+
+
+
+ +
- {/if} + {#if showOriginal} + + {/if} +
+
+
+
Preview
+
+ {#if !previewError} + + {:else} +
+ {previewError} +
+ {/if} +
-
-
- +
+ +
-
- -
+ +
+ diff --git a/src/lib/components/modals/TransformModalHeader.svelte b/src/lib/components/modals/TransformModalHeader.svelte index eedc4d3d..2bd0d947 100644 --- a/src/lib/components/modals/TransformModalHeader.svelte +++ b/src/lib/components/modals/TransformModalHeader.svelte @@ -6,18 +6,17 @@ import { faCog } from '@fortawesome/free-solid-svg-icons' import SelectQueryLanguage from '../controls/selectQueryLanguage/SelectQueryLanguage.svelte' import type { AbsolutePopupContext, OnChangeQueryLanguage, QueryLanguage } from '$lib/types.js' - import type { Context } from 'svelte-simple-modal' import Header from './Header.svelte' export let queryLanguages: QueryLanguage[] export let queryLanguageId: string - export let onChangeQueryLanguage: OnChangeQueryLanguage export let fullscreen: boolean + export let onChangeQueryLanguage: OnChangeQueryLanguage + export let onClose: () => void let refConfigButton: HTMLButtonElement | undefined let popupId: number | undefined - const { close } = getContext('simple-modal') const { openAbsolutePopup, closeAbsolutePopup } = getContext('absolute-popup') @@ -40,7 +39,7 @@ } -
+
+{#if copyPasteModalOpen} + (copyPasteModalOpen = false)} /> +{/if} + +{#if jsonRepairModalProps} + { + jsonRepairModalProps?.onClose() + jsonRepairModalProps = undefined + }} + /> +{/if} + diff --git a/src/lib/components/modes/tablemode/menu/TableMenu.svelte b/src/lib/components/modes/tablemode/menu/TableMenu.svelte index 5d697e6b..2143e024 100644 --- a/src/lib/components/modes/tablemode/menu/TableMenu.svelte +++ b/src/lib/components/modes/tablemode/menu/TableMenu.svelte @@ -93,7 +93,7 @@ ] let items: MenuItem[] - $: items = onRenderMenu(defaultItems) + $: items = onRenderMenu(defaultItems) || defaultItems diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index 1f5ca4a7..fcaa5bb7 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -20,8 +20,7 @@ CONTEXT_MENU_HEIGHT, CONTEXT_MENU_WIDTH, SCROLL_DURATION, - SEARCH_BOX_HEIGHT, - SIMPLE_MODAL_OPTIONS + SEARCH_BOX_HEIGHT } from '$lib/constants.js' import { collapsePath, @@ -117,6 +116,7 @@ JSONParser, JSONPatchResult, JSONPathParser, + JSONRepairModalProps, JSONSelection, OnBlur, OnChange, @@ -156,7 +156,6 @@ onRemove } from '$lib/logic/actions.js' import JSONPreview from '../../controls/JSONPreview.svelte' - import type { Context } from 'svelte-simple-modal' import ContextMenu from '../../controls/contextmenu/ContextMenu.svelte' import createTreeContextMenuItems from './contextmenu/createTreeContextMenuItems' import { toRecursiveSearchResults as toRecursiveSearchResults } from 'svelte-jsoneditor/logic/search.js' @@ -166,7 +165,6 @@ const isSSR = typeof window === 'undefined' debug('isSSR:', isSSR) - const { open } = getContext('simple-modal') const sortModalId = uniqueId() const transformModalId = uniqueId() @@ -209,6 +207,8 @@ // modalOpen is true when one of the modals is open. // This is used to track whether the editor still has focus let modalOpen = false + let copyPasteModalOpen = false + let jsonRepairModalProps: JSONRepairModalProps | undefined = undefined createFocusTracker({ onMount, @@ -643,14 +643,12 @@ } }) - const patchResult = { + return { json, previousJson, undo, redo: operations } - - return patchResult } // TODO: cleanup logging @@ -762,45 +760,17 @@ } function handlePasteFromMenu() { - open( - CopyPasteModal, - {}, - { - ...SIMPLE_MODAL_OPTIONS, - styleWindow: { - width: '450px' - } - }, - { - onClose: () => focus() - } - ) + copyPasteModalOpen = true } function openRepairModal(text: string, onApply: (repairedText: string) => void) { - open( - JSONRepairModal, - { - text, - onParse: (text: string) => parsePartialJson(text, (t) => parseAndRepair(t, parser)), - onRepair: repairPartialJson, - onApply - }, - { - ...SIMPLE_MODAL_OPTIONS, - styleWindow: { - width: '600px', - height: '500px' - }, - styleContent: { - padding: 0, - height: '100%' - } - }, - { - onClose: () => focus() - } - ) + jsonRepairModalProps = { + text, + onParse: (text) => parsePartialJson(text, (t) => parseAndRepair(t, parser)), + onRepair: repairPartialJson, + onApply, + onClose: focus + } } function handleRemove() { @@ -1089,7 +1059,7 @@ }, onClose: () => { modalOpen = false - focus() + setTimeout(focus) } }) } @@ -1144,7 +1114,7 @@ }, onClose: () => { modalOpen = false - focus() + setTimeout(focus) if (onClose) { onClose() } @@ -1183,7 +1153,7 @@ onPatch: context.onPatch, onClose: () => { modalOpen = false - focus() + setTimeout(focus) } }) } @@ -2056,4 +2026,18 @@ {/if}
+{#if copyPasteModalOpen} + (copyPasteModalOpen = false)} /> +{/if} + +{#if jsonRepairModalProps} + { + jsonRepairModalProps?.onClose() + jsonRepairModalProps = undefined + }} + /> +{/if} + diff --git a/src/lib/components/modes/treemode/menu/TreeMenu.svelte b/src/lib/components/modes/treemode/menu/TreeMenu.svelte index a07966c3..5324a39d 100644 --- a/src/lib/components/modes/treemode/menu/TreeMenu.svelte +++ b/src/lib/components/modes/treemode/menu/TreeMenu.svelte @@ -152,7 +152,7 @@ } ] - $: items = onRenderMenu(defaultItems) + $: items = onRenderMenu(defaultItems) || defaultItems diff --git a/src/lib/constants.ts b/src/lib/constants.ts index a6d3673f..e6102fdf 100644 --- a/src/lib/constants.ts +++ b/src/lib/constants.ts @@ -20,29 +20,6 @@ export const MAX_AUTO_REPAIRABLE_SIZE = 1024 * 1024 // 1 MB export const MAX_DOCUMENT_SIZE_TEXT_MODE = 10 * 1024 * 1024 // 10 MB export const MAX_DOCUMENT_SIZE_EXPAND_ALL = 10 * 1024 // 10 KB -export const SIMPLE_MODAL_OPTIONS = { - closeButton: false, - classBg: 'jse-modal-bg', - classWindow: 'jse-modal-window', - classWindowWrap: 'jse-modal-window-wrap', - classContent: 'jse-modal-container' -} - -export const SORT_MODAL_OPTIONS = { - ...SIMPLE_MODAL_OPTIONS, - classWindow: 'jse-modal-window jse-modal-window-sort' -} - -export const TRANSFORM_MODAL_OPTIONS = { - ...SIMPLE_MODAL_OPTIONS, - classWindow: 'jse-modal-window jse-modal-window-transform' -} - -export const JSONEDITOR_MODAL_OPTIONS = { - ...SIMPLE_MODAL_OPTIONS, - classWindow: 'jse-modal-window jse-modal-window-jsoneditor' -} - export const INSERT_EXPLANATION = 'Insert or paste contents, ' + 'enter [ insert a new array, ' + diff --git a/src/lib/logic/documentState.test.ts b/src/lib/logic/documentState.test.ts index 0d6b90de..a3b840a8 100644 --- a/src/lib/logic/documentState.test.ts +++ b/src/lib/logic/documentState.test.ts @@ -1400,6 +1400,17 @@ describe('documentState', () => { }) }) + test('move: should extract an array item', () => { + const json = [{ id: 0 }, { id: 1 }, { id: 2 }] + const documentState = createDocumentState({ json, expand: () => true }) + + const res = documentStatePatch(json, documentState, [{ op: 'move', from: '/1', path: '' }]) + + assert.deepStrictEqual(res.json, { id: 1 }) + + assert.deepStrictEqual(res.state, { type: 'object', expanded: true, properties: {} }) + }) + describe('shiftVisibleSections', () => { const json = [1, 2, 3, 4, 5, 6, 7, 8] const visibleSections: VisibleSection[] = [ diff --git a/src/lib/logic/documentState.ts b/src/lib/logic/documentState.ts index b07e9c58..e0d5211a 100644 --- a/src/lib/logic/documentState.ts +++ b/src/lib/logic/documentState.ts @@ -454,27 +454,28 @@ export function documentStatePatch( documentState: DocumentState | undefined, operations: JSONPatchDocument ): { json: unknown; state: DocumentState | undefined } { + // FIXME: rewrite to apply one operation at a time (both updatedJson and updatedDocumentState const updatedJson: unknown = immutableJSONPatch(json, operations) - const updatedDocumentState = operations.reduce((updatingState, operation) => { + const updatedDocumentState = operations.reduce((updatedState, operation) => { if (isJSONPatchAdd(operation)) { - return documentStateAdd(updatedJson, updatingState, operation, undefined) + return documentStateAdd(json, updatedState, operation, undefined) } if (isJSONPatchRemove(operation)) { - return documentStateRemove(updatedJson, updatingState, operation) + return documentStateRemove(json, updatedState, operation) } if (isJSONPatchReplace(operation)) { // nothing special to do (all is handled by syncDocumentState) - return updatingState + return updatedState } if (isJSONPatchCopy(operation) || isJSONPatchMove(operation)) { - return documentStateMoveOrCopy(updatedJson, updatingState, operation) + return documentStateMoveOrCopy(json, updatedState, operation) } - return updatingState + return updatedState }, documentState) return { diff --git a/src/lib/styles.scss b/src/lib/styles.scss index 57b3db64..6dbda47c 100644 --- a/src/lib/styles.scss +++ b/src/lib/styles.scss @@ -148,6 +148,7 @@ $errors-overview-max-height: 25%; flex-direction: column; min-width: 0; min-height: 0; + padding: 0; font-family: $font-family; font-size: $font-size; @@ -155,3 +156,27 @@ $errors-overview-max-height: 25%; background: $modal-background; color: $text-color; } + +@mixin jse-modal-contents { + flex: 1; + display: flex; + flex-direction: column; + padding: 20px; + overflow: auto; + min-width: 0; + min-height: 0; + + .jse-actions { + display: flex; + flex-direction: row; + justify-content: flex-end; + + padding-top: $padding; + + button { + &.jse-primary { + @include jsoneditor-button-primary; + } + } + } +} diff --git a/src/lib/types.ts b/src/lib/types.ts index f88b704b..876d4723 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -395,7 +395,7 @@ export type RenderMenuContext = { readOnly: boolean } export type OnRenderMenu = (items: MenuItem[], context: RenderMenuContext) => MenuItem[] | undefined -export type OnRenderMenuInternal = (items: MenuItem[]) => MenuItem[] +export type OnRenderMenuInternal = (items: MenuItem[]) => MenuItem[] | undefined export type RenderContextMenuContext = RenderMenuContext & { selection: JSONEditorSelection | undefined } @@ -403,7 +403,9 @@ export type OnRenderContextMenu = ( items: ContextMenuItem[], context: RenderContextMenuContext ) => ContextMenuItem[] | false | undefined -export type OnRenderContextMenuInternal = (items: ContextMenuItem[]) => ContextMenuItem[] | false +export type OnRenderContextMenuInternal = ( + items: ContextMenuItem[] +) => ContextMenuItem[] | false | undefined export type OnError = (error: Error) => void export type OnFocus = () => void export type OnBlur = () => void @@ -559,6 +561,35 @@ export interface JSONEditorPropsOptional { onBlur?: OnBlur } +export interface JSONEditorModalProps { + content: Content + path: JSONPath + onPatch: OnPatch + + readOnly: boolean + indentation: number | string + tabSize: number + mainMenuBar: boolean + navigationBar: boolean + statusBar: boolean + askToFormat: boolean + escapeControlCharacters: boolean + escapeUnicodeCharacters: boolean + flattenColumns: boolean + parser: JSONParser + validator: Validator | undefined + validationParser: JSONParser + pathParser: JSONPathParser + + onRenderValue: OnRenderValue + onClassName: OnClassName + onRenderMenu: OnRenderMenu + onRenderContextMenu: OnRenderContextMenu + onSortModal: (props: SortModalCallback) => void + onTransformModal: (props: TransformModalCallback) => void + onClose: () => void +} + export interface JSONEditorContext { readOnly: boolean parser: JSONParser @@ -645,8 +676,33 @@ export interface TransformModalOptions { export interface TransformModalCallback { id: string + json: unknown rootPath: JSONPath + onTransform: (operations: JSONPatchDocument) => void + onClose: () => void +} + +export interface TransformModalProps extends TransformModalCallback { + id: string json: unknown + rootPath: JSONPath + indentation: number | string + escapeControlCharacters: boolean + escapeUnicodeCharacters: boolean + parser: JSONParser + parseMemoizeOne: JSONParser['parse'] + validationParser: JSONParser + pathParser: JSONPathParser + + queryLanguages: QueryLanguage[] + queryLanguageId: string + onChangeQueryLanguage: OnChangeQueryLanguage + + onRenderValue: OnRenderValue + onRenderMenu: OnRenderMenuInternal + onRenderContextMenu: OnRenderContextMenuInternal + onClassName: OnClassName + onTransform: (operations: JSONPatchDocument) => void onClose: () => void } @@ -659,6 +715,14 @@ export interface SortModalCallback { onClose: () => void } +export interface JSONRepairModalProps { + text: string + onParse: (text: string) => void + onRepair: (text: string) => string + onApply: (repairedText: string) => void + onClose: () => void +} + export interface JSONEditorModalCallback { content: Content path: JSONPath diff --git a/src/lib/utils/navigatorUtils.ts b/src/lib/utils/navigatorUtils.ts index b0ef6577..e3bc4c4e 100644 --- a/src/lib/utils/navigatorUtils.ts +++ b/src/lib/utils/navigatorUtils.ts @@ -10,8 +10,9 @@ declare global { export function isMac() { return ( - navigator?.platform?.toUpperCase().includes('MAC') ?? - navigator?.userAgentData?.platform?.toUpperCase().includes('MAC') ?? - false + typeof navigator !== 'undefined' && + (navigator?.platform?.toUpperCase().includes('MAC') ?? + navigator?.userAgentData?.platform?.toUpperCase().includes('MAC') ?? + false) ) } From a342c08a9ac770419a4966484daa622afcb552ca Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Fri, 12 Jul 2024 09:34:51 +0200 Subject: [PATCH 48/93] chore: solve merge conflict --- src/lib/logic/documentState.test.ts | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/src/lib/logic/documentState.test.ts b/src/lib/logic/documentState.test.ts index ded14bcc..e71243aa 100644 --- a/src/lib/logic/documentState.test.ts +++ b/src/lib/logic/documentState.test.ts @@ -1457,17 +1457,6 @@ describe('documentState', () => { assert.deepStrictEqual(res.documentState, { type: 'object', expanded: true, properties: {} }) }) - test('move: should extract an array item', () => { - const json = [{ id: 0 }, { id: 1 }, { id: 2 }] - const documentState = createDocumentState({ json, expand: () => true }) - - const res = documentStatePatch(json, documentState, [{ op: 'move', from: '/1', path: '' }]) - - assert.deepStrictEqual(res.json, { id: 1 }) - - assert.deepStrictEqual(res.state, { type: 'object', expanded: true, properties: {} }) - }) - describe('shiftVisibleSections', () => { const json = [1, 2, 3, 4, 5, 6, 7, 8] const visibleSections: VisibleSection[] = [ From b08b1f61ac678d813e352368493bc28d1c0e9283 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Fri, 12 Jul 2024 09:42:24 +0200 Subject: [PATCH 49/93] chore: cleanup a resolved FIXME --- src/lib/logic/documentState.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/lib/logic/documentState.ts b/src/lib/logic/documentState.ts index 12f8f4c4..81ef91ee 100644 --- a/src/lib/logic/documentState.ts +++ b/src/lib/logic/documentState.ts @@ -455,7 +455,6 @@ export function documentStatePatch( documentState: DocumentState | undefined, operations: JSONPatchDocument ): { json: unknown; documentState: DocumentState | undefined } { - // FIXME: rewrite to apply one operation at a time (both updatedJson and updatedDocumentState const initial = { json, documentState } const result = operations.reduce((current, operation) => { From 2c9a6115b49ddb0ac54a301268eb46d233acb4db Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 15 Jul 2024 09:56:44 +0200 Subject: [PATCH 50/93] chore: update devDependencies --- package-lock.json | 1202 +++++++++++++++++++-------------------------- package.json | 26 +- vitest.config.js | 4 - 3 files changed, 532 insertions(+), 700 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdfcd588..8ecdb5b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@lezer/highlight": "^1.2.0", "@replit/codemirror-indentation-markers": "^6.5.2", - "ajv": "^8.16.0", + "ajv": "^8.17.1", "codemirror-wrapped-line-indent": "^1.0.8", "diff-sequences": "^29.6.3", "immutable-json-patch": "6.0.1", @@ -31,14 +31,14 @@ "lodash-es": "^4.17.21", "memoize-one": "^6.0.0", "natural-compare-lite": "^1.4.0", - "sass": "^1.77.6", + "sass": "^1.77.8", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", "vanilla-picker": "^2.12.3" }, "devDependencies": { - "@babel/core": "7.24.7", - "@babel/preset-env": "7.24.7", + "@babel/core": "7.24.8", + "@babel/preset-env": "7.24.8", "@commitlint/cli": "19.3.0", "@commitlint/config-conventional": "19.2.2", "@rollup/plugin-babel": "6.0.4", @@ -56,34 +56,34 @@ "@types/cookie": "0.6.0", "@types/jmespath": "0.15.2", "@types/lodash-es": "4.17.12", - "@typescript-eslint/eslint-plugin": "7.15.0", - "@typescript-eslint/parser": "7.15.0", - "@vitest/coverage-v8": "1.6.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "@vitest/coverage-v8": "2.0.2", "cpy-cli": "5.0.0", "del-cli": "5.1.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-svelte": "2.41.0", + "eslint-plugin-svelte": "2.42.0", "husky": "9.0.11", "jsdom": "24.1.0", "lossless-json": "4.0.1", "npm-run-all": "4.1.5", - "prettier": "3.3.2", + "prettier": "3.3.3", "prettier-plugin-svelte": "3.2.5", - "rollup": "4.18.0", + "rollup": "4.18.1", "rollup-plugin-dts": "6.1.1", "rollup-plugin-svelte": "7.2.2", "standard-version": "9.5.0", - "svelte": "^4.2.18", + "svelte": "5.0.0-next.175", "svelte-check": "3.8.4", - "svelte-preprocess": "6.0.1", + "svelte-preprocess": "6.0.2", "typescript": "5.5.3", "vite": "5.3.3", - "vitest": "1.6.0" + "vitest": "2.0.2" }, "peerDependencies": { - "svelte": "^4.0.0" + "svelte": "^4.0.0 || ^5.0.0" } }, "node_modules/@adobe/css-tools": { @@ -118,30 +118,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.8.tgz", + "integrity": "sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.8.tgz", + "integrity": "sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -157,12 +159,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.8.tgz", + "integrity": "sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.24.8", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -197,14 +200,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -332,10 +336,11 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz", + "integrity": "sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", @@ -363,10 +368,11 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -444,10 +450,11 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -462,10 +469,11 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -486,13 +494,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -514,10 +523,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -950,16 +960,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", - "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", + "integrity": "sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" @@ -988,12 +999,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", - "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1193,13 +1205,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", - "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-simple-access": "^7.24.7" }, "engines": { @@ -1357,12 +1370,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", - "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1530,12 +1544,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", - "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1608,15 +1623,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.8.tgz", + "integrity": "sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", + "@babel/compat-data": "^7.24.8", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", @@ -1647,9 +1663,9 @@ "@babel/plugin-transform-block-scoping": "^7.24.7", "@babel/plugin-transform-class-properties": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.8", "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7", "@babel/plugin-transform-dynamic-import": "^7.24.7", @@ -1662,7 +1678,7 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-modules-systemjs": "^7.24.7", "@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", @@ -1672,7 +1688,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-object-super": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", @@ -1683,7 +1699,7 @@ "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", @@ -1692,7 +1708,7 @@ "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -1749,19 +1765,20 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", + "@babel/generator": "^7.24.8", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", "@babel/helper-hoist-variables": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1770,12 +1787,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.8.tgz", + "integrity": "sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -2816,22 +2834,11 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -3144,219 +3151,229 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", + "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", + "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", + "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", + "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", + "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", + "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", + "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", + "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", + "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", + "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", + "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", + "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", + "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", + "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", + "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", + "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", @@ -3479,6 +3496,19 @@ "vite": "^5.0.0" } }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/svelte-hmr": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", + "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, "node_modules/@testing-library/dom": { "version": "10.3.1", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.3.1.tgz", @@ -3798,16 +3828,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", - "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz", + "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/type-utils": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/type-utils": "7.16.0", + "@typescript-eslint/utils": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3831,15 +3862,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4" }, "engines": { @@ -3859,13 +3891,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", + "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0" + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3876,13 +3909,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz", + "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/utils": "7.15.0", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/utils": "7.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3903,10 +3937,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", + "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -3916,13 +3951,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", + "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3948,6 +3984,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3956,15 +3993,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", + "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0" + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3978,12 +4016,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", + "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/types": "7.16.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4001,189 +4040,130 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz", - "integrity": "sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.2.tgz", + "integrity": "sha512-iA8eb4PMid3bMc++gfQSTvYE1QL//fC8pz+rKsTUDBFjdDiy/gH45hvpqyDu5K7FHhvgG0GNNCJzTMMSFKhoxg==", "dev": true, + "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.1", + "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.4", + "debug": "^4.3.5", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.4", - "istanbul-reports": "^3.1.6", - "magic-string": "^0.30.5", - "magicast": "^0.3.3", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "test-exclude": "^6.0.0" + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.10", + "magicast": "^0.3.4", + "std-env": "^3.7.0", + "strip-literal": "^2.1.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "1.6.0" + "vitest": "2.0.2" } }, "node_modules/@vitest/expect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", - "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.2.tgz", + "integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "chai": "^4.3.10" + "@vitest/spy": "2.0.2", + "@vitest/utils": "2.0.2", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", - "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", + "node_modules/@vitest/pretty-format": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.2.tgz", + "integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "1.6.0", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "node_modules/@vitest/runner": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.2.tgz", + "integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": ">=18" + "@vitest/utils": "2.0.2", + "pathe": "^1.1.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", - "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.2.tgz", + "integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==", "dev": true, + "license": "MIT", "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "@vitest/pretty-format": "2.0.2", + "magic-string": "^0.30.10", + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vitest/snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/@vitest/spy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", - "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.2.tgz", + "integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==", "dev": true, + "license": "MIT", "dependencies": { - "tinyspy": "^2.2.0" + "tinyspy": "^3.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", - "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.2.tgz", + "integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==", "dev": true, + "license": "MIT", "dependencies": { - "diff-sequences": "^29.6.3", + "@vitest/pretty-format": "2.0.2", "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@vitest/utils/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, - "node_modules/@vitest/utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -4204,16 +4184,13 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "license": "MIT", + "peerDependencies": { + "acorn": ">=8.9.0" } }, "node_modules/add-stream": { @@ -4263,14 +4240,15 @@ } }, "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4371,6 +4349,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4466,12 +4445,13 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/asynckit": { @@ -4643,6 +4623,7 @@ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4722,21 +4703,20 @@ ] }, "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", "dev": true, + "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { @@ -4754,15 +4734,13 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -4899,26 +4877,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, - "node_modules/code-red/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/codemirror-wrapped-line-indent": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/codemirror-wrapped-line-indent/-/codemirror-wrapped-line-indent-1.0.8.tgz", @@ -4999,12 +4957,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", - "dev": true - }, "node_modules/conventional-changelog": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", @@ -6331,18 +6283,6 @@ "node": ">= 8" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -6528,13 +6468,11 @@ "dev": true }, "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=6" } @@ -7639,10 +7577,11 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "2.41.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.41.0.tgz", - "integrity": "sha512-gjU9Q/psxbWG1VNwYbEb0Q6U4W5PBGaDpYmO2zlQ+zlAMVS3Qt0luAK0ACi/tMSwRK6JENiySvMyJbO0YWmXSg==", + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.42.0.tgz", + "integrity": "sha512-mHP6z0DWq97KZvoQcApZHdF9m9epcDV/ICKufeEH18Vh+8vl7S+gwt8WdUohEqKNVMuXRkbvy1suMcVvUDiOGw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -7654,7 +7593,7 @@ "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.1.0", "semver": "^7.6.2", - "svelte-eslint-parser": "^0.39.2" + "svelte-eslint-parser": "^0.40.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" @@ -7664,7 +7603,7 @@ }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.155" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.181" }, "peerDependenciesMeta": { "svelte": { @@ -7684,6 +7623,34 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-svelte/node_modules/svelte-eslint-parser": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.40.0.tgz", + "integrity": "sha512-M+v1HhC5T1WKYVxWexUCS4o6oIBS88XKzOZuhl2ew+eGxol7eC21e+VE8TC4rXJ3iT3iXT0qlZsZcpKjVo5/zQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "postcss": "^8.4.39", + "postcss-scss": "^4.0.9" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.181" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, "node_modules/eslint-scope": { "version": "7.2.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", @@ -7959,8 +7926,7 @@ "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" }, "node_modules/espree": { "version": "9.6.1", @@ -7991,6 +7957,16 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -8083,6 +8059,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "license": "MIT" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -8284,6 +8266,7 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -8934,6 +8917,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -8954,6 +8938,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10042,22 +10027,6 @@ "node": ">=4" } }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dev": true, - "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", @@ -10162,10 +10131,11 @@ "dev": true }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } @@ -10255,11 +10225,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, "node_modules/memoize-one": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz", @@ -10424,18 +10389,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", - "dev": true, - "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -11074,41 +11027,17 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/periscopic/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/periscopic/node_modules/is-reference": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", - "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", - "dependencies": { - "@types/estree": "*" + "node": ">= 14.16" } }, "node_modules/picocolors": { @@ -11149,17 +11078,6 @@ "node": ">=4" } }, - "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", - "dev": true, - "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -11261,6 +11179,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -11291,10 +11210,11 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -11357,6 +11277,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -11783,10 +11704,11 @@ } }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz", + "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -11798,22 +11720,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.18.1", + "@rollup/rollup-android-arm64": "4.18.1", + "@rollup/rollup-darwin-arm64": "4.18.1", + "@rollup/rollup-darwin-x64": "4.18.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", + "@rollup/rollup-linux-arm-musleabihf": "4.18.1", + "@rollup/rollup-linux-arm64-gnu": "4.18.1", + "@rollup/rollup-linux-arm64-musl": "4.18.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", + "@rollup/rollup-linux-riscv64-gnu": "4.18.1", + "@rollup/rollup-linux-s390x-gnu": "4.18.1", + "@rollup/rollup-linux-x64-gnu": "4.18.1", + "@rollup/rollup-linux-x64-musl": "4.18.1", + "@rollup/rollup-win32-arm64-msvc": "4.18.1", + "@rollup/rollup-win32-ia32-msvc": "4.18.1", + "@rollup/rollup-win32-x64-msvc": "4.18.1", "fsevents": "~2.3.2" } }, @@ -12040,9 +11962,10 @@ } }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12838,27 +12761,27 @@ } }, "node_modules/svelte": { - "version": "4.2.18", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.18.tgz", - "integrity": "sha512-d0FdzYIiAePqRJEb90WlJDkjUEx42xhivxN8muUBmfZnP+tzUgz12DJ2hRJi8sIHCME7jeK1PTMgKPSfTd8JrA==", + "version": "5.0.0-next.175", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.175.tgz", + "integrity": "sha512-fWMI0O3PiKFWvTohAEJRkd6RymR3uo7PO8GrNfyx57KDvmmK1KYRzAdHjx+RsKl8oZhfWeJHiot6iebgY8lJng==", + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", + "@types/estree": "^1.0.5", + "acorn": "^8.11.3", + "acorn-typescript": "^1.4.13", "aria-query": "^5.3.0", "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "magic-string": "^0.30.5", + "zimmerframe": "^1.1.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/svelte-awesome": { @@ -12951,33 +12874,6 @@ } } }, - "node_modules/svelte-eslint-parser": { - "version": "0.39.2", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.39.2.tgz", - "integrity": "sha512-87UwLuWTtDIuzWOhOi1zBL5wYVd07M5BK1qZ57YmXJB5/UmjUNJqGy3XSOhPqjckY1dATNV9y+mx+nI0WH6HPA==", - "dev": true, - "dependencies": { - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "postcss": "^8.4.38", - "postcss-scss": "^4.0.9" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.115" - }, - "peerDependenciesMeta": { - "svelte": { - "optional": true - } - } - }, "node_modules/svelte-floating-ui": { "version": "1.5.8", "resolved": "https://registry.npmjs.org/svelte-floating-ui/-/svelte-floating-ui-1.5.8.tgz", @@ -12987,28 +12883,13 @@ "@floating-ui/dom": "^1.5.3" } }, - "node_modules/svelte-hmr": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", - "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", - "dev": true, - "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" - }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0" - } - }, "node_modules/svelte-preprocess": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.1.tgz", - "integrity": "sha512-vNgXoyqWwahdpEX9XbQHcAHt41TkXnf8bRDxT5PjISHbZD1dVH4b2OsJ2fVQTBb3qP05x0GuYE9iS5vhD+Dniw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.2.tgz", + "integrity": "sha512-OvDTLfaOkkhjprbDKO0SOCkjNYuHy16dbD4SpqbIi6QiabOMHxRT4km5/dzbFFkmW1L0E2INF3MFltG2pgOyKQ==", "dev": true, "hasInstallScript": true, - "dependencies": { - "detect-indent": "^6.1.0", - "strip-indent": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">= 18.0.0" }, @@ -13066,14 +12947,6 @@ "svelte-floating-ui": "1.5.8" } }, - "node_modules/svelte/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, "node_modules/svelte/node_modules/is-reference": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", @@ -13121,60 +12994,18 @@ } }, "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "engines": { - "node": "*" + "node": ">=18" } }, "node_modules/text-extensions": { @@ -13227,19 +13058,31 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", - "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", + "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", + "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -13363,15 +13206,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -13476,12 +13310,6 @@ "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", - "dev": true - }, "node_modules/uglify-js": { "version": "3.18.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", @@ -13611,6 +13439,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -13705,15 +13534,16 @@ } }, "node_modules/vite-node": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", - "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.2.tgz", + "integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==", "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", + "debug": "^4.3.5", + "pathe": "^1.1.2", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -13741,30 +13571,30 @@ } }, "node_modules/vitest": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", - "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", - "dev": true, - "dependencies": { - "@vitest/expect": "1.6.0", - "@vitest/runner": "1.6.0", - "@vitest/snapshot": "1.6.0", - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "acorn-walk": "^8.3.2", - "chai": "^4.3.10", - "debug": "^4.3.4", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.2.tgz", + "integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@vitest/expect": "2.0.2", + "@vitest/pretty-format": "^2.0.2", + "@vitest/runner": "2.0.2", + "@vitest/snapshot": "2.0.2", + "@vitest/spy": "2.0.2", + "@vitest/utils": "2.0.2", + "chai": "^5.1.1", + "debug": "^4.3.5", "execa": "^8.0.1", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "tinybench": "^2.5.1", - "tinypool": "^0.8.3", + "magic-string": "^0.30.10", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.8.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "1.6.0", + "vite-node": "2.0.2", "why-is-node-running": "^2.2.2" }, "bin": { @@ -13779,8 +13609,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.6.0", - "@vitest/ui": "1.6.0", + "@vitest/browser": "2.0.2", + "@vitest/ui": "2.0.2", "happy-dom": "*", "jsdom": "*" }, @@ -14206,6 +14036,12 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "license": "MIT" } } } diff --git a/package.json b/package.json index 5bc13af6..2e36ae7c 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@lezer/highlight": "^1.2.0", "@replit/codemirror-indentation-markers": "^6.5.2", - "ajv": "^8.16.0", + "ajv": "^8.17.1", "codemirror-wrapped-line-indent": "^1.0.8", "diff-sequences": "^29.6.3", "immutable-json-patch": "6.0.1", @@ -97,7 +97,7 @@ "lodash-es": "^4.17.21", "memoize-one": "^6.0.0", "natural-compare-lite": "^1.4.0", - "sass": "^1.77.6", + "sass": "^1.77.8", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", "vanilla-picker": "^2.12.3" @@ -106,8 +106,8 @@ "svelte": "^4.0.0 || ^5.0.0" }, "devDependencies": { - "@babel/core": "7.24.7", - "@babel/preset-env": "7.24.7", + "@babel/core": "7.24.8", + "@babel/preset-env": "7.24.8", "@commitlint/cli": "19.3.0", "@commitlint/config-conventional": "19.2.2", "@rollup/plugin-babel": "6.0.4", @@ -125,30 +125,30 @@ "@types/cookie": "0.6.0", "@types/jmespath": "0.15.2", "@types/lodash-es": "4.17.12", - "@typescript-eslint/eslint-plugin": "7.15.0", - "@typescript-eslint/parser": "7.15.0", - "@vitest/coverage-v8": "1.6.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "@vitest/coverage-v8": "2.0.2", "cpy-cli": "5.0.0", "del-cli": "5.1.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-svelte": "2.41.0", + "eslint-plugin-svelte": "2.42.0", "husky": "9.0.11", "jsdom": "24.1.0", "lossless-json": "4.0.1", "npm-run-all": "4.1.5", - "prettier": "3.3.2", + "prettier": "3.3.3", "prettier-plugin-svelte": "3.2.5", - "rollup": "4.18.0", + "rollup": "4.18.1", "rollup-plugin-dts": "6.1.1", "rollup-plugin-svelte": "7.2.2", "standard-version": "9.5.0", - "svelte": "^5.0.0-next.175", + "svelte": "5.0.0-next.175", "svelte-check": "3.8.4", - "svelte-preprocess": "6.0.1", + "svelte-preprocess": "6.0.2", "typescript": "5.5.3", "vite": "5.3.3", - "vitest": "1.6.0" + "vitest": "2.0.2" } } diff --git a/vitest.config.js b/vitest.config.js index f69632d1..d56fd72d 100644 --- a/vitest.config.js +++ b/vitest.config.js @@ -4,10 +4,6 @@ import { sveltekit } from '@sveltejs/kit/vite' export default defineConfig({ plugins: [sveltekit()], test: { - // workaround for a bug in svelte/vite/vitest introduced in vite@4.1.0 - // see https://github.com/vitest-dev/vitest/issues/2834#issuecomment-1439576110 - alias: [{ find: /^svelte$/, replacement: 'svelte/internal' }], - include: ['src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], globals: true, environment: 'jsdom', From 86040492d5cd2a00a21e3055489260aa5c35afda Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 15 Jul 2024 10:11:32 +0200 Subject: [PATCH 51/93] feat: upgrade to the latest version of `ajv` and `sass` --- package-lock.json | 1008 ++++++++--------- package.json | 24 +- .../components/controls/DropdownButton.scss | 3 +- src/lib/components/controls/SearchBox.scss | 5 +- src/lib/components/modals/TransformModal.scss | 5 +- .../modes/tablemode/TableModeWelcome.scss | 4 +- .../components/modes/textmode/StatusBar.scss | 6 +- src/lib/styles.scss | 4 +- 8 files changed, 469 insertions(+), 590 deletions(-) diff --git a/package-lock.json b/package-lock.json index cdfcd588..f1f41c74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@lezer/highlight": "^1.2.0", "@replit/codemirror-indentation-markers": "^6.5.2", - "ajv": "^8.16.0", + "ajv": "^8.17.1", "codemirror-wrapped-line-indent": "^1.0.8", "diff-sequences": "^29.6.3", "immutable-json-patch": "6.0.1", @@ -31,14 +31,14 @@ "lodash-es": "^4.17.21", "memoize-one": "^6.0.0", "natural-compare-lite": "^1.4.0", - "sass": "^1.77.6", + "sass": "^1.77.8", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", "vanilla-picker": "^2.12.3" }, "devDependencies": { - "@babel/core": "7.24.7", - "@babel/preset-env": "7.24.7", + "@babel/core": "7.24.8", + "@babel/preset-env": "7.24.8", "@commitlint/cli": "19.3.0", "@commitlint/config-conventional": "19.2.2", "@rollup/plugin-babel": "6.0.4", @@ -56,31 +56,31 @@ "@types/cookie": "0.6.0", "@types/jmespath": "0.15.2", "@types/lodash-es": "4.17.12", - "@typescript-eslint/eslint-plugin": "7.15.0", - "@typescript-eslint/parser": "7.15.0", - "@vitest/coverage-v8": "1.6.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "@vitest/coverage-v8": "2.0.2", "cpy-cli": "5.0.0", "del-cli": "5.1.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-svelte": "2.41.0", + "eslint-plugin-svelte": "2.42.0", "husky": "9.0.11", "jsdom": "24.1.0", "lossless-json": "4.0.1", "npm-run-all": "4.1.5", - "prettier": "3.3.2", + "prettier": "3.3.3", "prettier-plugin-svelte": "3.2.5", - "rollup": "4.18.0", + "rollup": "4.18.1", "rollup-plugin-dts": "6.1.1", "rollup-plugin-svelte": "7.2.2", "standard-version": "9.5.0", "svelte": "^4.2.18", "svelte-check": "3.8.4", - "svelte-preprocess": "6.0.1", + "svelte-preprocess": "6.0.2", "typescript": "5.5.3", "vite": "5.3.3", - "vitest": "1.6.0" + "vitest": "2.0.2" }, "peerDependencies": { "svelte": "^4.0.0" @@ -118,30 +118,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.7.tgz", - "integrity": "sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.8.tgz", + "integrity": "sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.7.tgz", - "integrity": "sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.8.tgz", + "integrity": "sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==", "dev": true, + "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helpers": "^7.24.7", - "@babel/parser": "^7.24.7", + "@babel/generator": "^7.24.8", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helpers": "^7.24.8", + "@babel/parser": "^7.24.8", "@babel/template": "^7.24.7", - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -157,12 +159,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.7.tgz", - "integrity": "sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.8.tgz", + "integrity": "sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/types": "^7.24.7", + "@babel/types": "^7.24.8", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^2.5.1" @@ -197,14 +200,15 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz", - "integrity": "sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.8.tgz", + "integrity": "sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", - "browserslist": "^4.22.2", + "@babel/compat-data": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -332,10 +336,11 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz", - "integrity": "sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.24.8.tgz", + "integrity": "sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-module-imports": "^7.24.7", @@ -363,10 +368,11 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz", - "integrity": "sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -444,10 +450,11 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz", - "integrity": "sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", + "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -462,10 +469,11 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz", - "integrity": "sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", + "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -486,13 +494,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.7.tgz", - "integrity": "sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.8.tgz", + "integrity": "sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/template": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/types": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -514,10 +523,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.7.tgz", - "integrity": "sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.8.tgz", + "integrity": "sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==", "dev": true, + "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -950,16 +960,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz", - "integrity": "sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.8.tgz", + "integrity": "sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", + "@babel/helper-compilation-targets": "^7.24.8", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-replace-supers": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", "globals": "^11.1.0" @@ -988,12 +999,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz", - "integrity": "sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", + "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1193,13 +1205,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz", - "integrity": "sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", + "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-simple-access": "^7.24.7" }, "engines": { @@ -1357,12 +1370,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz", - "integrity": "sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", + "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, @@ -1530,12 +1544,13 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz", - "integrity": "sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", + "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.24.8" }, "engines": { "node": ">=6.9.0" @@ -1608,15 +1623,16 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.7.tgz", - "integrity": "sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.24.8.tgz", + "integrity": "sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.24.7", - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-validator-option": "^7.24.7", + "@babel/compat-data": "^7.24.8", + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-validator-option": "^7.24.8", "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.24.7", "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.24.7", "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", @@ -1647,9 +1663,9 @@ "@babel/plugin-transform-block-scoping": "^7.24.7", "@babel/plugin-transform-class-properties": "^7.24.7", "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.24.7", + "@babel/plugin-transform-classes": "^7.24.8", "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.7", + "@babel/plugin-transform-destructuring": "^7.24.8", "@babel/plugin-transform-dotall-regex": "^7.24.7", "@babel/plugin-transform-duplicate-keys": "^7.24.7", "@babel/plugin-transform-dynamic-import": "^7.24.7", @@ -1662,7 +1678,7 @@ "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", "@babel/plugin-transform-member-expression-literals": "^7.24.7", "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.7", + "@babel/plugin-transform-modules-commonjs": "^7.24.8", "@babel/plugin-transform-modules-systemjs": "^7.24.7", "@babel/plugin-transform-modules-umd": "^7.24.7", "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", @@ -1672,7 +1688,7 @@ "@babel/plugin-transform-object-rest-spread": "^7.24.7", "@babel/plugin-transform-object-super": "^7.24.7", "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7", + "@babel/plugin-transform-optional-chaining": "^7.24.8", "@babel/plugin-transform-parameters": "^7.24.7", "@babel/plugin-transform-private-methods": "^7.24.7", "@babel/plugin-transform-private-property-in-object": "^7.24.7", @@ -1683,7 +1699,7 @@ "@babel/plugin-transform-spread": "^7.24.7", "@babel/plugin-transform-sticky-regex": "^7.24.7", "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.7", + "@babel/plugin-transform-typeof-symbol": "^7.24.8", "@babel/plugin-transform-unicode-escapes": "^7.24.7", "@babel/plugin-transform-unicode-property-regex": "^7.24.7", "@babel/plugin-transform-unicode-regex": "^7.24.7", @@ -1692,7 +1708,7 @@ "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.4", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.31.0", + "core-js-compat": "^3.37.1", "semver": "^6.3.1" }, "engines": { @@ -1749,19 +1765,20 @@ } }, "node_modules/@babel/traverse": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.7.tgz", - "integrity": "sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.8.tgz", + "integrity": "sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.24.7", + "@babel/generator": "^7.24.8", "@babel/helper-environment-visitor": "^7.24.7", "@babel/helper-function-name": "^7.24.7", "@babel/helper-hoist-variables": "^7.24.7", "@babel/helper-split-export-declaration": "^7.24.7", - "@babel/parser": "^7.24.7", - "@babel/types": "^7.24.7", + "@babel/parser": "^7.24.8", + "@babel/types": "^7.24.8", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1770,12 +1787,13 @@ } }, "node_modules/@babel/types": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.7.tgz", - "integrity": "sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==", + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.8.tgz", + "integrity": "sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.24.7", + "@babel/helper-string-parser": "^7.24.8", "@babel/helper-validator-identifier": "^7.24.7", "to-fast-properties": "^2.0.0" }, @@ -2816,22 +2834,11 @@ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -3144,219 +3151,229 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", - "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.1.tgz", + "integrity": "sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", - "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.1.tgz", + "integrity": "sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", - "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.1.tgz", + "integrity": "sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", - "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.1.tgz", + "integrity": "sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", - "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.1.tgz", + "integrity": "sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", - "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.1.tgz", + "integrity": "sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", - "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.1.tgz", + "integrity": "sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", - "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.1.tgz", + "integrity": "sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", - "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.1.tgz", + "integrity": "sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", - "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.1.tgz", + "integrity": "sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", - "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.1.tgz", + "integrity": "sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", - "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.1.tgz", + "integrity": "sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", - "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.1.tgz", + "integrity": "sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", - "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.1.tgz", + "integrity": "sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", - "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.1.tgz", + "integrity": "sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.0.tgz", - "integrity": "sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.18.1.tgz", + "integrity": "sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, "node_modules/@sphinxxxx/color-conversion": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz", @@ -3798,16 +3815,17 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz", - "integrity": "sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.16.0.tgz", + "integrity": "sha512-py1miT6iQpJcs1BiJjm54AMzeuMPBSPuKPlnT8HlfudbcS5rYeX5jajpLf3mrdRh9dA/Ec2FVUY0ifeVNDIhZw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/type-utils": "7.15.0", - "@typescript-eslint/utils": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/type-utils": "7.16.0", + "@typescript-eslint/utils": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3831,15 +3849,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.15.0.tgz", - "integrity": "sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-ar9E+k7CU8rWi2e5ErzQiC93KKEFAXA2Kky0scAlPcxYblLt8+XZuHUZwlyfXILyQa95P6lQg+eZgh/dDs3+Vw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4" }, "engines": { @@ -3859,13 +3878,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz", - "integrity": "sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.16.0.tgz", + "integrity": "sha512-8gVv3kW6n01Q6TrI1cmTZ9YMFi3ucDT7i7aI5lEikk2ebk1AEjrwX8MDTdaX5D7fPXMBLvnsaa0IFTAu+jcfOw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0" + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3876,13 +3896,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz", - "integrity": "sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.16.0.tgz", + "integrity": "sha512-j0fuUswUjDHfqV/UdW6mLtOQQseORqfdmoBNDFOqs9rvNVR2e+cmu6zJu/Ku4SDuqiJko6YnhwcL8x45r8Oqxg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "7.15.0", - "@typescript-eslint/utils": "7.15.0", + "@typescript-eslint/typescript-estree": "7.16.0", + "@typescript-eslint/utils": "7.16.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3903,10 +3924,11 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.15.0.tgz", - "integrity": "sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.16.0.tgz", + "integrity": "sha512-fecuH15Y+TzlUutvUl9Cc2XJxqdLr7+93SQIbcZfd4XRGGKoxyljK27b+kxKamjRkU7FYC6RrbSCg0ALcZn/xw==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -3916,13 +3938,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz", - "integrity": "sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.16.0.tgz", + "integrity": "sha512-a5NTvk51ZndFuOLCh5OaJBELYc2O3Zqxfl3Js78VFE1zE46J2AaVuW+rEbVkQznjkmlzWsUI15BG5tQMixzZLw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/visitor-keys": "7.15.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/visitor-keys": "7.16.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3948,6 +3971,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3956,15 +3980,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.15.0.tgz", - "integrity": "sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.16.0.tgz", + "integrity": "sha512-PqP4kP3hb4r7Jav+NiRCntlVzhxBNWq6ZQ+zQwII1y/G/1gdIPeYDCKr2+dH6049yJQsWZiHU6RlwvIFBXXGNA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "7.15.0", - "@typescript-eslint/types": "7.15.0", - "@typescript-eslint/typescript-estree": "7.15.0" + "@typescript-eslint/scope-manager": "7.16.0", + "@typescript-eslint/types": "7.16.0", + "@typescript-eslint/typescript-estree": "7.16.0" }, "engines": { "node": "^18.18.0 || >=20.0.0" @@ -3978,12 +4003,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "7.15.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz", - "integrity": "sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.16.0.tgz", + "integrity": "sha512-rMo01uPy9C7XxG7AFsxa8zLnWXTF8N3PYclekWSrurvhwiw1eW88mrKiAYe6s53AUY57nTRz8dJsuuXdkAhzCg==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "7.15.0", + "@typescript-eslint/types": "7.16.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -4001,189 +4027,130 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.6.0.tgz", - "integrity": "sha512-KvapcbMY/8GYIG0rlwwOKCVNRc0OL20rrhFkg/CHNzncV03TE2XWvO5w9uZYoxNiMEBacAJt3unSOiZ7svePew==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.2.tgz", + "integrity": "sha512-iA8eb4PMid3bMc++gfQSTvYE1QL//fC8pz+rKsTUDBFjdDiy/gH45hvpqyDu5K7FHhvgG0GNNCJzTMMSFKhoxg==", "dev": true, + "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.2.1", + "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.4", + "debug": "^4.3.5", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", - "istanbul-lib-source-maps": "^5.0.4", - "istanbul-reports": "^3.1.6", - "magic-string": "^0.30.5", - "magicast": "^0.3.3", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "test-exclude": "^6.0.0" + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.10", + "magicast": "^0.3.4", + "std-env": "^3.7.0", + "strip-literal": "^2.1.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "1.6.0" + "vitest": "2.0.2" } }, "node_modules/@vitest/expect": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.6.0.tgz", - "integrity": "sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.2.tgz", + "integrity": "sha512-nKAvxBYqcDugYZ4nJvnm5OR8eDJdgWjk4XM9owQKUjzW70q0icGV2HVnQOyYsp906xJaBDUXw0+9EHw2T8e0mQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "chai": "^4.3.10" + "@vitest/spy": "2.0.2", + "@vitest/utils": "2.0.2", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.6.0.tgz", - "integrity": "sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==", + "node_modules/@vitest/pretty-format": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.2.tgz", + "integrity": "sha512-SBCyOXfGVvddRd9r2PwoVR0fonQjh9BMIcBMlSzbcNwFfGr6ZhOhvBzurjvi2F4ryut2HcqiFhNeDVGwru8tLg==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "1.6.0", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "node_modules/@vitest/runner": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.2.tgz", + "integrity": "sha512-OCh437Vi8Wdbif1e0OvQcbfM3sW4s2lpmOjAE7qfLrpzJX2M7J1IQlNvEcb/fu6kaIB9n9n35wS0G2Q3en5kHg==", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": ">=18" + "@vitest/utils": "2.0.2", + "pathe": "^1.1.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.6.0.tgz", - "integrity": "sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.2.tgz", + "integrity": "sha512-Yc2ewhhZhx+0f9cSUdfzPRcsM6PhIb+S43wxE7OG0kTxqgqzo8tHkXFuFlndXeDMp09G3sY/X5OAo/RfYydf1g==", "dev": true, + "license": "MIT", "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "@vitest/pretty-format": "2.0.2", + "magic-string": "^0.30.10", + "pathe": "^1.1.2" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vitest/snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/snapshot/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/@vitest/spy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.6.0.tgz", - "integrity": "sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.2.tgz", + "integrity": "sha512-MgwJ4AZtCgqyp2d7WcQVE8aNG5vQ9zu9qMPYQHjsld/QVsrvg78beNrXdO4HYkP0lDahCO3P4F27aagIag+SGQ==", "dev": true, + "license": "MIT", "dependencies": { - "tinyspy": "^2.2.0" + "tinyspy": "^3.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.6.0.tgz", - "integrity": "sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.2.tgz", + "integrity": "sha512-pxCY1v7kmOCWYWjzc0zfjGTA3Wmn8PKnlPvSrsA643P1NHl1fOyXj2Q9SaNlrlFE+ivCsxM80Ov3AR82RmHCWQ==", "dev": true, + "license": "MIT", "dependencies": { - "diff-sequences": "^29.6.3", + "@vitest/pretty-format": "2.0.2", "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/@vitest/utils/node_modules/estree-walker": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0" } }, - "node_modules/@vitest/utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/utils/node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true - }, "node_modules/acorn": { "version": "8.12.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", @@ -4204,18 +4171,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", - "dev": true, - "dependencies": { - "acorn": "^8.11.0" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/add-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", @@ -4263,14 +4218,15 @@ } }, "node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4371,6 +4327,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4466,12 +4423,13 @@ } }, "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/asynckit": { @@ -4643,6 +4601,7 @@ "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4722,21 +4681,20 @@ ] }, "node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", "dev": true, + "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" }, "engines": { - "node": ">=4" + "node": ">=12" } }, "node_modules/chalk": { @@ -4754,15 +4712,13 @@ } }, "node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 16" } }, "node_modules/chokidar": { @@ -4999,12 +4955,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==", - "dev": true - }, "node_modules/conventional-changelog": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/conventional-changelog/-/conventional-changelog-3.1.25.tgz", @@ -6528,13 +6478,11 @@ "dev": true }, "node_modules/deep-eql": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.4.tgz", - "integrity": "sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==", + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, + "license": "MIT", "engines": { "node": ">=6" } @@ -7639,10 +7587,11 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "2.41.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.41.0.tgz", - "integrity": "sha512-gjU9Q/psxbWG1VNwYbEb0Q6U4W5PBGaDpYmO2zlQ+zlAMVS3Qt0luAK0ACi/tMSwRK6JENiySvMyJbO0YWmXSg==", + "version": "2.42.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.42.0.tgz", + "integrity": "sha512-mHP6z0DWq97KZvoQcApZHdF9m9epcDV/ICKufeEH18Vh+8vl7S+gwt8WdUohEqKNVMuXRkbvy1suMcVvUDiOGw==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -7654,7 +7603,7 @@ "postcss-safe-parser": "^6.0.0", "postcss-selector-parser": "^6.1.0", "semver": "^7.6.2", - "svelte-eslint-parser": "^0.39.2" + "svelte-eslint-parser": "^0.40.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" @@ -7664,7 +7613,7 @@ }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.155" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.181" }, "peerDependenciesMeta": { "svelte": { @@ -8083,6 +8032,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "license": "MIT" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -8284,6 +8239,7 @@ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -8934,6 +8890,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -8954,6 +8911,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -10042,22 +10000,6 @@ "node": ">=4" } }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dev": true, - "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", @@ -10162,10 +10104,11 @@ "dev": true }, "node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", + "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", "dev": true, + "license": "MIT", "dependencies": { "get-func-name": "^2.0.1" } @@ -10424,18 +10367,6 @@ "mkdirp": "bin/cmd.js" } }, - "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", - "dev": true, - "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" - } - }, "node_modules/modify-values": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", @@ -11074,15 +11005,17 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", "dev": true, + "license": "MIT", "engines": { - "node": "*" + "node": ">= 14.16" } }, "node_modules/periscopic": { @@ -11149,17 +11082,6 @@ "node": ">=4" } }, - "node_modules/pkg-types": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.1.3.tgz", - "integrity": "sha512-+JrgthZG6m3ckicaOB74TwQ+tBWsFl3qVQg7mN8ulwSOElJ7gBhKzj2VkCPnZ4NlF6kEquYU+RIYNVAvzd54UA==", - "dev": true, - "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" - } - }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -11261,6 +11183,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -11291,10 +11214,11 @@ } }, "node_modules/prettier": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", - "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -11357,6 +11281,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -11783,10 +11708,11 @@ } }, "node_modules/rollup": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.0.tgz", - "integrity": "sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.18.1.tgz", + "integrity": "sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -11798,22 +11724,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.18.0", - "@rollup/rollup-android-arm64": "4.18.0", - "@rollup/rollup-darwin-arm64": "4.18.0", - "@rollup/rollup-darwin-x64": "4.18.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.18.0", - "@rollup/rollup-linux-arm-musleabihf": "4.18.0", - "@rollup/rollup-linux-arm64-gnu": "4.18.0", - "@rollup/rollup-linux-arm64-musl": "4.18.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.18.0", - "@rollup/rollup-linux-riscv64-gnu": "4.18.0", - "@rollup/rollup-linux-s390x-gnu": "4.18.0", - "@rollup/rollup-linux-x64-gnu": "4.18.0", - "@rollup/rollup-linux-x64-musl": "4.18.0", - "@rollup/rollup-win32-arm64-msvc": "4.18.0", - "@rollup/rollup-win32-ia32-msvc": "4.18.0", - "@rollup/rollup-win32-x64-msvc": "4.18.0", + "@rollup/rollup-android-arm-eabi": "4.18.1", + "@rollup/rollup-android-arm64": "4.18.1", + "@rollup/rollup-darwin-arm64": "4.18.1", + "@rollup/rollup-darwin-x64": "4.18.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.18.1", + "@rollup/rollup-linux-arm-musleabihf": "4.18.1", + "@rollup/rollup-linux-arm64-gnu": "4.18.1", + "@rollup/rollup-linux-arm64-musl": "4.18.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.18.1", + "@rollup/rollup-linux-riscv64-gnu": "4.18.1", + "@rollup/rollup-linux-s390x-gnu": "4.18.1", + "@rollup/rollup-linux-x64-gnu": "4.18.1", + "@rollup/rollup-linux-x64-musl": "4.18.1", + "@rollup/rollup-win32-arm64-msvc": "4.18.1", + "@rollup/rollup-win32-ia32-msvc": "4.18.1", + "@rollup/rollup-win32-x64-msvc": "4.18.1", "fsevents": "~2.3.2" } }, @@ -12040,9 +11966,10 @@ } }, "node_modules/sass": { - "version": "1.77.6", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.6.tgz", - "integrity": "sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==", + "version": "1.77.8", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.8.tgz", + "integrity": "sha512-4UHg6prsrycW20fqLGPShtEvo/WyHRVRHwOP4DzkUrObWoWI05QBSfzU71TVB7PFaL104TwNaHpjlWXAZbQiNQ==", + "license": "MIT", "dependencies": { "chokidar": ">=3.0.0 <4.0.0", "immutable": "^4.0.0", @@ -12952,15 +12879,16 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "0.39.2", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.39.2.tgz", - "integrity": "sha512-87UwLuWTtDIuzWOhOi1zBL5wYVd07M5BK1qZ57YmXJB5/UmjUNJqGy3XSOhPqjckY1dATNV9y+mx+nI0WH6HPA==", + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.40.0.tgz", + "integrity": "sha512-M+v1HhC5T1WKYVxWexUCS4o6oIBS88XKzOZuhl2ew+eGxol7eC21e+VE8TC4rXJ3iT3iXT0qlZsZcpKjVo5/zQ==", "dev": true, + "license": "MIT", "dependencies": { "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", - "postcss": "^8.4.38", + "postcss": "^8.4.39", "postcss-scss": "^4.0.9" }, "engines": { @@ -12970,7 +12898,7 @@ "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.115" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.181" }, "peerDependenciesMeta": { "svelte": { @@ -13000,15 +12928,12 @@ } }, "node_modules/svelte-preprocess": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.1.tgz", - "integrity": "sha512-vNgXoyqWwahdpEX9XbQHcAHt41TkXnf8bRDxT5PjISHbZD1dVH4b2OsJ2fVQTBb3qP05x0GuYE9iS5vhD+Dniw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.2.tgz", + "integrity": "sha512-OvDTLfaOkkhjprbDKO0SOCkjNYuHy16dbD4SpqbIi6QiabOMHxRT4km5/dzbFFkmW1L0E2INF3MFltG2pgOyKQ==", "dev": true, "hasInstallScript": true, - "dependencies": { - "detect-indent": "^6.1.0", - "strip-indent": "^3.0.0" - }, + "license": "MIT", "engines": { "node": ">= 18.0.0" }, @@ -13121,60 +13046,18 @@ } }, "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", "dev": true, + "license": "ISC", "dependencies": { "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "glob": "^10.4.1", + "minimatch": "^9.0.4" }, "engines": { - "node": "*" + "node": ">=18" } }, "node_modules/text-extensions": { @@ -13227,19 +13110,31 @@ "dev": true }, "node_modules/tinypool": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.4.tgz", - "integrity": "sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.0.tgz", + "integrity": "sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", + "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -13363,15 +13258,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -13476,12 +13362,6 @@ "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", - "integrity": "sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==", - "dev": true - }, "node_modules/uglify-js": { "version": "3.18.0", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", @@ -13611,6 +13491,7 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -13705,15 +13586,16 @@ } }, "node_modules/vite-node": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.6.0.tgz", - "integrity": "sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.2.tgz", + "integrity": "sha512-w4vkSz1Wo+NIQg8pjlEn0jQbcM/0D+xVaYjhw3cvarTanLLBh54oNiRbsT8PNK5GfuST0IlVXjsNRoNlqvY/fw==", "dev": true, + "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", + "debug": "^4.3.5", + "pathe": "^1.1.2", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -13741,30 +13623,30 @@ } }, "node_modules/vitest": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.6.0.tgz", - "integrity": "sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==", - "dev": true, - "dependencies": { - "@vitest/expect": "1.6.0", - "@vitest/runner": "1.6.0", - "@vitest/snapshot": "1.6.0", - "@vitest/spy": "1.6.0", - "@vitest/utils": "1.6.0", - "acorn-walk": "^8.3.2", - "chai": "^4.3.10", - "debug": "^4.3.4", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.2.tgz", + "integrity": "sha512-WlpZ9neRIjNBIOQwBYfBSr0+of5ZCbxT2TVGKW4Lv0c8+srCFIiRdsP7U009t8mMn821HQ4XKgkx5dVWpyoyLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@vitest/expect": "2.0.2", + "@vitest/pretty-format": "^2.0.2", + "@vitest/runner": "2.0.2", + "@vitest/snapshot": "2.0.2", + "@vitest/spy": "2.0.2", + "@vitest/utils": "2.0.2", + "chai": "^5.1.1", + "debug": "^4.3.5", "execa": "^8.0.1", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "tinybench": "^2.5.1", - "tinypool": "^0.8.3", + "magic-string": "^0.30.10", + "pathe": "^1.1.2", + "std-env": "^3.7.0", + "tinybench": "^2.8.0", + "tinypool": "^1.0.0", + "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "1.6.0", + "vite-node": "2.0.2", "why-is-node-running": "^2.2.2" }, "bin": { @@ -13779,8 +13661,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.6.0", - "@vitest/ui": "1.6.0", + "@vitest/browser": "2.0.2", + "@vitest/ui": "2.0.2", "happy-dom": "*", "jsdom": "*" }, diff --git a/package.json b/package.json index 40d596f8..e54cd3fd 100644 --- a/package.json +++ b/package.json @@ -87,7 +87,7 @@ "@fortawesome/free-solid-svg-icons": "^6.5.2", "@lezer/highlight": "^1.2.0", "@replit/codemirror-indentation-markers": "^6.5.2", - "ajv": "^8.16.0", + "ajv": "^8.17.1", "codemirror-wrapped-line-indent": "^1.0.8", "diff-sequences": "^29.6.3", "immutable-json-patch": "6.0.1", @@ -97,7 +97,7 @@ "lodash-es": "^4.17.21", "memoize-one": "^6.0.0", "natural-compare-lite": "^1.4.0", - "sass": "^1.77.6", + "sass": "^1.77.8", "svelte-awesome": "^3.3.1", "svelte-select": "^5.8.3", "vanilla-picker": "^2.12.3" @@ -106,8 +106,8 @@ "svelte": "^4.0.0" }, "devDependencies": { - "@babel/core": "7.24.7", - "@babel/preset-env": "7.24.7", + "@babel/core": "7.24.8", + "@babel/preset-env": "7.24.8", "@commitlint/cli": "19.3.0", "@commitlint/config-conventional": "19.2.2", "@rollup/plugin-babel": "6.0.4", @@ -125,30 +125,30 @@ "@types/cookie": "0.6.0", "@types/jmespath": "0.15.2", "@types/lodash-es": "4.17.12", - "@typescript-eslint/eslint-plugin": "7.15.0", - "@typescript-eslint/parser": "7.15.0", - "@vitest/coverage-v8": "1.6.0", + "@typescript-eslint/eslint-plugin": "7.16.0", + "@typescript-eslint/parser": "7.16.0", + "@vitest/coverage-v8": "2.0.2", "cpy-cli": "5.0.0", "del-cli": "5.1.0", "eslint": "8.57.0", "eslint-config-prettier": "9.1.0", "eslint-plugin-import": "2.29.1", - "eslint-plugin-svelte": "2.41.0", + "eslint-plugin-svelte": "2.42.0", "husky": "9.0.11", "jsdom": "24.1.0", "lossless-json": "4.0.1", "npm-run-all": "4.1.5", - "prettier": "3.3.2", + "prettier": "3.3.3", "prettier-plugin-svelte": "3.2.5", - "rollup": "4.18.0", + "rollup": "4.18.1", "rollup-plugin-dts": "6.1.1", "rollup-plugin-svelte": "7.2.2", "standard-version": "9.5.0", "svelte": "^4.2.18", "svelte-check": "3.8.4", - "svelte-preprocess": "6.0.1", + "svelte-preprocess": "6.0.2", "typescript": "5.5.3", "vite": "5.3.3", - "vitest": "1.6.0" + "vitest": "2.0.2" } } diff --git a/src/lib/components/controls/DropdownButton.scss b/src/lib/components/controls/DropdownButton.scss index d59ceb21..ea9a90a1 100644 --- a/src/lib/components/controls/DropdownButton.scss +++ b/src/lib/components/controls/DropdownButton.scss @@ -29,6 +29,7 @@ width: 2em; background: $context-menu-background; color: $context-menu-color; + border-radius: 0; &.jse-visible { background: $background; @@ -46,8 +47,6 @@ color: $context-menu-color-disabled; background: unset; } - - border-radius: 0; } .jse-dropdown-items { diff --git a/src/lib/components/controls/SearchBox.scss b/src/lib/components/controls/SearchBox.scss index aa48022f..31504046 100644 --- a/src/lib/components/controls/SearchBox.scss +++ b/src/lib/components/controls/SearchBox.scss @@ -107,14 +107,13 @@ $input-min-width: 50px; } .jse-replace-section { + flex: 1; + display: flex; padding-left: $padding-section-left; button { width: auto; } - - flex: 1; - display: flex; } } } diff --git a/src/lib/components/modals/TransformModal.scss b/src/lib/components/modals/TransformModal.scss index b5255c43..544d49be 100644 --- a/src/lib/components/modals/TransformModal.scss +++ b/src/lib/components/modals/TransformModal.scss @@ -9,10 +9,9 @@ } .jse-modal-contents { - @include jse-modal-contents; - color: inherit; - padding: 0; + + @include jse-modal-contents($modal-padding: 0); .jse-main-contents { flex: 1; diff --git a/src/lib/components/modes/tablemode/TableModeWelcome.scss b/src/lib/components/modes/tablemode/TableModeWelcome.scss index 9892b0f4..d158c8c6 100644 --- a/src/lib/components/modes/tablemode/TableModeWelcome.scss +++ b/src/lib/components/modes/tablemode/TableModeWelcome.scss @@ -36,10 +36,10 @@ } button.jse-nested-array-action { - @include jsoneditor-button-primary; - text-align: left; + @include jsoneditor-button-primary; + .jse-nested-array-count { opacity: 0.5; white-space: nowrap; diff --git a/src/lib/components/modes/textmode/StatusBar.scss b/src/lib/components/modes/textmode/StatusBar.scss index 3ad6c8b1..67ed12a1 100644 --- a/src/lib/components/modes/textmode/StatusBar.scss +++ b/src/lib/components/modes/textmode/StatusBar.scss @@ -11,13 +11,13 @@ border-left: $main-border; border-right: $main-border; + display: flex; + gap: $padding; + &:last-child { border-bottom: $main-border; } - display: flex; - gap: $padding; - .jse-status-bar-info { padding: 2px; } diff --git a/src/lib/styles.scss b/src/lib/styles.scss index 6dbda47c..04905543 100644 --- a/src/lib/styles.scss +++ b/src/lib/styles.scss @@ -157,11 +157,11 @@ $errors-overview-max-height: 25%; color: $text-color; } -@mixin jse-modal-contents { +@mixin jse-modal-contents($modal-padding: 20px) { flex: 1; display: flex; flex-direction: column; - padding: 20px; + padding: $modal-padding; overflow: auto; min-width: 0; min-height: 0; From e90390d1c1f45fc8baaa4c507b6e503522ba4106 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 15 Jul 2024 10:28:23 +0200 Subject: [PATCH 52/93] chore: fix JSONEditorModal closing when clicking ESC when editing a value --- src/lib/components/modals/Modal.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/components/modals/Modal.svelte b/src/lib/components/modals/Modal.svelte index 36682a9c..f0b5c7b9 100644 --- a/src/lib/components/modals/Modal.svelte +++ b/src/lib/components/modals/Modal.svelte @@ -23,6 +23,7 @@ bind:this={dialog} on:close={close} on:click|self={close} + on:cancel|preventDefault use:onEscape={close} class={classnames('jse-modal', className)} class:jse-fullscreen={fullscreen} From c807600e002f43693344278de150d892459860db Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Mon, 15 Jul 2024 12:52:44 +0200 Subject: [PATCH 53/93] chore: refactor `KeySelection` and `ValueSelection` (#463) Refactor `KeySelection` and `ValueSelection` to get rid of a couple of internal workarounds BREAKING CHANGES: - The property `edit` is removed from the types `KeySelection` and `ValueSelection`, and two new types `EditKeySelection` and `EditValueSelection` are added. - The helper functions `createKeySelection` and `createValueSelection` are changed, argument `edit` is removed, and two new helper functions `createEditKeySelection` and `createEditValueSelection` are added. - the API of the component `EditableValue` requires an additional property `selection`. --- README.md | 6 +- .../components/controls/EditableDiv.svelte | 10 +- .../modes/tablemode/TableMode.svelte | 13 +- .../components/modes/treemode/JSONKey.svelte | 14 +- .../components/modes/treemode/TreeMode.svelte | 22 +- src/lib/index.ts | 2 + src/lib/logic/actions.ts | 89 ++------ src/lib/logic/operations.ts | 2 +- src/lib/logic/search.test.ts | 6 +- src/lib/logic/selection.test.ts | 205 ++++++++---------- src/lib/logic/selection.ts | 93 ++++---- src/lib/logic/table.test.ts | 32 +-- src/lib/logic/table.ts | 8 +- .../value/components/EditableValue.svelte | 9 +- .../value/components/ReadonlyValue.svelte | 4 +- src/lib/plugins/value/renderValue.ts | 6 +- src/lib/types.ts | 20 +- src/lib/utils/domUtils.ts | 27 --- .../components/EditableValueInput.svelte | 2 +- src/routes/components/EvaluatorAction.ts | 5 +- src/routes/development/+page.svelte | 4 +- 21 files changed, 253 insertions(+), 326 deletions(-) diff --git a/README.md b/README.md index ebcabad4..272df668 100644 --- a/README.md +++ b/README.md @@ -232,7 +232,7 @@ Pass the JSON contents to be rendered in the JSONEditor. `Content` is an object selection: JSONEditorSelection | undefined ``` -The current selected contents. You can use two-way binding using `bind:selection`. The `tree` mode supports `MultiSelection`, `KeySelection`, `ValueSelection`, `InsideSelection`, or `AfterSelection`. The `table` mode supports `ValueSelection`, and `text` mode supports `TextSelection.`. +The current selected contents. You can use two-way binding using `bind:selection`. The `tree` mode supports `MultiSelection`, `KeySelection`, `EditKeySelection`, `ValueSelection`, `EditValueSelection`, `InsideSelection`, or `AfterSelection`. The `table` mode supports `ValueSelection`, and `text` mode supports `TextSelection.`. #### mode @@ -586,7 +586,7 @@ A menu item `ContextMenuItem` can be one of the following types: onSelect: (selection: JSONEditorSelection | undefined) => void ``` -Callback invoked when the selection is changed. When the selection is removed, the callback is invoked with `undefined` as argument. In `text` mode, a `TextSelection` will be fired. In `tree` and `table` mode, a `JSONSelection` will be fired (which can be `MultiSelection`, `KeySelection`, `ValueSelection`, `InsideSelection`, or `AfterSelection`). Use typeguards like `isTextSelection` and `isValueSelection` to check what type the selection has. +Callback invoked when the selection is changed. When the selection is removed, the callback is invoked with `undefined` as argument. In `text` mode, a `TextSelection` will be fired. In `tree` and `table` mode, a `JSONSelection` will be fired (which can be `MultiSelection`, `KeySelection`, `EditKeySelection`, `ValueSelection`, `EditValueSelection`, `InsideSelection`, or `AfterSelection`). Use typeguards like `isTextSelection` and `isValueSelection` to check what type the selection has. #### queryLanguages @@ -856,7 +856,9 @@ The library exports a set of utility functions. The exact definitions of those f - `isMultiSelection`, - `isEditingSelection` - `createValueSelection` + - `createEditValueSelection` - `createKeySelection` + - `createEditKeySelection` - `createInsideSelection`, - `createAfterSelection` - `createMultiSelection` diff --git a/src/lib/components/controls/EditableDiv.svelte b/src/lib/components/controls/EditableDiv.svelte index 88ac4ca1..791a616f 100644 --- a/src/lib/components/controls/EditableDiv.svelte +++ b/src/lib/components/controls/EditableDiv.svelte @@ -13,6 +13,7 @@ const debug = createDebug('jsoneditor:EditableDiv') export let value: string + export let initialValue: string | undefined export let shortText = false export let label: string export let onChange: (newValue: string, updateSelection: UpdateSelectionAfterChange) => void @@ -27,17 +28,12 @@ let closed = false onMount(() => { - debug('onMount', { value }) - setDomValue(value) + debug('onMount', { value, initialValue }) + setDomValue(initialValue !== undefined ? initialValue : value) // focus if (domValue) { setCursorToEnd(domValue) - - // The refresh method can be used to update the classnames for example - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - domValue.refresh = handleValueInput } }) diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index ae7aae26..3037e6d4 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -673,9 +673,7 @@ const index = parseInt(path[0], 10) const nextPath = [String(index + 1), ...path.slice(1)] - return existsIn(json, nextPath) - ? createValueSelection(nextPath, false) - : createValueSelection(path, false) + return existsIn(json, nextPath) ? createValueSelection(nextPath) : createValueSelection(path) } export function focus() { @@ -736,7 +734,7 @@ return } - updateSelection(createValueSelection(path, false)) + updateSelection(createValueSelection(path)) event.preventDefault() } @@ -752,7 +750,7 @@ // Select the first row, first column const path = ['0', ...columns[0]] - return createValueSelection(path, false) + return createValueSelection(path) } else { return undefined } @@ -1047,7 +1045,7 @@ if (isObjectOrArray(value)) { openJSONEditorModal(path) } else { - updateSelection(createValueSelection(path, true)) + updateSelection(createValueSelection(path)) } } @@ -1173,7 +1171,6 @@ await onInsertCharacter({ char, selectInside: false, - refJsonEditor, json, selection: selection, readOnly, @@ -1453,7 +1450,7 @@ function handleSelectValidationError(error: ValidationError) { debug('select validation error', error) - updateSelection(createValueSelection(error.path, false)) + updateSelection(createValueSelection(error.path)) scrollTo(error.path) } diff --git a/src/lib/components/modes/treemode/JSONKey.svelte b/src/lib/components/modes/treemode/JSONKey.svelte index 2996be94..db393d43 100644 --- a/src/lib/components/modes/treemode/JSONKey.svelte +++ b/src/lib/components/modes/treemode/JSONKey.svelte @@ -3,6 +3,7 @@ @@ -70,6 +71,7 @@ {#if !context.readOnly && isEditingKey} ({ // expand the newly replaced array and select it state: expandSmart(patchedJson, patchedState, rootPath), - selection: createValueSelection(rootPath, false) + selection: createValueSelection(rootPath) })) }, onClose: () => { @@ -1108,7 +1108,7 @@ handlePatch(operations, (patchedJson, patchedState) => ({ // expand the newly replaced array and select it state: expandSmart(patchedJson, patchedState, rootPath), - selection: createValueSelection(rootPath, false) + selection: createValueSelection(rootPath) })) } }, @@ -1514,7 +1514,7 @@ const parent = getIn(json, initial(path)) if (Array.isArray(parent)) { // change into selection of the value - updateSelection(createValueSelection(path, false)) + updateSelection(createValueSelection(path)) } } diff --git a/src/lib/index.ts b/src/lib/index.ts index 2b145d2a..e9bfab0d 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -50,7 +50,9 @@ export { isMultiSelection, isEditingSelection, createValueSelection, + createEditValueSelection, createKeySelection, + createEditKeySelection, createInsideSelection, createAfterSelection, createMultiSelection, diff --git a/src/lib/logic/actions.ts b/src/lib/logic/actions.ts index 8217a017..a5f6962a 100644 --- a/src/lib/logic/actions.ts +++ b/src/lib/logic/actions.ts @@ -1,11 +1,11 @@ import { + createEditKeySelection, + createEditValueSelection, createInsideSelection, - createKeySelection, createMultiSelection, createValueSelection, getFocusPath, hasSelectionContents, - isEditingSelection, isKeySelection, isValueSelection, selectionToPartialJson @@ -40,9 +40,8 @@ import { parsePath } from 'immutable-json-patch' import { isObject, isObjectOrArray } from '$lib/utils/typeUtils.js' -import { expandAll, expandSmart, expandPath, expandNone } from '$lib/logic/documentState.js' +import { expandAll, expandNone, expandPath, expandSmart } from '$lib/logic/documentState.js' import { initial, isEmpty, last } from 'lodash-es' -import { insertActiveElementContents } from '$lib/utils/domUtils.js' import { fromTableCellPosition, toTableCellPosition } from '$lib/logic/table.js' const debug = createDebug('jsoneditor:actions') @@ -135,7 +134,7 @@ export function onPaste({ function doPaste(pastedText: string) { if (json !== undefined) { - const ensureSelection = selection || createValueSelection([], false) + const ensureSelection = selection || createValueSelection([]) const operations = insert(json, ensureSelection, pastedText, parser) @@ -281,7 +280,7 @@ export function onDuplicateRow({ onPatch(operations, (_, patchedState) => { const newRowIndex = rowIndex < (json as Array).length ? rowIndex + 1 : rowIndex const newPath = fromTableCellPosition({ rowIndex: newRowIndex, columnIndex }, columns) - const newSelection = createValueSelection(newPath, false) + const newSelection = createValueSelection(newPath) return { state: patchedState, @@ -366,7 +365,7 @@ export function onInsertAfterRow({ onPatch(operations, (_, patchedState) => { const nextPath = fromTableCellPosition({ rowIndex: nextRowIndex, columnIndex }, columns) - const newSelection = createValueSelection(nextPath, false) + const newSelection = createValueSelection(nextPath) return { state: patchedState, @@ -411,8 +410,7 @@ export function onRemoveRow({ json, selection, columns, readOnly, onPatch }: OnR const newSelection = newRowIndex !== undefined ? createValueSelection( - fromTableCellPosition({ rowIndex: newRowIndex, columnIndex }, columns), - false + fromTableCellPosition({ rowIndex: newRowIndex, columnIndex }, columns) ) : undefined @@ -428,9 +426,9 @@ export function onRemoveRow({ json, selection, columns, readOnly, onPatch }: OnR export interface OnInsert { insertType: InsertType selectInside: boolean - refJsonEditor: HTMLElement json: unknown | undefined selection: JSONSelection | undefined + initialValue: string | undefined readOnly: boolean parser: JSONParser onPatch: OnPatch @@ -441,7 +439,7 @@ export interface OnInsert { export function onInsert({ insertType, selectInside, - refJsonEditor, + initialValue, json, selection, readOnly, @@ -483,8 +481,8 @@ export function onInsert({ return { state: expandPath(patchedJson, patchedState, path, expandNone), selection: isObject(parent) - ? createKeySelection(path, true) - : createValueSelection(path, true) + ? createEditKeySelection(path, initialValue) + : createEditValueSelection(path, initialValue) } } } @@ -493,13 +491,6 @@ export function onInsert({ }) debug('after patch') - - if (operation) { - if (newValue === '') { - // open the newly inserted value in edit mode (can be cancelled via ESC this way) - tick2(() => insertActiveElementContents(refJsonEditor, '', true, refreshEditableDiv)) - } - } } else { // document is empty or invalid (in that case it has text but no json) debug('onInsert', { insertType, newValue }) @@ -509,7 +500,7 @@ export function onInsert({ state: expandSmart(patchedJson, patchedState, path), selection: isObjectOrArray(newValue) ? createInsideSelection(path) - : createValueSelection(path, true) + : createEditValueSelection(path) })) } } @@ -517,7 +508,6 @@ export function onInsert({ export interface OnInsertCharacter { char: string selectInside: boolean - refJsonEditor: HTMLElement json: unknown | undefined selection: JSONSelection | undefined readOnly: boolean @@ -531,7 +521,6 @@ export interface OnInsertCharacter { export async function onInsertCharacter({ char, selectInside, - refJsonEditor, json, selection, readOnly, @@ -547,15 +536,7 @@ export async function onInsertCharacter({ } if (isKeySelection(selection)) { - // only replace contents when not yet in edit mode (can happen when entering - // multiple characters very quickly after each other due to the async handling) - const replaceContents = !selection.edit - - onSelect({ ...selection, edit: true }) - tick2(() => - // We use this way via insertActiveElementContents, so we can cancel via ESC - insertActiveElementContents(refJsonEditor, char, replaceContents, refreshEditableDiv) - ) + onSelect({ ...selection, edit: true, initialValue: char }) return } @@ -563,7 +544,7 @@ export async function onInsertCharacter({ onInsert({ insertType: 'object', selectInside, - refJsonEditor, + initialValue: undefined, // not relevant json, selection, readOnly, @@ -575,7 +556,7 @@ export async function onInsertCharacter({ onInsert({ insertType: 'array', selectInside, - refJsonEditor, + initialValue: undefined, // not relevant json, selection, readOnly, @@ -586,15 +567,7 @@ export async function onInsertCharacter({ } else { if (isValueSelection(selection) && json !== undefined) { if (!isObjectOrArray(getIn(json, selection.path))) { - // only replace contents when not yet in edit mode (can happen when entering - // multiple characters very quickly after each other due to the async handling) - const replaceContents = !selection.edit - - onSelect({ ...selection, edit: true }) - tick2(() => - // We use this way via insertActiveElementContents, so we can cancel via ESC - insertActiveElementContents(refJsonEditor, char, replaceContents, refreshEditableDiv) - ) + onSelect({ ...selection, edit: true, initialValue: char }) } else { // TODO: replace the object/array with editing a text in edit mode? // (Ideally this this should not create an entry in history though, @@ -605,7 +578,6 @@ export async function onInsertCharacter({ debug('onInsertValueWithCharacter', { char }) await onInsertValueWithCharacter({ char, - refJsonEditor, json, selection, readOnly, @@ -619,7 +591,6 @@ export async function onInsertCharacter({ interface OnInsertValueWithCharacter { char: string - refJsonEditor: HTMLElement json: unknown | undefined selection: JSONSelection | undefined readOnly: boolean @@ -630,7 +601,6 @@ interface OnInsertValueWithCharacter { async function onInsertValueWithCharacter({ char, - refJsonEditor, json, selection, readOnly, @@ -646,7 +616,7 @@ async function onInsertValueWithCharacter({ onInsert({ insertType: 'value', selectInside: false, // not relevant, we insert a value, not an object or array - refJsonEditor, + initialValue: char, json, selection, readOnly, @@ -654,29 +624,4 @@ async function onInsertValueWithCharacter({ onPatch, onReplaceJson }) - - // only replace contents when not yet in edit mode (can happen when entering - // multiple characters very quickly after each other due to the async handling) - const replaceContents = !isEditingSelection(selection) - - tick2(() => insertActiveElementContents(refJsonEditor, char, replaceContents, refreshEditableDiv)) -} - -/** - * set two timeouts, two ticks of delay. - * This allows to perform some action in the DOM *after* Svelte has re-rendered the app for example - * WARNING: try to avoid using this function, it is tricky to rely on it. - */ -function tick2(callback: () => void) { - setTimeout(() => setTimeout(callback)) -} - -function refreshEditableDiv(element: HTMLElement) { - // We force a refresh because when changing the text of the editable div programmatically, - // the DIV doesn't get a trigger to update it's class - // TODO: come up with a better solution - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore - element?.refresh() } diff --git a/src/lib/logic/operations.ts b/src/lib/logic/operations.ts index 678b88f8..7e450585 100644 --- a/src/lib/logic/operations.ts +++ b/src/lib/logic/operations.ts @@ -678,7 +678,7 @@ export function createRemoveOperations( // there is no parent, this is the root document const operations: JSONPatchDocument = [{ op: 'replace', path: '', value: '' }] - const newSelection = createValueSelection([], false) + const newSelection = createValueSelection([]) return { operations, newSelection } } diff --git a/src/lib/logic/search.test.ts b/src/lib/logic/search.test.ts index 8b588c9b..b0362b55 100644 --- a/src/lib/logic/search.test.ts +++ b/src/lib/logic/search.test.ts @@ -331,7 +331,7 @@ describe('search', () => { } ]) - assert.deepStrictEqual(newSelection, createValueSelection(['hello world'], false)) + assert.deepStrictEqual(newSelection, createValueSelection(['hello world'])) const updatedJson = immutableJSONPatch(json, operations) assert.deepStrictEqual(updatedJson, { @@ -364,7 +364,7 @@ describe('search', () => { { op: 'move', from: '/after', path: '/after' } ]) - assert.deepStrictEqual(newSelection, createKeySelection(['hello *'], false)) + assert.deepStrictEqual(newSelection, createKeySelection(['hello *'])) const updatedJson = immutableJSONPatch(json, operations) assert.deepStrictEqual(updatedJson, { @@ -527,7 +527,7 @@ describe('search', () => { { op: 'move', from: '/after', path: '/after' } ]) - assert.deepStrictEqual(newSelection, createKeySelection(['hello *'], false)) + assert.deepStrictEqual(newSelection, createKeySelection(['hello *'])) const updatedJson = immutableJSONPatch(json, operations) assert.deepStrictEqual(updatedJson, { diff --git a/src/lib/logic/selection.test.ts b/src/lib/logic/selection.test.ts index 2b38e5ad..3ff84c54 100644 --- a/src/lib/logic/selection.test.ts +++ b/src/lib/logic/selection.test.ts @@ -80,14 +80,14 @@ describe('selection', () => { test('should expand a key selection', () => { const path = ['obj', 'arr'] - const actual = getSelectionPaths(json, createKeySelection(path, false)) + const actual = getSelectionPaths(json, createKeySelection(path)) assert.deepStrictEqual(actual, [['obj', 'arr']]) }) test('should expand a value selection', () => { const path = ['obj', 'arr'] - const actual = getSelectionPaths(json, createValueSelection(path, false)) + const actual = getSelectionPaths(json, createValueSelection(path)) assert.deepStrictEqual(actual, [['obj', 'arr']]) }) @@ -142,10 +142,10 @@ describe('selection', () => { const path2 = ['a'] assert.deepStrictEqual(findRootPath(json, createAfterSelection(path1)), path2) assert.deepStrictEqual(findRootPath(json, createInsideSelection(path1)), path2) - assert.deepStrictEqual(findRootPath(json, createKeySelection(path1, false)), path2) - assert.deepStrictEqual(findRootPath(json, createValueSelection(path1, false)), path2) - assert.deepStrictEqual(findRootPath(json, createValueSelection(path2, false)), path2) - assert.deepStrictEqual(findRootPath(json, createKeySelection(path2, false)), path2) + assert.deepStrictEqual(findRootPath(json, createKeySelection(path1)), path2) + assert.deepStrictEqual(findRootPath(json, createValueSelection(path1)), path2) + assert.deepStrictEqual(findRootPath(json, createValueSelection(path2)), path2) + assert.deepStrictEqual(findRootPath(json, createKeySelection(path2)), path2) assert.deepStrictEqual(findRootPath(json, createMultiSelection(['a'], ['a'])), path2) }) @@ -162,28 +162,28 @@ describe('selection', () => { test('getSelectionLeft', () => { assert.deepStrictEqual( - getSelectionLeft(json2, documentState2, createValueSelection(['path'], false)), - createKeySelection(['path'], false) + getSelectionLeft(json2, documentState2, createValueSelection(['path'])), + createKeySelection(['path']) ) assert.deepStrictEqual( - getSelectionLeft(json2, documentState2, createKeySelection(['path1'], false)), + getSelectionLeft(json2, documentState2, createKeySelection(['path1'])), createAfterSelection(['path']) ) assert.deepStrictEqual( getSelectionLeft(json2, documentState2, createAfterSelection(['path'])), - createValueSelection(['path'], false) + createValueSelection(['path']) ) assert.deepStrictEqual( getSelectionLeft(json2, documentState2, createInsideSelection([])), - createValueSelection([], false) + createValueSelection([]) ) assert.deepStrictEqual( getSelectionLeft(json2, documentState2, createMultiSelection(['path1'], ['path2'])), - createKeySelection(['path2'], false) + createKeySelection(['path2']) ) }) @@ -193,7 +193,7 @@ describe('selection', () => { json: json2, expand: () => false }) - const selection = createValueSelection(['1'], false) + const selection = createValueSelection(['1']) assert.deepStrictEqual( getSelectionLeft(json2, documentState2, selection), @@ -204,12 +204,7 @@ describe('selection', () => { test('getSelectionLeft: keep anchor path', () => { const keepAnchorPath = true assert.deepStrictEqual( - getSelectionLeft( - json2, - documentState2, - createValueSelection(['path'], false), - keepAnchorPath - ), + getSelectionLeft(json2, documentState2, createValueSelection(['path']), keepAnchorPath), { type: SelectionType.multi, anchorPath: ['path'], @@ -220,23 +215,23 @@ describe('selection', () => { test('getSelectionRight', () => { assert.deepStrictEqual( - getSelectionRight(json2, documentState2, createKeySelection(['path'], false)), - createValueSelection(['path'], false) + getSelectionRight(json2, documentState2, createKeySelection(['path'])), + createValueSelection(['path']) ) assert.deepStrictEqual( - getSelectionRight(json2, documentState2, createValueSelection([], false)), + getSelectionRight(json2, documentState2, createValueSelection([])), createInsideSelection([]) ) assert.deepStrictEqual( - getSelectionRight(json2, documentState2, createValueSelection(['path'], false)), + getSelectionRight(json2, documentState2, createValueSelection(['path'])), createAfterSelection(['path']) ) assert.deepStrictEqual( getSelectionRight(json2, documentState2, createAfterSelection(['path'])), - createKeySelection(['path1'], false) + createKeySelection(['path1']) ) assert.deepStrictEqual( @@ -246,19 +241,14 @@ describe('selection', () => { assert.deepStrictEqual( getSelectionRight(json2, documentState2, createMultiSelection(['path1'], ['path2'])), - createValueSelection(['path2'], false) + createValueSelection(['path2']) ) }) test('getSelectionRight: keep anchor path', () => { const keepAnchorPath = true assert.deepStrictEqual( - getSelectionRight( - json2, - documentState2, - createKeySelection(['path'], false), - keepAnchorPath - ), + getSelectionRight(json2, documentState2, createKeySelection(['path']), keepAnchorPath), { type: SelectionType.multi, anchorPath: ['path'], @@ -280,78 +270,78 @@ describe('selection', () => { test('should get selection up from KEY selection', () => { assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createKeySelection(['obj'], false)), - createKeySelection(['a'], false) + getSelectionUp(json2, documentState2, createKeySelection(['obj'])), + createKeySelection(['a']) ) assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createKeySelection(['obj', 'c'], false)), - createKeySelection(['obj'], false) + getSelectionUp(json2, documentState2, createKeySelection(['obj', 'c'])), + createKeySelection(['obj']) ) // jump from key to array value assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createKeySelection(['d'], false)), - createValueSelection(['arr', '1'], false) + getSelectionUp(json2, documentState2, createKeySelection(['d'])), + createValueSelection(['arr', '1']) ) }) test('should get selection up from VALUE selection', () => { assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createValueSelection(['obj'], false)), - createValueSelection(['a'], false) + getSelectionUp(json2, documentState2, createValueSelection(['obj'])), + createValueSelection(['a']) ) assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createValueSelection(['obj', 'c'], false)), - createValueSelection(['obj'], false) + getSelectionUp(json2, documentState2, createValueSelection(['obj', 'c'])), + createValueSelection(['obj']) ) assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createValueSelection(['d'], false)), - createValueSelection(['arr', '1'], false) + getSelectionUp(json2, documentState2, createValueSelection(['d'])), + createValueSelection(['arr', '1']) ) assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createValueSelection(['arr', '1'], false)), - createValueSelection(['arr', '0'], false) + getSelectionUp(json2, documentState2, createValueSelection(['arr', '1'])), + createValueSelection(['arr', '0']) ) }) test('should get selection up from AFTER selection', () => { assert.deepStrictEqual( getSelectionUp(json2, documentState2, createAfterSelection(['arr', '1'])), - createValueSelection(['arr', '1'], false) + createValueSelection(['arr', '1']) ) // FIXME: this should return a value selection of /obj/c instead of /obj assert.deepStrictEqual( getSelectionUp(json2, documentState2, createAfterSelection(['obj'])), - createValueSelection(['obj'], false) + createValueSelection(['obj']) ) }) test('should get selection up from INSIDE selection', () => { assert.deepStrictEqual( getSelectionUp(json2, documentState2, createInsideSelection(['arr'])), - createValueSelection(['arr'], false) + createValueSelection(['arr']) ) assert.deepStrictEqual( getSelectionUp(json2, documentState2, createInsideSelection(['obj'])), - createValueSelection(['obj'], false) + createValueSelection(['obj']) ) assert.deepStrictEqual( getSelectionUp(json2, documentState2, createInsideSelection([])), - createValueSelection([], false) + createValueSelection([]) ) }) test('should get selection up from MULTI selection', () => { assert.deepStrictEqual( getSelectionUp(json2, documentState2, createMultiSelection(['d'], ['obj'])), - createValueSelection(['a'], false) + createValueSelection(['a']) ) assert.deepStrictEqual( @@ -361,12 +351,12 @@ describe('selection', () => { assert.deepStrictEqual( getSelectionUp(json2, documentState2, createMultiSelection(['obj'], ['d'])), - createValueSelection(['a'], false) + createValueSelection(['a']) ) assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createMultiSelection(['obj'], ['d']), false), - createValueSelection(['a'], false) + getSelectionUp(json2, documentState2, createMultiSelection(['obj'], ['d'])), + createValueSelection(['a']) ) assert.deepStrictEqual( @@ -375,8 +365,8 @@ describe('selection', () => { ) assert.deepStrictEqual( - getSelectionUp(json2, documentState2, createMultiSelection(['a'], ['a']), false), - createValueSelection([], false) + getSelectionUp(json2, documentState2, createMultiSelection(['a'], ['a'])), + createValueSelection([]) ) }) }) @@ -394,70 +384,70 @@ describe('selection', () => { test('should get selection down from KEY selection', () => { assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createKeySelection(['obj'], false)), - createKeySelection(['obj', 'c'], false) + getSelectionDown(json2, documentState2, createKeySelection(['obj'])), + createKeySelection(['obj', 'c']) ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createKeySelection(['obj', 'c'], false)), - createKeySelection(['arr'], false) + getSelectionDown(json2, documentState2, createKeySelection(['obj', 'c'])), + createKeySelection(['arr']) ) // jump from key to array value assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createKeySelection(['arr'], false)), - createValueSelection(['arr', '0'], false) + getSelectionDown(json2, documentState2, createKeySelection(['arr'])), + createValueSelection(['arr', '0']) ) }) test('should get selection down from VALUE selection', () => { assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createValueSelection(['obj'], false)), - createValueSelection(['obj', 'c'], false) + getSelectionDown(json2, documentState2, createValueSelection(['obj'])), + createValueSelection(['obj', 'c']) ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createValueSelection(['obj', 'c'], false)), - createValueSelection(['arr'], false) + getSelectionDown(json2, documentState2, createValueSelection(['obj', 'c'])), + createValueSelection(['arr']) ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createValueSelection(['arr', '1'], false)), - createValueSelection(['d'], false) + getSelectionDown(json2, documentState2, createValueSelection(['arr', '1'])), + createValueSelection(['d']) ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createValueSelection(['arr', '0'], false)), - createValueSelection(['arr', '1'], false) + getSelectionDown(json2, documentState2, createValueSelection(['arr', '0'])), + createValueSelection(['arr', '1']) ) }) test('should get selection down from AFTER selection', () => { assert.deepStrictEqual( getSelectionDown(json2, documentState2, createAfterSelection(['arr', '0'])), - createValueSelection(['arr', '1'], false) + createValueSelection(['arr', '1']) ) assert.deepStrictEqual( getSelectionDown(json2, documentState2, createAfterSelection(['arr', '1'])), - createValueSelection(['d'], false) + createValueSelection(['d']) ) assert.deepStrictEqual( getSelectionDown(json2, documentState2, createAfterSelection(['obj'])), - createValueSelection(['arr'], false) + createValueSelection(['arr']) ) }) test('should get selection down from INSIDE selection', () => { assert.deepStrictEqual( getSelectionDown(json2, documentState2, createInsideSelection(['arr'])), - createValueSelection(['arr', '0'], false) + createValueSelection(['arr', '0']) ) assert.deepStrictEqual( getSelectionDown(json2, documentState2, createInsideSelection(['obj'])), - createValueSelection(['obj', 'c'], false) + createValueSelection(['obj', 'c']) ) assert.deepStrictEqual( @@ -469,12 +459,12 @@ describe('selection', () => { test('should get selection down from MULTI selection', () => { assert.deepStrictEqual( getSelectionDown(json2, documentState2, createMultiSelection(['arr'], ['a'])), - createValueSelection(['d'], false) + createValueSelection(['d']) ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createMultiSelection(['arr'], ['a']), false), - createValueSelection(['d'], false) + getSelectionDown(json2, documentState2, createMultiSelection(['arr'], ['a'])), + createValueSelection(['d']) ) assert.deepStrictEqual( @@ -483,8 +473,8 @@ describe('selection', () => { ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createMultiSelection(['a'], ['arr']), false), - createValueSelection(['d'], false) + getSelectionDown(json2, documentState2, createMultiSelection(['a'], ['arr'])), + createValueSelection(['d']) ) assert.deepStrictEqual( @@ -493,8 +483,8 @@ describe('selection', () => { ) assert.deepStrictEqual( - getSelectionDown(json2, documentState2, createMultiSelection(['arr'], ['arr']), false), - createValueSelection(['d'], false) + getSelectionDown(json2, documentState2, createMultiSelection(['arr'], ['arr'])), + createValueSelection(['d']) ) }) @@ -509,7 +499,7 @@ describe('selection', () => { const documentState3 = createDocumentState({ json: json3, expand: () => true }) assert.deepStrictEqual( - getSelectionDown(json3, documentState3, createAfterSelection(['arr']), false), + getSelectionDown(json3, documentState3, createAfterSelection(['arr'])), undefined ) }) @@ -524,48 +514,42 @@ describe('selection', () => { assert.deepStrictEqual(getInitialSelectionWithState({}), { type: SelectionType.value, - path: [], - edit: false + path: [] }) assert.deepStrictEqual(getInitialSelectionWithState([]), { type: SelectionType.value, - path: [], - edit: false + path: [] }) assert.deepStrictEqual(getInitialSelectionWithState('test'), { type: SelectionType.value, - path: [], - edit: false + path: [] }) assert.deepStrictEqual(getInitialSelectionWithState({ a: 2, b: 3 }), { type: SelectionType.key, - path: ['a'], - edit: false + path: ['a'] }) assert.deepStrictEqual(getInitialSelectionWithState({ a: {} }), { type: SelectionType.key, - path: ['a'], - edit: false + path: ['a'] }) assert.deepStrictEqual(getInitialSelectionWithState([2, 3, 4]), { type: SelectionType.value, - path: ['0'], - edit: false + path: ['0'] }) }) test('should turn selection into text', () => { assert.deepStrictEqual( - selectionToPartialJson(json, createKeySelection(['str'], false), 2, JSON), + selectionToPartialJson(json, createKeySelection(['str']), 2, JSON), 'str' ) assert.deepStrictEqual( - selectionToPartialJson(json, createValueSelection(['str'], false), 2, JSON), + selectionToPartialJson(json, createValueSelection(['str']), 2, JSON), 'hello world' ) assert.deepStrictEqual( - selectionToPartialJson(json, createValueSelection(['obj', 'arr', '1'], false), 2, JSON), + selectionToPartialJson(json, createValueSelection(['obj', 'arr', '1']), 2, JSON), '2' ) assert.deepStrictEqual( @@ -602,7 +586,7 @@ describe('selection', () => { ) assert.deepStrictEqual( - selectionToPartialJson(json, createValueSelection(['obj'], false), 2, JSON), + selectionToPartialJson(json, createValueSelection(['obj']), 2, JSON), JSON.stringify(json.obj, null, 2) ) @@ -626,12 +610,7 @@ describe('selection', () => { const objArr2 = '{\n' + ' "first": 3,\n' + ' "last": 4\n' + '}' assert.deepStrictEqual( - selectionToPartialJson( - json, - createValueSelection(['obj', 'arr', '2'], false), - indentation, - JSON - ), + selectionToPartialJson(json, createValueSelection(['obj', 'arr', '2']), indentation, JSON), objArr2 ) assert.deepStrictEqual( @@ -698,7 +677,7 @@ describe('selection', () => { createSelectionFromOperations(json, [ { op: 'replace', path: '/str', value: 'hello world (updated)' } ]), - createValueSelection(['str'], false) + createValueSelection(['str']) ) }) @@ -709,14 +688,14 @@ describe('selection', () => { { op: 'move', from: '/foo', path: '/foo' }, { op: 'move', from: '/bar', path: '/bar' } ]), - createKeySelection(['strRenamed'], false) + createKeySelection(['strRenamed']) ) }) test('should get selection from renaming the last key of an object', () => { assert.deepStrictEqual( createSelectionFromOperations(json, [{ op: 'move', from: '/arr', path: '/arrRenamed' }]), - createKeySelection(['arrRenamed'], false) + createKeySelection(['arrRenamed']) ) }) @@ -730,7 +709,7 @@ describe('selection', () => { test('should get selection from inserting a new root document', () => { assert.deepStrictEqual( createSelectionFromOperations(json, [{ op: 'replace', path: '', value: 'test' }]), - createValueSelection([], false) + createValueSelection([]) ) }) }) @@ -763,7 +742,7 @@ describe('selection', () => { describe('selectionIfOverlapping', () => { test('should determine whether a KeySelection is relevant for given pointer', () => { - const selection = createKeySelection(['obj', 'arr'], false) + const selection = createKeySelection(['obj', 'arr']) assert.deepStrictEqual(selectionIfOverlapping(json, selection, []), selection) assert.deepStrictEqual(selectionIfOverlapping(json, selection, ['obj']), selection) @@ -775,7 +754,7 @@ describe('selection', () => { }) test('should determine whether a ValueSelection is relevant for given pointer', () => { - const selection = createValueSelection(['obj', 'arr'], false) + const selection = createValueSelection(['obj', 'arr']) assert.deepStrictEqual(selectionIfOverlapping(json, selection, []), selection) assert.deepStrictEqual(selectionIfOverlapping(json, selection, ['obj']), selection) @@ -844,14 +823,14 @@ describe('selection', () => { describe('pathInSelection', () => { test('should determine path in selection for a KeySelection', () => { - const selection = createKeySelection(['obj'], false) + const selection = createKeySelection(['obj']) assert.strictEqual(pathInSelection(json, selection, ['obj']), true) assert.strictEqual(pathInSelection(json, selection, ['str']), false) assert.strictEqual(pathInSelection(json, selection, ['obj', 'arr', '1']), false) }) test('should determine path in selection for a ValueSelection', () => { - const selection = createValueSelection(['obj'], false) + const selection = createValueSelection(['obj']) assert.strictEqual(pathInSelection(json, selection, ['obj']), true) assert.strictEqual(pathInSelection(json, selection, ['str']), false) assert.strictEqual(pathInSelection(json, selection, ['obj', 'arr', '1']), true) diff --git a/src/lib/logic/selection.ts b/src/lib/logic/selection.ts index 04407ffa..90aa533b 100644 --- a/src/lib/logic/selection.ts +++ b/src/lib/logic/selection.ts @@ -22,6 +22,8 @@ import type { AfterSelection, CaretPosition, DocumentState, + EditKeySelection, + EditValueSelection, InsideSelection, JSONEditorSelection, JSONParser, @@ -246,12 +248,12 @@ export function getSelectionUp( if (isAfterSelection(selection)) { // select the node itself, not the previous node, // FIXME: when after an expanded object/array, should go to the last item inside the object/array - return createValueSelection(focusPath, false) + return createValueSelection(focusPath) } if (isInsideSelection(selection)) { // select the node itself, not the previous node, - return createValueSelection(focusPath, false) + return createValueSelection(focusPath) } if (isKeySelection(selection)) { @@ -263,18 +265,18 @@ export function getSelectionUp( const parent = getIn(json, parentPath) if (Array.isArray(parent) || isEmpty(previousPath)) { // switch to value selection: array has no keys, and root object also not - return createValueSelection(previousPath, false) + return createValueSelection(previousPath) } else { - return createKeySelection(previousPath, false) + return createKeySelection(previousPath) } } if (isValueSelection(selection)) { - return previousPath !== undefined ? createValueSelection(previousPath, false) : undefined + return previousPath !== undefined ? createValueSelection(previousPath) : undefined } if (previousPath !== undefined) { - return createValueSelection(previousPath, false) + return createValueSelection(previousPath) } return undefined @@ -318,15 +320,15 @@ export function getSelectionDown( } if (isAfterSelection(selection)) { - return nextPathAfter !== undefined ? createValueSelection(nextPathAfter, false) : undefined + return nextPathAfter !== undefined ? createValueSelection(nextPathAfter) : undefined } if (isInsideSelection(selection)) { - return nextPath !== undefined ? createValueSelection(nextPath, false) : undefined + return nextPath !== undefined ? createValueSelection(nextPath) : undefined } if (isValueSelection(selection)) { - return nextPath !== undefined ? createValueSelection(nextPath, false) : undefined + return nextPath !== undefined ? createValueSelection(nextPath) : undefined } if (isKeySelection(selection)) { @@ -338,17 +340,17 @@ export function getSelectionDown( const parent = getIn(json, parentPath) if (Array.isArray(parent)) { // switch to value selection: array has no keys - return createValueSelection(nextPath, false) + return createValueSelection(nextPath) } else { - return createKeySelection(nextPath, false) + return createKeySelection(nextPath) } } if (isMultiSelection(selection)) { return nextPathAfter !== undefined - ? createValueSelection(nextPathAfter, false) + ? createValueSelection(nextPathAfter) : nextPath !== undefined - ? createValueSelection(nextPath, false) + ? createValueSelection(nextPath) : undefined } @@ -373,7 +375,7 @@ export function getSelectionNextInside( const nextPathInside = parent ? getNextVisiblePath(parent, documentState, childPath) : undefined if (nextPathInside) { - return createValueSelection(parentPath.concat(nextPathInside), false) + return createValueSelection(parentPath.concat(nextPathInside)) } else { return createAfterSelection(path) } @@ -449,7 +451,7 @@ export function getSelectionLeft( } if (isMultiSelection(selection) && !Array.isArray(parent)) { - return createKeySelection(selection.focusPath, false) + return createKeySelection(selection.focusPath) } return undefined @@ -481,7 +483,7 @@ export function getSelectionRight( } if (isMultiSelection(selection)) { - return createValueSelection(selection.focusPath, false) + return createValueSelection(selection.focusPath) } return undefined @@ -507,8 +509,8 @@ export function getInitialSelection( const path = visiblePaths[index] return path === undefined || path.length === 0 || Array.isArray(getIn(json, initial(path))) - ? createValueSelection(path, false) // Array items and root object/array do not have a key, so select value in that case - : createKeySelection(path, false) + ? createValueSelection(path) // Array items and root object/array do not have a key, so select value in that case + : createKeySelection(path) } export function createSelectionFromOperations( @@ -521,7 +523,7 @@ export function createSelectionFromOperations( // a replaced value const path = parsePath(json, operation.path) - return createValueSelection(path, false) + return createValueSelection(path) } } @@ -537,7 +539,7 @@ export function createSelectionFromOperations( // a renamed key const path = parsePath(json, firstOp.path) - return createKeySelection(path, false) + return createKeySelection(path) } } @@ -611,27 +613,31 @@ export function pathStartsWith(path: JSONPath, parentPath: JSONPath): boolean { export function removeEditModeFromSelection( selection: JSONSelection | undefined ): JSONSelection | undefined { - if ((isKeySelection(selection) || isValueSelection(selection)) && selection.edit) { - return { ...selection, edit: false } + if (isEditingSelection(selection)) { + const { type, path } = selection + return { type, path } as KeySelection | ValueSelection } return selection } -export function createKeySelection(path: JSONPath, edit: boolean): KeySelection { - return { - type: SelectionType.key, - path, - edit - } +export function createKeySelection(path: JSONPath): KeySelection { + return { type: SelectionType.key, path } } -export function createValueSelection(path: JSONPath, edit: boolean): ValueSelection { - return { - type: SelectionType.value, - path, - edit - } +export function createEditKeySelection(path: JSONPath, initialValue?: string): EditKeySelection { + return { type: SelectionType.key, path, edit: true, initialValue } +} + +export function createValueSelection(path: JSONPath): ValueSelection { + return { type: SelectionType.value, path } +} + +export function createEditValueSelection( + path: JSONPath, + initialValue?: string +): EditValueSelection { + return { type: SelectionType.value, path, edit: true, initialValue } } export function createInsideSelection(path: JSONPath): InsideSelection { @@ -715,8 +721,13 @@ export function selectionToPartialJson( return undefined } -export function isEditingSelection(selection: JSONSelection | undefined): boolean { - return (isKeySelection(selection) || isValueSelection(selection)) && selection.edit === true +export function isEditingSelection( + selection: JSONSelection | undefined +): selection is EditKeySelection | EditValueSelection { + return ( + (isKeySelection(selection) || isValueSelection(selection)) && + (selection as Record).edit === true + ) } /** @@ -724,7 +735,7 @@ export function isEditingSelection(selection: JSONSelection | undefined): boolea */ // TODO: write unit tests export function selectAll(): JSONSelection { - return createValueSelection([], false) + return createValueSelection([]) } // TODO: write unit tests @@ -749,9 +760,9 @@ export function canConvert(selection: JSONSelection | undefined): boolean { export function fromCaretPosition(caretPosition: CaretPosition): JSONSelection { switch (caretPosition.type) { case CaretType.key: - return createKeySelection(caretPosition.path, false) + return createKeySelection(caretPosition.path) case CaretType.value: - return createValueSelection(caretPosition.path, false) + return createValueSelection(caretPosition.path) case CaretType.after: return createAfterSelection(caretPosition.path) case CaretType.inside: @@ -764,9 +775,9 @@ export function fromCaretPosition(caretPosition: CaretPosition): JSONSelection { export function fromSelectionType(selectionType: SelectionType, path: JSONPath): JSONSelection { switch (selectionType) { case SelectionType.key: - return createKeySelection(path, false) + return createKeySelection(path) case SelectionType.value: - return createValueSelection(path, false) + return createValueSelection(path) case SelectionType.after: return createAfterSelection(path) case SelectionType.inside: diff --git a/src/lib/logic/table.test.ts b/src/lib/logic/table.test.ts index fa64812e..6cc83ca5 100644 --- a/src/lib/logic/table.test.ts +++ b/src/lib/logic/table.test.ts @@ -172,49 +172,49 @@ describe('table', () => { test('selectPreviousRow', () => { deepStrictEqual( - selectPreviousRow(columns, createValueSelection(['2', 'id'], false)), - createValueSelection(['1', 'id'], false) + selectPreviousRow(columns, createValueSelection(['2', 'id'])), + createValueSelection(['1', 'id']) ) deepStrictEqual( - selectPreviousRow(columns, createValueSelection(['0', 'id'], false)), - createValueSelection(['0', 'id'], false) + selectPreviousRow(columns, createValueSelection(['0', 'id'])), + createValueSelection(['0', 'id']) ) }) test('selectNextRow', () => { deepStrictEqual( - selectNextRow(json, columns, createValueSelection(['0', 'id'], false)), - createValueSelection(['1', 'id'], false) + selectNextRow(json, columns, createValueSelection(['0', 'id'])), + createValueSelection(['1', 'id']) ) deepStrictEqual( - selectNextRow(json, columns, createValueSelection(['1', 'id'], false)), - createValueSelection(['1', 'id'], false) + selectNextRow(json, columns, createValueSelection(['1', 'id'])), + createValueSelection(['1', 'id']) ) }) test('selectPreviousColumn', () => { deepStrictEqual( - selectPreviousColumn(columns, createValueSelection(['2', 'name'], false)), - createValueSelection(['2', 'id'], false) + selectPreviousColumn(columns, createValueSelection(['2', 'name'])), + createValueSelection(['2', 'id']) ) deepStrictEqual( - selectPreviousColumn(columns, createValueSelection(['2', 'id'], false)), - createValueSelection(['2', 'id'], false) + selectPreviousColumn(columns, createValueSelection(['2', 'id'])), + createValueSelection(['2', 'id']) ) }) test('selectNextColumn', () => { deepStrictEqual( - selectNextColumn(columns, createValueSelection(['2', 'id'], false)), - createValueSelection(['2', 'name'], false) + selectNextColumn(columns, createValueSelection(['2', 'id'])), + createValueSelection(['2', 'name']) ) deepStrictEqual( - selectNextColumn(columns, createValueSelection(['2', 'other'], false)), - createValueSelection(['2', 'other'], false) + selectNextColumn(columns, createValueSelection(['2', 'other'])), + createValueSelection(['2', 'other']) ) }) diff --git a/src/lib/logic/table.ts b/src/lib/logic/table.ts index b9c6aac8..0766ce93 100644 --- a/src/lib/logic/table.ts +++ b/src/lib/logic/table.ts @@ -269,7 +269,7 @@ export function selectPreviousRow(columns: JSONPath[], selection: JSONSelection) if (rowIndex > 0) { const previousPosition = { rowIndex: rowIndex - 1, columnIndex } const previousPath = fromTableCellPosition(previousPosition, columns) - return createValueSelection(previousPath, false) + return createValueSelection(previousPath) } return selection @@ -285,7 +285,7 @@ export function selectNextRow( if (rowIndex < (json as Array).length - 1) { const nextPosition = { rowIndex: rowIndex + 1, columnIndex } const nextPath = fromTableCellPosition(nextPosition, columns) - return createValueSelection(nextPath, false) + return createValueSelection(nextPath) } return selection @@ -297,7 +297,7 @@ export function selectPreviousColumn(columns: JSONPath[], selection: JSONSelecti if (columnIndex > 0) { const previousPosition = { rowIndex, columnIndex: columnIndex - 1 } const previousPath = fromTableCellPosition(previousPosition, columns) - return createValueSelection(previousPath, false) + return createValueSelection(previousPath) } return selection @@ -309,7 +309,7 @@ export function selectNextColumn(columns: JSONPath[], selection: JSONSelection): if (columnIndex < columns.length - 1) { const nextPosition = { rowIndex, columnIndex: columnIndex + 1 } const nextPath = fromTableCellPosition(nextPosition, columns) - return createValueSelection(nextPath, false) + return createValueSelection(nextPath) } return selection diff --git a/src/lib/plugins/value/components/EditableValue.svelte b/src/lib/plugins/value/components/EditableValue.svelte index 4ff13c14..4375b5b0 100644 --- a/src/lib/plugins/value/components/EditableValue.svelte +++ b/src/lib/plugins/value/components/EditableValue.svelte @@ -4,12 +4,13 @@ import type { JSONPatchDocument, JSONPath } from 'immutable-json-patch' import { compileJSONPointer } from 'immutable-json-patch' import { isObjectOrArray, stringConvert } from '$lib/utils/typeUtils.js' - import { createValueSelection, getFocusPath } from '$lib/logic/selection.js' + import { createValueSelection, getFocusPath, isEditingSelection } from '$lib/logic/selection.js' import { getValueClass } from '$lib/plugins/value/components/utils/getValueClass.js' import EditableDiv from '../../../components/controls/EditableDiv.svelte' import type { FindNextInside, JSONParser, + JSONSelection, OnFind, OnJSONSelect, OnPasteJson, @@ -22,6 +23,7 @@ export let path: JSONPath export let value: unknown + export let selection: JSONSelection | undefined export let parser: JSONParser export let normalization: ValueNormalization export let enforceString: boolean @@ -56,7 +58,7 @@ const selection = updateSelection === UpdateSelectionAfterChange.nextInside ? findNextInside(path) - : createValueSelection(path, false) + : createValueSelection(path) return { state: patchedState, @@ -69,7 +71,7 @@ } function handleCancelChange() { - onSelect(createValueSelection(path, false)) + onSelect(createValueSelection(path)) focus() } @@ -112,6 +114,7 @@ import { isUrl } from '$lib/utils/typeUtils.js' - import { createValueSelection } from '$lib/logic/selection.js' + import { createEditValueSelection } from '$lib/logic/selection.js' import SearchResultHighlighter from '../../../components/modes/treemode/highlight/SearchResultHighlighter.svelte' import { getValueClass } from './utils/getValueClass.js' import { addNewLineSuffix } from '$lib/utils/domUtils.js' @@ -38,7 +38,7 @@ function handleValueDoubleClick(event: MouseEvent) { if (!readOnly) { event.preventDefault() - onSelect(createValueSelection(path, true)) + onSelect(createEditValueSelection(path)) } } diff --git a/src/lib/plugins/value/renderValue.ts b/src/lib/plugins/value/renderValue.ts index 7ee124c1..75441f3c 100644 --- a/src/lib/plugins/value/renderValue.ts +++ b/src/lib/plugins/value/renderValue.ts @@ -1,15 +1,16 @@ -import { isBoolean, isColor, isTimestamp } from '../../utils/typeUtils.js' +import { isBoolean, isColor, isTimestamp } from '$lib/utils/typeUtils.js' +import type { RenderValueComponentDescription, RenderValueProps } from '$lib/types' import BooleanToggle from './components/BooleanToggle.svelte' import ColorPicker from './components/ColorPicker.svelte' import EditableValue from './components/EditableValue.svelte' import ReadonlyValue from './components/ReadonlyValue.svelte' import TimestampTag from './components/TimestampTag.svelte' -import type { RenderValueComponentDescription, RenderValueProps } from '../../types' export function renderValue({ path, value, readOnly, + selection, enforceString, searchResultItems, isEditing, @@ -44,6 +45,7 @@ export function renderValue({ props: { path, value, + selection, enforceString, parser, normalization, diff --git a/src/lib/types.ts b/src/lib/types.ts index 876d4723..9ddc9be0 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -201,13 +201,25 @@ export interface InsideSelection { export interface KeySelection { type: SelectionType.key path: JSONPath - edit?: boolean } -export interface ValueSelection { +export interface EditKeySelection extends KeySelection { + type: SelectionType.key + path: JSONPath + edit: true + initialValue?: string +} + +export type ValueSelection = { + type: SelectionType.value + path: JSONPath +} + +export interface EditValueSelection extends ValueSelection { type: SelectionType.value path: JSONPath - edit?: boolean + edit: true + initialValue?: string } export type JSONSelection = @@ -215,7 +227,9 @@ export type JSONSelection = | AfterSelection | InsideSelection | KeySelection + | EditKeySelection | ValueSelection + | EditValueSelection // TextSelection is the result of EditorSelection.toJSON() from CodeMirror, // with an additional `type` property diff --git a/src/lib/utils/domUtils.ts b/src/lib/utils/domUtils.ts index feeabdbf..5dd1d837 100644 --- a/src/lib/utils/domUtils.ts +++ b/src/lib/utils/domUtils.ts @@ -223,33 +223,6 @@ export function setCursorToEnd(element: HTMLElement) { selection?.addRange(range) } -/** - * Insert (append or replace) the text contents of the current active element - */ -export function insertActiveElementContents( - container: HTMLElement, - text: string, - replaceContents: boolean, - onActiveElement?: (activeElement: HTMLElement) => void -) { - const window = getWindow(container) - if (!window) { - return - } - - const activeElement: HTMLElement | undefined = window.document.activeElement - ? (window.document.activeElement as HTMLElement) - : undefined - - if (activeElement && activeElement.isContentEditable) { - activeElement.textContent = replaceContents ? text : activeElement.textContent + text - setCursorToEnd(activeElement) - if (onActiveElement) { - onActiveElement(activeElement) - } - } -} - /** * Gets a DOM element's Window. This is normally just the global `window` * variable, but if we opened a child window, it may be different. diff --git a/src/routes/components/EditableValueInput.svelte b/src/routes/components/EditableValueInput.svelte index c0aa8fd6..e0b7d495 100644 --- a/src/routes/components/EditableValueInput.svelte +++ b/src/routes/components/EditableValueInput.svelte @@ -64,7 +64,7 @@ } function cancel() { - onSelect(createValueSelection(path, false)) + onSelect(createValueSelection(path)) focus() } diff --git a/src/routes/components/EvaluatorAction.ts b/src/routes/components/EvaluatorAction.ts index 2fcc9d44..5fb226e2 100644 --- a/src/routes/components/EvaluatorAction.ts +++ b/src/routes/components/EvaluatorAction.ts @@ -1,6 +1,7 @@ -import { createValueSelection, type OnJSONSelect } from 'svelte-jsoneditor' +import { type OnJSONSelect } from 'svelte-jsoneditor' import type { Action } from 'svelte/action' import { type JSONPath } from 'immutable-json-patch' +import { createEditValueSelection } from '$lib/logic/selection' export interface EvaluatorActionProps { value: unknown @@ -25,7 +26,7 @@ export const EvaluatorAction: Action> = event.stopPropagation() // open in edit mode - props.onSelect(createValueSelection(props.path, true)) + props.onSelect(createEditValueSelection(props.path)) } } diff --git a/src/routes/development/+page.svelte b/src/routes/development/+page.svelte index bd0161bf..11df2a21 100644 --- a/src/routes/development/+page.svelte +++ b/src/routes/development/+page.svelte @@ -663,7 +663,7 @@
@@ -439,7 +463,7 @@ exports[`JSONEditor > render table mode 1`] = ` class="jse-table-invisible-end-section" > {/each} {#if showRefreshButton} diff --git a/src/lib/components/modes/tablemode/tag/InlineValue.scss b/src/lib/components/modes/tablemode/tag/InlineValue.scss index 59bfc007..a01a6011 100644 --- a/src/lib/components/modes/tablemode/tag/InlineValue.scss +++ b/src/lib/components/modes/tablemode/tag/InlineValue.scss @@ -8,15 +8,7 @@ padding: 0 $padding-half; background: transparent; color: inherit; - cursor: pointer; - - &:hover { - background: $hover-background-color; - } - - &.jse-selected { - background: $selection-background-color; - } + cursor: inherit; &.jse-highlight { background-color: $search-match-color; diff --git a/src/lib/components/modes/treemode/CollapsedItems.scss b/src/lib/components/modes/treemode/CollapsedItems.scss index eef165f4..4c946620 100644 --- a/src/lib/components/modes/treemode/CollapsedItems.scss +++ b/src/lib/components/modes/treemode/CollapsedItems.scss @@ -39,6 +39,11 @@ div.jse-collapsed-items { display: flex; + &.jse-selected { + background-color: $selection-background-color; + --jse-collapsed-items-background-color: #{$collapsed-items-selected-background-color}; + } + div.jse-text, button.jse-expand-items { margin: 0 $padding-half; diff --git a/src/lib/components/modes/treemode/JSONKey.scss b/src/lib/components/modes/treemode/JSONKey.scss index 33f7a9c9..f842022e 100644 --- a/src/lib/components/modes/treemode/JSONKey.scss +++ b/src/lib/components/modes/treemode/JSONKey.scss @@ -9,20 +9,11 @@ border-radius: 1px; vertical-align: top; color: $key-color; - cursor: $contents-cursor; word-break: normal; overflow-wrap: normal; // not anywhere as for JSONValue white-space: pre-wrap; // important for rendering multiple consecutive spaces - &:hover { - background: $hover-background-color; - } - - &:hover { - background: $hover-background-color; - } - &.jse-empty { min-width: 3em; outline: 1px dotted $tag-background; diff --git a/src/lib/components/modes/treemode/JSONKey.svelte b/src/lib/components/modes/treemode/JSONKey.svelte index db393d43..cb33f7bf 100644 --- a/src/lib/components/modes/treemode/JSONKey.svelte +++ b/src/lib/components/modes/treemode/JSONKey.svelte @@ -16,7 +16,6 @@ import { UpdateSelectionAfterChange } from '$lib/types.js' import { type JSONPath, type JSONPointer, parseJSONPointer } from 'immutable-json-patch' import ContextMenuPointer from '../../../components/controls/contextmenu/ContextMenuPointer.svelte' - import { classnames } from '$lib/utils/cssUtils.js' export let pointer: JSONPointer export let key: string @@ -41,12 +40,6 @@ } } - function getKeyClass(key: string) { - return classnames('jse-key', { - 'jse-empty': key === '' - }) - } - function handleChangeValue(newKey: string, updateSelection: UpdateSelectionAfterChange) { const updatedKey = onUpdateKey(key, context.normalization.unescapeValue(newKey)) const updatedPath = initial(path).concat(updatedKey) @@ -82,7 +75,8 @@
{#if searchResultItems} diff --git a/src/lib/components/modes/treemode/JSONNode.scss b/src/lib/components/modes/treemode/JSONNode.scss index ce0f36f8..769a5a03 100644 --- a/src/lib/components/modes/treemode/JSONNode.scss +++ b/src/lib/components/modes/treemode/JSONNode.scss @@ -74,12 +74,6 @@ padding-bottom: $contents-padding; box-sizing: border-box; - > .jse-header-outer :global(.jse-context-menu-pointer), - > .jse-contents-outer > .jse-contents :global(.jse-context-menu-pointer) { - top: 0; - right: calc(-2px - $context-menu-pointer-size); - } - > .jse-contents-outer > .jse-contents { padding-left: 0; } @@ -123,6 +117,11 @@ .jse-contents { padding-left: $indent-size; + cursor: $contents-cursor; + + .jse-value-outer { + display: inline-flex; + } } .jse-footer { @@ -137,7 +136,6 @@ } .jse-insert-selection-area { - visibility: hidden; padding: 0 $padding-half; flex: 1; // must fill all left over space at the right side of the editor, so you can click there @@ -171,97 +169,68 @@ margin-right: $padding-half; outline: $height-half solid; // color depends on hovered/selected/inactive+selected - :global(.jse-context-menu-pointer) { - right: -$height-half; - background: $context-menu-pointer-hover-background; - } - &.jse-hovered { outline-color: $context-menu-pointer-hover-background; } } - &:hover > .jse-contents-outer .jse-insert-selection-area:not(.jse-selected), - .jse-header-outer:hover > .jse-insert-selection-area:not(.jse-selected), - .jse-footer-outer:hover .jse-insert-selection-area:not(.jse-selected) { - visibility: visible; + .jse-key-outer { + position: relative; } - &.jse-hovered { - > .jse-header-outer > .jse-header > .jse-meta, - .jse-props .jse-header, - .jse-items .jse-header, - .jse-props .jse-contents, - .jse-items .jse-contents, - .jse-footer { + .jse-key-outer, + .jse-value-outer, + .jse-meta, + .jse-footer { + &:hover { background: $hover-background-color; + cursor: $contents-cursor; } } - // TODO: simplify the styling for selected keys/values/multi (get rid of globals?) - - // entry selected (key and value) + // key and value selected &.jse-selected { - > .jse-header-outer > .jse-header > .jse-meta, - .jse-props .jse-header, - .jse-items .jse-header, - .jse-props .jse-contents, - .jse-items .jse-contents, .jse-header, .jse-contents, - .jse-footer, - :global(.jse-key), - :global(.jse-value) { + .jse-footer { background: $selection-background-color; cursor: $contents-selected-cursor; } - .jse-expand { - background: $selection-background-color; + .jse-key-outer, + .jse-value-outer, + .jse-meta, + .jse-footer { + &:hover { + background: inherit; + cursor: inherit; + } } } // key selected - &.jse-selected-key { - > .jse-contents-outer > .jse-contents > :global(.jse-identifier) > :global(.jse-key), - > .jse-header-outer > .jse-header > :global(.jse-identifier) > :global(.jse-key) { - background: $selection-background-color; - cursor: $contents-selected-cursor; - } - } - - // value selected (part 1) - &.jse-selected-value > .jse-contents-outer > .jse-contents > :global(.jse-value) { + .jse-key-outer.jse-selected-key { background: $selection-background-color; cursor: $contents-selected-cursor; } - :global(.jse-collapsed-items.jse-selected), - &.jse-selected :global(.jse-collapsed-items), - &.jse-selected-value :global(.jse-collapsed-items) { - background-color: $selection-background-color; - --jse-collapsed-items-background-color: #{$collapsed-items-selected-background-color}; - } - - // value selected (part 2) + // value selected &.jse-selected-value { + .jse-value-outer, .jse-meta, - > .jse-header-outer > .jse-header > .jse-meta, - > .jse-footer-outer > .jse-footer, - .jse-props .jse-contents, - .jse-props .jse-header, - .jse-props .jse-footer, - .jse-props .jse-expand, - .jse-items .jse-contents, .jse-items .jse-header, - .jse-items .jse-footer, - .jse-items .jse-expand { + .jse-items .jse-contents, + .jse-props .jse-header, + .jse-props .jse-contents, + .jse-footer { background: $selection-background-color; + cursor: $contents-selected-cursor; + } - :global(.jse-key), - :global(.jse-value) { - background: $selection-background-color; - cursor: $contents-selected-cursor; + .jse-key-outer { + &:hover { + background: inherit; + cursor: inherit; } } } @@ -275,24 +244,4 @@ outline-color: $context-menu-pointer-background; } } - - .jse-insert-area { - &.jse-selected { - :global(.jse-context-menu-pointer) { - background: $context-menu-pointer-background; - - &:hover { - background: $context-menu-pointer-background-highlight; - } - } - } - } -} - -// lighter selection color when the editor doesn't have focus -:global(.jse-main:not(.jse-focus)) { - .jse-json-node { - --jse-selection-background-color: #{$selection-background-inactive-color}; - --jse-context-menu-pointer-background: #{$context-menu-pointer-hover-background}; - } } diff --git a/src/lib/components/modes/treemode/JSONNode.svelte b/src/lib/components/modes/treemode/JSONNode.svelte index c21077af..fbc3126d 100644 --- a/src/lib/components/modes/treemode/JSONNode.svelte +++ b/src/lib/components/modes/treemode/JSONNode.svelte @@ -573,7 +573,6 @@ style:--level={path.length} class:jse-root={root} class:jse-selected={isNodeSelected && isMultiSelection(selection)} - class:jse-selected-key={isNodeSelected && isKeySelection(selection)} class:jse-selected-value={isNodeSelected && isValueSelection(selection)} class:jse-readonly={context.readOnly} class:jse-hovered={hover === HOVER_COLLECTION} @@ -624,7 +623,7 @@
{#if !context.readOnly && isNodeSelected && selection && (isValueSelection(selection) || isMultiSelection(selection)) && !isEditingSelection(selection) && isEqual(getFocusPath(selection), path)}
- +
{/if} @@ -659,6 +658,7 @@ title={INSERT_EXPLANATION} > @@ -755,7 +755,7 @@ {#if !context.readOnly && isNodeSelected && selection && (isValueSelection(selection) || isMultiSelection(selection)) && !isEditingSelection(selection) && isEqual(getFocusPath(selection), path)}
- +
{/if} @@ -790,6 +790,7 @@ title={INSERT_EXPLANATION} > @@ -806,10 +807,12 @@ ? validationErrors.properties[key] : undefined} + {@const nestedPath = path.concat(key)} + {@const nestedSelection = selectionIfOverlapping( context.getJson(), selection, - path.concat(key) + nestedPath )} -
+
:
{/if} - +
+ +
{#if !context.readOnly && isNodeSelected && selection && (isValueSelection(selection) || isMultiSelection(selection)) && !isEditingSelection(selection) && isEqual(getFocusPath(selection), path)}
- +
{/if}
@@ -892,6 +902,7 @@ title={INSERT_EXPLANATION} > diff --git a/src/lib/components/modes/treemode/JSONValue.svelte b/src/lib/components/modes/treemode/JSONValue.svelte index 9a534381..6435a992 100644 --- a/src/lib/components/modes/treemode/JSONValue.svelte +++ b/src/lib/components/modes/treemode/JSONValue.svelte @@ -18,6 +18,7 @@ $: renderers = context.onRenderValue({ path, value, + mode: context.mode, readOnly: context.readOnly, enforceString, isEditing, diff --git a/src/lib/components/modes/treemode/TreeMode.svelte b/src/lib/components/modes/treemode/TreeMode.svelte index 9e3e8475..d336298a 100644 --- a/src/lib/components/modes/treemode/TreeMode.svelte +++ b/src/lib/components/modes/treemode/TreeMode.svelte @@ -1814,6 +1814,7 @@ // it should only change when a config option like readOnly or onClassName is changed let context: TreeModeContext $: context = { + mode: Mode.tree, readOnly, parser, normalization, diff --git a/src/lib/logic/documentState.test.ts b/src/lib/logic/documentState.test.ts index e71243aa..c9af9bcf 100644 --- a/src/lib/logic/documentState.test.ts +++ b/src/lib/logic/documentState.test.ts @@ -8,6 +8,7 @@ import { createDocumentState, createObjectDocumentState, createValueDocumentState, + deleteInDocumentState, documentStateFactory, documentStatePatch, ensureRecursiveState, @@ -1892,6 +1893,29 @@ describe('documentState', () => { }) }) }) + + describe('deleteInDocumentState', () => { + const json = { value: '42' } + const documentState: DocumentState = { + type: 'object', + expanded: true, + properties: { + value: { type: 'value', enforceString: true } + } + } + + test('delete existing state', () => { + expect(deleteInDocumentState(json, documentState, ['value'])).toEqual({ + type: 'object', + expanded: true, + properties: {} + }) + }) + + test('delete non-existing state', () => { + expect(deleteInDocumentState(json, documentState, ['foo'])).toEqual(documentState) + }) + }) }) /** diff --git a/src/lib/logic/documentState.ts b/src/lib/logic/documentState.ts index 81ef91ee..0763bceb 100644 --- a/src/lib/logic/documentState.ts +++ b/src/lib/logic/documentState.ts @@ -1,6 +1,7 @@ import { compileJSONPointer, deleteIn, + existsIn, getIn, immutableJSONPatch, isJSONArray, @@ -555,7 +556,11 @@ export function deleteInDocumentState( documentState: T | undefined, path: JSONPath ): T | undefined { - return deleteIn(documentState, toRecursiveStatePath(json, path)) + const recursivePath = toRecursiveStatePath(json, path) + + return existsIn(documentState, recursivePath) + ? deleteIn(documentState, toRecursiveStatePath(json, path)) + : documentState } export function documentStateAdd( diff --git a/src/lib/plugins/value/components/EditableValue.svelte b/src/lib/plugins/value/components/EditableValue.svelte index 4375b5b0..ef9b990a 100644 --- a/src/lib/plugins/value/components/EditableValue.svelte +++ b/src/lib/plugins/value/components/EditableValue.svelte @@ -7,23 +7,25 @@ import { createValueSelection, getFocusPath, isEditingSelection } from '$lib/logic/selection.js' import { getValueClass } from '$lib/plugins/value/components/utils/getValueClass.js' import EditableDiv from '../../../components/controls/EditableDiv.svelte' - import type { - FindNextInside, - JSONParser, - JSONSelection, - OnFind, - OnJSONSelect, - OnPasteJson, - OnPatch, - ValueNormalization + import { + type FindNextInside, + type JSONParser, + type JSONSelection, + Mode, + type OnFind, + type OnJSONSelect, + type OnPasteJson, + type OnPatch, + UpdateSelectionAfterChange, + type ValueNormalization } from '$lib/types.js' - import { UpdateSelectionAfterChange } from '$lib/types.js' import { isEqual } from 'lodash-es' import { expandSmart } from '$lib/logic/documentState' export let path: JSONPath export let value: unknown export let selection: JSONSelection | undefined + export let mode: Mode export let parser: JSONParser export let normalization: ValueNormalization export let enforceString: boolean @@ -108,7 +110,7 @@ } function handleOnValueClass(value: string): string { - return getValueClass(convert(normalization.unescapeValue(value)), parser) + return getValueClass(convert(normalization.unescapeValue(value)), mode, parser) } diff --git a/src/lib/plugins/value/components/EnumValue.scss b/src/lib/plugins/value/components/EnumValue.scss index edd2da04..11fd7945 100644 --- a/src/lib/plugins/value/components/EnumValue.scss +++ b/src/lib/plugins/value/components/EnumValue.scss @@ -22,9 +22,3 @@ color: $text-color; } } - -:global(.jse-json-node.jse-selected) { - .jse-enum-value { - background: transparent; - } -} diff --git a/src/lib/plugins/value/components/ReadonlyValue.scss b/src/lib/plugins/value/components/ReadonlyValue.scss index 9b6205f7..0b70734d 100644 --- a/src/lib/plugins/value/components/ReadonlyValue.scss +++ b/src/lib/plugins/value/components/ReadonlyValue.scss @@ -3,20 +3,21 @@ // TODO: also share most of the following styling with EditableDiv .jse-value { + display: inline-block; min-width: 2em; padding: 0 $input-padding; box-sizing: border-box; outline: none; border-radius: 1px; vertical-align: top; - cursor: $contents-cursor; word-break: normal; overflow-wrap: anywhere; white-space: pre-wrap; // important for rendering multiple consecutive spaces - &:hover { - background: $hover-background-color; + &.jse-table-cell { + overflow-wrap: normal; + white-space: nowrap; } &.jse-empty { diff --git a/src/lib/plugins/value/components/ReadonlyValue.svelte b/src/lib/plugins/value/components/ReadonlyValue.svelte index 0d53cd38..07fb9d36 100644 --- a/src/lib/plugins/value/components/ReadonlyValue.svelte +++ b/src/lib/plugins/value/components/ReadonlyValue.svelte @@ -6,17 +6,19 @@ import SearchResultHighlighter from '../../../components/modes/treemode/highlight/SearchResultHighlighter.svelte' import { getValueClass } from './utils/getValueClass.js' import { addNewLineSuffix } from '$lib/utils/domUtils.js' - import type { - ExtendedSearchResultItem, - JSONParser, - OnJSONSelect, - ValueNormalization + import { + type ExtendedSearchResultItem, + type JSONParser, + Mode, + type OnJSONSelect, + type ValueNormalization } from '$lib/types.js' import type { JSONPath } from 'immutable-json-patch' import { isCtrlKeyDown } from 'svelte-jsoneditor/utils/keyBindings' export let path: JSONPath export let value: unknown + export let mode: Mode export let readOnly: boolean export let normalization: ValueNormalization export let parser: JSONParser @@ -48,7 +50,7 @@ role="button" tabindex="-1" data-type="selectable-value" - class={getValueClass(value, parser)} + class={getValueClass(value, mode, parser)} on:click={handleValueClick} on:dblclick={handleValueDoubleClick} title={valueIsUrl ? 'Ctrl+Click or Ctrl+Enter to open url in new window' : undefined} diff --git a/src/lib/plugins/value/components/utils/getValueClass.ts b/src/lib/plugins/value/components/utils/getValueClass.ts index 135c6985..cf47e9ae 100644 --- a/src/lib/plugins/value/components/utils/getValueClass.ts +++ b/src/lib/plugins/value/components/utils/getValueClass.ts @@ -1,12 +1,13 @@ import { isUrl, valueType } from '$lib/utils/typeUtils.js' -import type { JSONParser } from '$lib/types.js' +import { type JSONParser, Mode } from '$lib/types.js' import { classnames } from '$lib/utils/cssUtils.js' -export function getValueClass(value: unknown, parser: JSONParser): string { +export function getValueClass(value: unknown, mode: Mode, parser: JSONParser): string { const type = valueType(value, parser) return classnames('jse-value', 'jse-' + type, { 'jse-url': isUrl(value), - 'jse-empty': typeof value === 'string' && value.length === 0 + 'jse-empty': typeof value === 'string' && value.length === 0, + 'jse-table-cell': mode === Mode.table }) } diff --git a/src/lib/plugins/value/renderValue.ts b/src/lib/plugins/value/renderValue.ts index 75441f3c..16ea4159 100644 --- a/src/lib/plugins/value/renderValue.ts +++ b/src/lib/plugins/value/renderValue.ts @@ -9,6 +9,7 @@ import TimestampTag from './components/TimestampTag.svelte' export function renderValue({ path, value, + mode, readOnly, selection, enforceString, @@ -46,6 +47,7 @@ export function renderValue({ path, value, selection, + mode, enforceString, parser, normalization, @@ -62,7 +64,7 @@ export function renderValue({ if (!isEditing) { renderers.push({ component: ReadonlyValue, - props: { path, value, readOnly, parser, normalization, searchResultItems, onSelect } + props: { path, value, mode, readOnly, parser, normalization, searchResultItems, onSelect } }) } diff --git a/src/lib/types.ts b/src/lib/types.ts index 9ddc9be0..d3672c36 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -605,6 +605,7 @@ export interface JSONEditorModalProps { } export interface JSONEditorContext { + mode: Mode readOnly: boolean parser: JSONParser normalization: ValueNormalization @@ -637,6 +638,7 @@ export interface TreeModeContext extends JSONEditorContext { export interface RenderValueProps { path: JSONPath value: unknown + mode: Mode readOnly: boolean enforceString: boolean selection: JSONSelection | undefined From 65267612f27e6aa81bc8fdb8de6c8f0be9fedb6c Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 23 Jul 2024 16:08:15 +0200 Subject: [PATCH 62/93] chore: move the ValidationErrorIcon outside the table value cell --- src/lib/components/modes/tablemode/TableMode.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index 8312c777..d67604bd 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -1836,10 +1836,11 @@
- {/if}{#if validationError} - {/if} + {#if validationError} + + {/if} {/each} {#if showRefreshButton} From 1a010dbb78c0b8961b05e4ddeb6df590127bda95 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 23 Jul 2024 16:22:16 +0200 Subject: [PATCH 63/93] chore: fix a build-warning and update test snapshots --- .../components/__snapshots__/JSONEditor.test.ts.snap | 12 ++++++------ src/lib/components/modes/tablemode/TableMode.svelte | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap index 113c9341..45ae8a86 100644 --- a/src/lib/components/__snapshots__/JSONEditor.test.ts.snap +++ b/src/lib/components/__snapshots__/JSONEditor.test.ts.snap @@ -314,8 +314,8 @@ exports[`JSONEditor > render table mode 1`] = ` - +
@@ -372,8 +372,8 @@ exports[`JSONEditor > render table mode 1`] = ` - + @@ -430,8 +430,8 @@ exports[`JSONEditor > render table mode 1`] = ` - + diff --git a/src/lib/components/modes/tablemode/TableMode.svelte b/src/lib/components/modes/tablemode/TableMode.svelte index d67604bd..cb87696e 100644 --- a/src/lib/components/modes/tablemode/TableMode.svelte +++ b/src/lib/components/modes/tablemode/TableMode.svelte @@ -149,7 +149,7 @@ import createTableContextMenuItems from './contextmenu/createTableContextMenuItems' import ContextMenu from '../../controls/contextmenu/ContextMenu.svelte' import { flattenSearchResults, toRecursiveSearchResults } from '$lib/logic/search.js' - import JSONValue from '$lib/components/modes/treemode/JSONValue.svelte' + import JSONValue from '../treemode/JSONValue.svelte' const debug = createDebug('jsoneditor:TableMode') const { openAbsolutePopup, closeAbsolutePopup } = From 51466f0be00a3c7f0900c01b0d833280fc30d6e3 Mon Sep 17 00:00:00 2001 From: Jos de Jong Date: Tue, 23 Jul 2024 16:24:16 +0200 Subject: [PATCH 64/93] docs: update example `EnumValue` --- src/lib/plugins/value/components/EnumValue.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/lib/plugins/value/components/EnumValue.svelte b/src/lib/plugins/value/components/EnumValue.svelte index bb28327a..f3fbc1bb 100644 --- a/src/lib/plugins/value/components/EnumValue.svelte +++ b/src/lib/plugins/value/components/EnumValue.svelte @@ -4,11 +4,12 @@ import type { JSONPath } from 'immutable-json-patch' import { compileJSONPointer } from 'immutable-json-patch' import { getValueClass } from '$lib/plugins/value/components/utils/getValueClass.js' - import type { JSONParser, JSONSelection, OnPatch } from '$lib/types.js' + import {type JSONParser, type JSONSelection, Mode, type OnPatch} from '$lib/types.js' import { isValueSelection } from '$lib/logic/selection.js' export let path: JSONPath export let value: unknown + export let mode: Mode export let parser: JSONParser export let readOnly: boolean export let selection: JSONSelection | undefined @@ -54,7 +55,7 @@
0
- 1 +
+ 1 +
+ + + + + +
- - - - - -
+
+ +
+ + + + +
- - - - - -
1
- 2 +
+ 2 +
+ + + + + +
- - - - - -
- Joe +
+ Joe +
+ + + + + +
- - - - - -
2
- 3 +
+ 3 +
+ + + + + +
- - - - - -
+
+ +
+ + + + +
- - - - - -
@@ -469,7 +493,7 @@ exports[`JSONEditor > render text mode 1`] = `
render tree mode 1`] = `
render tree mode 1`] = ` >
0
:
{
@@ -1532,36 +1556,36 @@ exports[`JSONEditor > render tree mode 1`] = `
@@ -1573,29 +1597,33 @@ exports[`JSONEditor > render tree mode 1`] = `
:
- 1 +
+ 1 +
+ + + +
- - - -
@@ -1605,21 +1633,21 @@ exports[`JSONEditor > render tree mode 1`] = `
- {#if isObjectOrArray(value)} - {@const searchResultsByCell = flattenSearchResults( - getInRecursiveState(item, searchResultByRow, column) - )} - - {@const containsActiveSearchResult = searchResultsByCell - ? searchResultsByCell.some((item) => item.active) - : false} - - {:else} - {@const searchResultItemsByCell = getInRecursiveState( - json, - searchResults, - path - )?.searchResults} - - {/if}{#if !readOnly && isSelected && !isEditingSelection(selection)} -
- -
- {/if}{#if validationError} - - {/if} +
+
+ {#if isObjectOrArray(value)} + {@const searchResultsByCell = flattenSearchResults( + getInRecursiveState(item, searchResultByRow, column) + )} + + {@const containsActiveSearchResult = searchResultsByCell + ? searchResultsByCell.some((item) => item.active) + : false} + + {:else} + {@const searchResultItemsByCell = getInRecursiveState( + json, + searchResults, + path + )?.searchResults} + + {/if}{#if !readOnly && isSelected && !isEditingSelection(selection)} +
+ +
+ {/if}{#if validationError} + + {/if} +
render table mode 1`] = ` - +
render table mode 1`] = ` - +
render table mode 1`] = ` - +