diff --git a/eslint.config.js b/eslint.config.js index 6e115dd08f0..ddfd52254d6 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -75,6 +75,8 @@ export default [ "web-common/src/components/modal/*.js", "web-common/src/features/dashboards/url-state/filters/expression.cjs", // generated by nearly "web-local/build/*", + "web-local/playwright-report/*", + "web-local/playwright/*", ], }, { diff --git a/package-lock.json b/package-lock.json index b15719f2e57..46f7a4b274a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "web-local" ], "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.4", "@types/eslint": "^8.56.9", "@vitest/eslint-plugin": "^1.1.42", "eslint": "^9.24.0", @@ -9483,10 +9484,9 @@ } }, "node_modules/@internationalized/date": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.0.tgz", - "integrity": "sha512-J51AJ0fEL68hE4CwGPa6E0PO6JDaVLd8aln48xFCSy7CZkZc96dGEGmLs2OEEbBxcsVZtfrqkXJwI2/MSG8yKw==", - "dev": true, + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.10.1.tgz", + "integrity": "sha512-oJrXtQiAXLvT9clCf1K4kxp3eKsQhIaZqxEyowkBcsvZDdZkbWrVmnGknxs5flTD0VGsxrxKgBCZty1EzoiMzA==", "license": "Apache-2.0", "dependencies": { "@swc/helpers": "^0.5.0" @@ -9700,6 +9700,17 @@ "node": ">=6.0.0" } }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", @@ -10100,24 +10111,6 @@ "react": ">=16" } }, - "node_modules/@melt-ui/svelte": { - "version": "0.76.2", - "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.76.2.tgz", - "integrity": "sha512-7SbOa11tXUS95T3fReL+dwDs5FyJtCEqrqG3inRziDws346SYLsxOQ6HmX+4BkIsQh1R8U3XNa+EMmdMt38lMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@floating-ui/core": "^1.3.1", - "@floating-ui/dom": "^1.4.5", - "@internationalized/date": "^3.5.0", - "dequal": "^2.0.3", - "focus-trap": "^7.5.2", - "nanoid": "^5.0.4" - }, - "peerDependencies": { - "svelte": ">=3 <5" - } - }, "node_modules/@mermaid-js/parser": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.2.tgz", @@ -12518,7 +12511,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz", "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==", - "dev": true, "license": "MIT" }, "node_modules/@replit/codemirror-indentation-markers": { @@ -14908,43 +14900,42 @@ } }, "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.2.tgz", - "integrity": "sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-4.0.4.tgz", + "integrity": "sha512-0ba1RQ/PHen5FGpdSrW7Y3fAMQjrXantECALeOiOdBdzR5+5vPP6HVZRLmZaQL+W8m++o+haIAKq5qT+MiZ7VA==", "dev": true, "license": "MIT", "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", - "debug": "^4.3.4", + "@sveltejs/vite-plugin-svelte-inspector": "^3.0.0-next.0||^3.0.0", + "debug": "^4.3.7", "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.30.10", - "svelte-hmr": "^0.16.0", - "vitefu": "^0.2.5" + "magic-string": "^0.30.12", + "vitefu": "^1.0.3" }, "engines": { - "node": "^18.0.0 || >=20" + "node": "^18.0.0 || ^20.0.0 || >=22" }, "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.0", + "svelte": "^5.0.0-next.96 || ^5.0.0", "vite": "^5.0.0" } }, "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", - "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-3.0.1.tgz", + "integrity": "sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==", "dev": true, "license": "MIT", "dependencies": { - "debug": "^4.3.4" + "debug": "^4.3.7" }, "engines": { - "node": "^18.0.0 || >=20" + "node": "^18.0.0 || ^20.0.0 || >=22" }, "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.0", - "svelte": "^4.0.0 || ^5.0.0-next.0", + "@sveltejs/vite-plugin-svelte": "^4.0.0-next.0||^4.0.0", + "svelte": "^5.0.0-next.96 || ^5.0.0", "vite": "^5.0.0" } }, @@ -15223,7 +15214,6 @@ "version": "0.5.17", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.17.tgz", "integrity": "sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==", - "dev": true, "license": "Apache-2.0", "dependencies": { "tslib": "^2.8.0" @@ -15270,26 +15260,6 @@ "svelte": "^3.54.0 || ^4.0.0 || ^5.0.0" } }, - "node_modules/@tanstack/svelte-table": { - "version": "8.21.3", - "resolved": "https://registry.npmjs.org/@tanstack/svelte-table/-/svelte-table-8.21.3.tgz", - "integrity": "sha512-VwLt2xfsYHdchdYdFfcl9bxlJts1I6JK50xqhH+KMB9co98rnIyL4pRhTMSDfuB448yQR9E7d6oBLjx8r69cVg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tanstack/table-core": "8.21.3" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^3.49.0" - } - }, "node_modules/@tanstack/svelte-virtual": { "version": "3.13.8", "resolved": "https://registry.npmjs.org/@tanstack/svelte-virtual/-/svelte-virtual-3.13.8.tgz", @@ -15464,140 +15434,6 @@ "@testing-library/dom": ">=7.21.4" } }, - "node_modules/@tiptap/core": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.11.0.tgz", - "integrity": "sha512-kmS7ZVpHm1EMnW1Wmft9H5ZLM7E0G0NGBx+aGEHGDcNxZBXD2ZUa76CuWjIhOGpwsPbELp684ZdpF2JWoNi4Dg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/pm": "^3.11.0" - } - }, - "node_modules/@tiptap/extension-document": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.11.0.tgz", - "integrity": "sha512-N2G3cwL2Dtur/CgD/byJmFx9T5no6fTO/U462VP3rthQYrRA1AB3TCYqtlwJkmyoxRTNd4qIg4imaPl8ej6Heg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.11.0" - } - }, - "node_modules/@tiptap/extension-mention": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-3.11.0.tgz", - "integrity": "sha512-4y789hKNEvZoNals7PNSGAKThQ+b5nuP/KIEe4wPIfzknjwxzGi0f2YY3L/f+gIhueoZymYpkmhtiRND+wvAWA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.11.0", - "@tiptap/pm": "^3.11.0", - "@tiptap/suggestion": "^3.11.0" - } - }, - "node_modules/@tiptap/extension-paragraph": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.11.0.tgz", - "integrity": "sha512-hxgjZOXOqstRTWv+QjWJjK23rD5qzIV9ePlhX3imLeq/MgX0aU9VBDaG5SGKbSjaBNQnpLw6+sABJi3CDP6Z5A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.11.0" - } - }, - "node_modules/@tiptap/extension-text": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.11.0.tgz", - "integrity": "sha512-ELAYm2BuChzZOqDG9B0k3W6zqM4pwNvXkam28KgHGiT2y7Ni68Rb+NXp16uVR+5zR6hkqnQ/BmJSKzAW59MXpA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.11.0" - } - }, - "node_modules/@tiptap/extensions": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.11.0.tgz", - "integrity": "sha512-g43beA73ZMLezez1st9LEwYrRHZ0FLzlsSlOZKk7sdmtHLmuqWHf4oyb0XAHol1HZIdGv104rYaGNgmQXr1ecQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.11.0", - "@tiptap/pm": "^3.11.0" - } - }, - "node_modules/@tiptap/pm": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.11.0.tgz", - "integrity": "sha512-plCQDLCZIOc92cizB8NNhBRN0szvYR3cx9i5IXo6v9Xsgcun8KHNcJkesc2AyeqdIs0BtOJZaqQ9adHThz8UDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "prosemirror-changeset": "^2.3.0", - "prosemirror-collab": "^1.3.1", - "prosemirror-commands": "^1.6.2", - "prosemirror-dropcursor": "^1.8.1", - "prosemirror-gapcursor": "^1.3.2", - "prosemirror-history": "^1.4.1", - "prosemirror-inputrules": "^1.4.0", - "prosemirror-keymap": "^1.2.2", - "prosemirror-markdown": "^1.13.1", - "prosemirror-menu": "^1.2.4", - "prosemirror-model": "^1.24.1", - "prosemirror-schema-basic": "^1.2.3", - "prosemirror-schema-list": "^1.5.0", - "prosemirror-state": "^1.4.3", - "prosemirror-tables": "^1.6.4", - "prosemirror-trailing-node": "^3.0.0", - "prosemirror-transform": "^1.10.2", - "prosemirror-view": "^1.38.1" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - } - }, - "node_modules/@tiptap/suggestion": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.11.0.tgz", - "integrity": "sha512-4zGU3l1rZ7P112en3HiMXZuKCcZSXdwtdSIfQQV94jNyumg/imYFeYARVsabfv6hFjtEuwbq0ev8y13Bl+1Quw==", - "dev": true, - "license": "MIT", - "peer": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/ueberdosis" - }, - "peerDependencies": { - "@tiptap/core": "^3.11.0", - "@tiptap/pm": "^3.11.0" - } - }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -16134,7 +15970,6 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", - "dev": true, "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -16290,7 +16125,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, "license": "MIT" }, "node_modules/@types/lodash": { @@ -16311,7 +16145,6 @@ "version": "14.1.2", "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "dev": true, "license": "MIT", "dependencies": { "@types/linkify-it": "^5", @@ -16332,7 +16165,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, "license": "MIT" }, "node_modules/@types/mdx": { @@ -17781,7 +17613,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -17791,7 +17622,6 @@ "version": "4.3.0", "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" @@ -17989,7 +17819,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, "license": "Python-2.0" }, "node_modules/aria-hidden": { @@ -18665,24 +18494,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/bits-ui": { - "version": "0.22.0", - "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.22.0.tgz", - "integrity": "sha512-r7Fw1HNgA4YxZBRcozl7oP0bheQ8EHh+kfMBZJgyFISix8t4p/nqDcHLmBgIiJ3T5XjYnJRorYDjIWaCfhb5fw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@internationalized/date": "^3.5.1", - "@melt-ui/svelte": "0.76.2", - "nanoid": "^5.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/huntabyte" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0" - } - }, "node_modules/bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -19675,7 +19486,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^4.2.0", @@ -19690,14 +19500,12 @@ "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, "license": "MIT" }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -19707,7 +19515,6 @@ "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, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -19722,7 +19529,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -19735,7 +19541,6 @@ "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, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -19784,51 +19589,6 @@ "node": ">=6" } }, - "node_modules/cmdk-sv": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/cmdk-sv/-/cmdk-sv-0.0.19.tgz", - "integrity": "sha512-Vm6+/up5nQbwGmNw0uYFbXTrbpF460/FhMohTskzzszMtIR/u/78haucSmJWjjp9bW0wxpHXZWa6fk+Lj1tKnA==", - "dev": true, - "dependencies": { - "bits-ui": "^0.21.12", - "nanoid": "^5.0.7" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.1" - } - }, - "node_modules/cmdk-sv/node_modules/bits-ui": { - "version": "0.21.16", - "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.21.16.tgz", - "integrity": "sha512-XFZ7/bK7j/K+5iktxX/ZpmoFHjYjpPzP5EOO/4bWiaFg5TG1iMcfjDhlBTQnJxD6BoVoHuqeZPHZvaTgF4Iv3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@internationalized/date": "^3.5.1", - "@melt-ui/svelte": "0.76.2", - "nanoid": "^5.0.5" - }, - "funding": { - "url": "https://github.com/sponsors/huntabyte" - }, - "peerDependencies": { - "svelte": "^4.0.0 || ^5.0.0-next.118" - } - }, - "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==", - "dev": true, - "license": "MIT", - "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/codemirror-json-schema": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/codemirror-json-schema/-/codemirror-json-schema-0.7.9.tgz", @@ -19893,7 +19653,6 @@ "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, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -19906,7 +19665,6 @@ "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" }, "node_modules/colord": { @@ -20607,7 +20365,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "dev": true, "license": "MIT" }, "node_modules/cronstrue": { @@ -21261,7 +21018,6 @@ "version": "3.2.4", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", - "dev": true, "license": "ISC", "dependencies": { "internmap": "1 - 2" @@ -21314,7 +21070,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21337,7 +21092,6 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", - "dev": true, "license": "ISC", "dependencies": { "delaunator": "5" @@ -21350,7 +21104,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21374,7 +21127,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dev": true, "license": "ISC", "dependencies": { "commander": "7", @@ -21400,7 +21152,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, "license": "MIT", "engines": { "node": ">= 10" @@ -21410,7 +21161,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -21446,7 +21196,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dev": true, "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", @@ -21461,7 +21210,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21471,7 +21219,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", - "dev": true, "license": "ISC", "dependencies": { "d3-array": "2.5.0 - 3" @@ -21484,7 +21231,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/d3-geo-projection/-/d3-geo-projection-4.0.0.tgz", "integrity": "sha512-p0bK60CEzph1iqmnxut7d/1kyTmm3UWtPlwdkM31AU+LW+BXazd5zJdoCn7VFxNCHXRngPHRnsNn5uGjLRGndg==", - "dev": true, "license": "ISC", "peer": true, "dependencies": { @@ -21507,7 +21253,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, "license": "MIT", "peer": true, "engines": { @@ -21518,7 +21263,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21528,7 +21272,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dev": true, "license": "ISC", "dependencies": { "d3-color": "1 - 3" @@ -21548,7 +21291,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21568,7 +21310,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -21633,7 +21374,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dev": true, "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", @@ -21650,7 +21390,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", - "dev": true, "license": "ISC", "dependencies": { "d3-color": "1 - 3", @@ -21674,7 +21413,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dev": true, "license": "ISC", "dependencies": { "d3-path": "^3.1.0" @@ -21687,7 +21425,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dev": true, "license": "ISC", "dependencies": { "d3-array": "2 - 3" @@ -21700,7 +21437,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dev": true, "license": "ISC", "dependencies": { "d3-time": "1 - 3" @@ -21713,7 +21449,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -22161,7 +21896,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", - "dev": true, "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" @@ -22404,9 +22138,9 @@ } }, "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.1.tgz", + "integrity": "sha512-jDwizj+IlEZBunHcOuuFVBnIMPAEHvTsJj0BcIp94xYguLRVBcXO853px/MyIJvbVzWdsGvrRweIUWJw8hBP7A==", "dev": true, "license": "MIT" }, @@ -23031,7 +22765,6 @@ "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -23455,7 +23188,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -23485,7 +23217,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -23941,6 +23672,16 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.1.tgz", + "integrity": "sha512-GiYWG34AN/4CUyaWAgunGt0Rxvr1PTMlGC0vvEov/uOQYWne2bpN03Um+k8jT+q3op33mKouP2zeJ6OlM+qeUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -24457,9 +24198,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/fast-json-patch/-/fast-json-patch-3.1.1.tgz", "integrity": "sha512-vf6IHUX2SBcA+5/+4883dsIjpBTqmfBjmYiWK1savxQmFk4JfBMLa7ynTYOs1Rolp/T1betJxHiGD3g1Mn8lUQ==", - "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", @@ -24931,16 +24670,6 @@ "node": ">=0.4.0" } }, - "node_modules/focus-trap": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", - "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", - "dev": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.2.0" - } - }, "node_modules/follow-redirects": { "version": "1.15.9", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", @@ -25210,7 +24939,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" @@ -26850,7 +26578,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -28162,7 +27889,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-4.0.0.tgz", "integrity": "sha512-3CNZ2DnrpByG9Nqj6Xo8vqbjT4F6N+tb4Gb28ESAZjYZ5yqvmc56J+/kuIwkaAMOyblTQhUW7PxMkUb8Q36N3Q==", - "dev": true, "license": "MIT" }, "node_modules/json5": { @@ -28492,7 +28218,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", - "dev": true, "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" @@ -29116,7 +28841,6 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1", @@ -29687,7 +29411,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true, "license": "MIT" }, "node_modules/media-typer": { @@ -32094,25 +31817,6 @@ "license": "MIT", "optional": true }, - "node_modules/nanoid": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz", - "integrity": "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.js" - }, - "engines": { - "node": "^18 || >=20" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -32270,7 +31974,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" @@ -32311,21 +32014,18 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true, "license": "MIT" }, "node_modules/node-fetch/node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true, "license": "BSD-2-Clause" }, "node_modules/node-fetch/node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, "license": "MIT", "dependencies": { "tr46": "~0.0.3", @@ -33053,7 +32753,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz", "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==", - "dev": true, "license": "MIT" }, "node_modules/orval": { @@ -33758,18 +33457,6 @@ "dev": true, "license": "MIT" }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -36009,7 +35696,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.3.1.tgz", "integrity": "sha512-j0kORIBm8ayJNl3zQvD1TTPHJX3g042et6y/KQhZhnPrruO8exkTgG8X+NRpj7kIyMMEx74Xb3DyMIBtO0IKkQ==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-transform": "^1.0.0" @@ -36019,7 +35705,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz", "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0" @@ -36029,7 +35714,6 @@ "version": "1.7.1", "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.1.tgz", "integrity": "sha512-rT7qZnQtx5c0/y/KlYaGvtG411S97UaL6gdp6RIZ23DLHanMYLyfGBV5DtSnZdthQql7W+lEVbpSfwtO8T+L2w==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", @@ -36041,7 +35725,6 @@ "version": "1.8.2", "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.2.tgz", "integrity": "sha512-CCk6Gyx9+Tt2sbYk5NK0nB1ukHi2ryaRgadV/LvyNuO3ena1payM2z6Cg0vO1ebK8cxbzo41ku2DE5Axj1Zuiw==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", @@ -36053,7 +35736,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.0.tgz", "integrity": "sha512-z00qvurSdCEWUIulij/isHaqu4uLS8r/Fi61IbjdIPJEonQgggbJsLnstW7Lgdk4zQ68/yr6B6bf7sJXowIgdQ==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-keymap": "^1.0.0", @@ -36066,7 +35748,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz", "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-state": "^1.2.2", @@ -36079,7 +35760,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz", "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", @@ -36090,7 +35770,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz", "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-state": "^1.0.0", @@ -36101,7 +35780,6 @@ "version": "1.13.2", "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.2.tgz", "integrity": "sha512-FPD9rHPdA9fqzNmIIDhhnYQ6WgNoSWX9StUZ8LEKapaXU9i6XgykaHKhp6XMyXlOWetmaFgGDS/nu/w9/vUc5g==", - "dev": true, "license": "MIT", "dependencies": { "@types/markdown-it": "^14.0.0", @@ -36113,7 +35791,6 @@ "version": "1.2.5", "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.2.5.tgz", "integrity": "sha512-qwXzynnpBIeg1D7BAtjOusR+81xCp53j7iWu/IargiRZqRjGIlQuu1f3jFi+ehrHhWMLoyOQTSRx/IWZJqOYtQ==", - "dev": true, "license": "MIT", "dependencies": { "crelt": "^1.0.0", @@ -36126,7 +35803,6 @@ "version": "1.25.4", "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.4.tgz", "integrity": "sha512-PIM7E43PBxKce8OQeezAs9j4TP+5yDpZVbuurd1h5phUxEKIu+G2a+EUZzIC5nS1mJktDJWzbqS23n1tsAf5QA==", - "dev": true, "license": "MIT", "dependencies": { "orderedmap": "^2.0.0" @@ -36136,7 +35812,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz", "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-model": "^1.25.0" @@ -36146,7 +35821,6 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz", "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", @@ -36158,7 +35832,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz", "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-model": "^1.0.0", @@ -36170,7 +35843,6 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.1.tgz", "integrity": "sha512-DAgDoUYHCcc6tOGpLVPSU1k84kCUWTWnfWX3UDy2Delv4ryH0KqTD6RBI6k4yi9j9I8gl3j8MkPpRD/vWPZbug==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-keymap": "^1.2.2", @@ -36184,7 +35856,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz", "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==", - "dev": true, "license": "MIT", "dependencies": { "@remirror/core-constants": "3.0.0", @@ -36200,7 +35871,6 @@ "version": "1.10.5", "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.10.5.tgz", "integrity": "sha512-RPDQCxIDhIBb1o36xxwsaeAvivO8VLJcgBtzmOwQ64bMtsVFh5SSuJ6dWSxO1UsHTiTXPCgQm3PDJt7p6IOLbw==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-model": "^1.21.0" @@ -36210,7 +35880,6 @@ "version": "1.41.3", "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.41.3.tgz", "integrity": "sha512-SqMiYMUQNNBP9kfPhLO8WXEk/fon47vc52FQsUiJzTBuyjKgEcoAwMyF04eQ4WZ2ArMn7+ReypYL60aKngbACQ==", - "dev": true, "license": "MIT", "dependencies": { "prosemirror-model": "^1.20.0", @@ -36319,7 +35988,6 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", - "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -37984,7 +37652,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" @@ -38225,7 +37892,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", - "dev": true, "license": "Unlicense" }, "node_modules/rollup": { @@ -38249,7 +37915,6 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz", "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==", - "dev": true, "license": "MIT" }, "node_modules/roughjs": { @@ -38366,7 +38031,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/sade": { @@ -38469,7 +38133,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, "license": "MIT" }, "node_modules/sander": { @@ -40357,29 +40020,30 @@ } }, "node_modules/svelte": { - "version": "4.2.19", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", - "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.46.0.tgz", + "integrity": "sha512-ZhLtvroYxUxr+HQJfMZEDRsGsmU46x12RvAv/zi9584f5KOX7bUrEbhPJ7cKFmUvZTJXi/CFZUYwDC6M1FigPw==", "dev": true, "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", - "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", + "@jridgewell/remapping": "^2.3.4", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@sveltejs/acorn-typescript": "^1.0.5", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "clsx": "^2.1.1", + "devalue": "^5.5.0", + "esm-env": "^1.2.1", + "esrap": "^2.2.1", + "is-reference": "^3.0.3", "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/svelte-check": { @@ -40514,19 +40178,6 @@ "url": "https://opencollective.com/eslint" } }, - "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/svelte-preprocess": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", @@ -41380,9 +41031,9 @@ } }, "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.3.0.tgz", + "integrity": "sha512-EIHvdY5bPLuWForiR/AN2Bxngzpuwn1is4asboytXtpTgsArc+WmSJKVLlhdh71u7jFcryDqB2A8lQvj78MkyQ==", "dev": true, "license": "MIT" }, @@ -42296,7 +41947,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/topojson-client/-/topojson-client-3.1.0.tgz", "integrity": "sha512-605uxS6bcYxGXw9qi62XyrV6Q3xwbndjachmNxu8HWTtVPxZfEJN9fd/SZS1Q54Sn2y0TMyMxFj/cJINqGHrKw==", - "dev": true, "license": "ISC", "peer": true, "dependencies": { @@ -42312,7 +41962,6 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, "license": "MIT", "peer": true }, @@ -42614,7 +42263,6 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, "license": "0BSD" }, "node_modules/tsx": { @@ -43316,7 +42964,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true, "license": "MIT" }, "node_modules/ufo": { @@ -44019,7 +43666,6 @@ "version": "5.33.0", "resolved": "https://registry.npmjs.org/vega/-/vega-5.33.0.tgz", "integrity": "sha512-jNAGa7TxLojOpMMMrKMXXBos4K6AaLJbCgGDOw1YEkLRjUkh12pcf65J2lMSdEHjcEK47XXjKiOUVZ8L+MniBA==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44056,7 +43702,6 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/vega-canvas/-/vega-canvas-1.2.7.tgz", "integrity": "sha512-OkJ9CACVcN9R5Pi9uF6MZBF06pO6qFpDYHWSKBJsdHP5o724KrsgR6UvbnXFH82FdsiTOff/HqjuaG8C7FL+9Q==", - "dev": true, "license": "BSD-3-Clause", "peer": true }, @@ -44064,7 +43709,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/vega-crossfilter/-/vega-crossfilter-4.1.3.tgz", "integrity": "sha512-nyPJAXAUABc3EocUXvAL1J/IWotZVsApIcvOeZaUdEQEtZ7bt8VtP2nj3CLbHBA8FZZVV+K6SmdwvCOaAD4wFQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44077,7 +43721,6 @@ "version": "5.7.7", "resolved": "https://registry.npmjs.org/vega-dataflow/-/vega-dataflow-5.7.7.tgz", "integrity": "sha512-R2NX2HvgXL+u4E6u+L5lKvvRiCtnE6N6l+umgojfi53suhhkFP+zB+2UAQo4syxuZ4763H1csfkKc4xpqLzKnw==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44129,7 +43772,6 @@ "version": "4.10.2", "resolved": "https://registry.npmjs.org/vega-encode/-/vega-encode-4.10.2.tgz", "integrity": "sha512-fsjEY1VaBAmqwt7Jlpz0dpPtfQFiBdP9igEefvumSpy7XUxOJmDQcRDnT3Qh9ctkv3itfPfI9g8FSnGcv2b4jQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44144,14 +43786,12 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/vega-event-selector/-/vega-event-selector-3.0.1.tgz", "integrity": "sha512-K5zd7s5tjr1LiOOkjGpcVls8GsH/f2CWCrWcpKy74gTCp+llCdwz0Enqo013ZlGaRNjfgD/o1caJRt3GSaec4A==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/vega-expression": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.2.0.tgz", "integrity": "sha512-WRMa4ny3iZIVAzDlBh3ipY2QUuLk2hnJJbfbncPgvTF7BUgbIbKq947z+JicWksYbokl8n1JHXJoqi3XvpG0Zw==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/estree": "^1.0.0", @@ -44162,7 +43802,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/vega-force/-/vega-force-4.2.2.tgz", "integrity": "sha512-cHZVaY2VNNIG2RyihhSiWniPd2W9R9kJq0znxzV602CgUVgxEfTKtx/lxnVCn8nNrdKAYrGiqIsBzIeKG1GWHw==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44175,7 +43814,6 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/vega-format/-/vega-format-1.1.3.tgz", "integrity": "sha512-wQhw7KR46wKJAip28FF/CicW+oiJaPAwMKdrxlnTA0Nv8Bf7bloRlc+O3kON4b4H1iALLr9KgRcYTOeXNs2MOA==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44190,7 +43828,6 @@ "version": "5.18.0", "resolved": "https://registry.npmjs.org/vega-functions/-/vega-functions-5.18.0.tgz", "integrity": "sha512-+D+ey4bDAhZA2CChh7bRZrcqRUDevv05kd2z8xH+il7PbYQLrhi6g1zwvf8z3KpgGInFf5O13WuFK5DQGkz5lQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44211,7 +43848,6 @@ "version": "4.4.3", "resolved": "https://registry.npmjs.org/vega-geo/-/vega-geo-4.4.3.tgz", "integrity": "sha512-+WnnzEPKIU1/xTFUK3EMu2htN35gp9usNZcC0ZFg2up1/Vqu6JyZsX0PIO51oXSIeXn9bwk6VgzlOmJUcx92tA==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44229,7 +43865,6 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/vega-hierarchy/-/vega-hierarchy-4.1.3.tgz", "integrity": "sha512-0Z+TYKRgOEo8XYXnJc2HWg1EGpcbNAhJ9Wpi9ubIbEyEHqIgjCIyFVN8d4nSfsJOcWDzsSmRqohBztxAhOCSaw==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44242,7 +43877,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/vega-interpreter/-/vega-interpreter-2.0.0.tgz", "integrity": "sha512-ZjA7AC+xjfi4k9vgA49N5F/bS4fzf9E1KC0ljey4uMgHbmtKR53BWyOOzxHk+btfS9bEJ5gUvuoZzfqG3wIWEg==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "vega-util": "^2.0.0" @@ -44252,14 +43886,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-2.0.0.tgz", "integrity": "sha512-/ayLYX3VVqfkKJB1mG+xkOKiBVlfFZ9BfUB5vf7eVyIRork24sABXdeH4x+XeWuqDKnLBTDedotA+1a5MxlV2Q==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/vega-label": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/vega-label/-/vega-label-1.3.1.tgz", "integrity": "sha512-Emx4b5s7pvuRj3fBkAJ/E2snCoZACfKAwxVId7f/4kYVlAYLb5Swq6W8KZHrH4M9Qds1XJRUYW9/Y3cceqzEFA==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44273,7 +43905,6 @@ "version": "5.23.0", "resolved": "https://registry.npmjs.org/vega-lite/-/vega-lite-5.23.0.tgz", "integrity": "sha512-l4J6+AWE3DIjvovEoHl2LdtCUkfm4zs8Xxx7INwZEAv+XVb6kR6vIN1gt3t2gN2gs/y4DYTs/RPoTeYAuEg6mA==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "json-stringify-pretty-compact": "~4.0.0", @@ -44300,7 +43931,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/vega-expression/-/vega-expression-5.1.2.tgz", "integrity": "sha512-fFeDTh4UtOxlZWL54jf1ZqJHinyerWq/ROiqrQxqLkNJRJ86RmxYTgXwt65UoZ/l4VUv9eAd2qoJeDEf610Umw==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/estree": "^1.0.0", @@ -44311,7 +43941,6 @@ "version": "4.5.3", "resolved": "https://registry.npmjs.org/vega-loader/-/vega-loader-4.5.3.tgz", "integrity": "sha512-dUfIpxTLF2magoMaur+jXGvwMxjtdlDZaIS8lFj6N7IhUST6nIvBzuUlRM+zLYepI5GHtCLOnqdKU4XV0NggCA==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44326,7 +43955,6 @@ "version": "6.6.0", "resolved": "https://registry.npmjs.org/vega-parser/-/vega-parser-6.6.0.tgz", "integrity": "sha512-jltyrwCTtWeidi/6VotLCybhIl+ehwnzvFWYOdWNUP0z/EskdB64YmawNwjCjzTBMemeiQtY6sJPPbewYqe3Vg==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44341,7 +43969,6 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/vega-projection/-/vega-projection-1.6.2.tgz", "integrity": "sha512-3pcVaQL9R3Zfk6PzopLX6awzrQUeYOXJzlfLGP2Xd93mqUepBa6m/reVrTUoSFXA3v9lfK4W/PS2AcVzD/MIcQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44354,7 +43981,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/vega-regression/-/vega-regression-1.3.1.tgz", "integrity": "sha512-AmccF++Z9uw4HNZC/gmkQGe6JsRxTG/R4QpbcSepyMvQN1Rj5KtVqMcmVFP1r3ivM4dYGFuPlzMWvuqp0iKMkQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44368,7 +43994,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/vega-runtime/-/vega-runtime-6.2.1.tgz", "integrity": "sha512-b4eot3tWKCk++INWqot+6sLn3wDTj/HE+tRSbiaf8aecuniPMlwJEK7wWuhVGeW2Ae5n8fI/8TeTViaC94bNHA==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44380,7 +44005,6 @@ "version": "7.4.2", "resolved": "https://registry.npmjs.org/vega-scale/-/vega-scale-7.4.2.tgz", "integrity": "sha512-o6Hl76aU1jlCK7Q8DPYZ8OGsp4PtzLdzI6nGpLt8rxoE78QuB3GBGEwGAQJitp4IF7Lb2rL5oAXEl3ZP6xf9jg==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44396,7 +44020,6 @@ "version": "4.13.1", "resolved": "https://registry.npmjs.org/vega-scenegraph/-/vega-scenegraph-4.13.1.tgz", "integrity": "sha512-LFY9+sLIxRfdDI9ZTKjLoijMkIAzPLBWHpPkwv4NPYgdyx+0qFmv+puBpAUGUY9VZqAZ736Uj5NJY9zw+/M3yQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44412,15 +44035,12 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/vega-schema-url-parser/-/vega-schema-url-parser-3.0.2.tgz", "integrity": "sha512-xAnR7KAvNPYewI3O0l5QGdT8Tv0+GCZQjqfP39cW/hbe/b3aYMAQ39vm8O2wfXUHzm04xTe7nolcsx8WQNVLRQ==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/vega-selections": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/vega-selections/-/vega-selections-5.6.0.tgz", "integrity": "sha512-UE2w78rUUbaV3Ph+vQbQDwh8eywIJYRxBiZdxEG/Tr/KtFMLdy2BDgNZuuDO1Nv8jImPJwONmqjNhNDYwM0VJQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44433,7 +44053,6 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/vega-statistics/-/vega-statistics-1.9.0.tgz", "integrity": "sha512-GAqS7mkatpXcMCQKWtFu1eMUKLUymjInU0O8kXshWaQrVWjPIO2lllZ1VNhdgE0qGj4oOIRRS11kzuijLshGXQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44444,9 +44063,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/vega-themes/-/vega-themes-3.0.0.tgz", "integrity": "sha512-1iFiI3BNmW9FrsLnDLx0ZKEddsCitRY3XmUAwp6qmp+p+IXyJYc9pfjlVj9E6KXBPfm4cQyU++s0smKNiWzO4g==", - "dev": true, "license": "BSD-3-Clause", - "peer": true, "funding": { "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" }, @@ -44459,7 +44076,6 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/vega-time/-/vega-time-2.1.3.tgz", "integrity": "sha512-hFcWPdTV844IiY0m97+WUoMLADCp+8yUQR1NStWhzBzwDDA7QEGGwYGxALhdMOaDTwkyoNj3V/nox2rQAJD/vQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44472,9 +44088,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/vega-tooltip/-/vega-tooltip-1.0.0.tgz", "integrity": "sha512-P1R0JP29v0qnTuwzCQ0SPJlkjAzr6qeyj+H4VgUFSykHmHc1OBxda//XBaFDl/bZgIscEMvjKSjZpXd84x3aZQ==", - "dev": true, "license": "BSD-3-Clause", - "peer": true, "dependencies": { "vega-util": "^2.0.0" }, @@ -44486,15 +44100,12 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-2.0.0.tgz", "integrity": "sha512-/ayLYX3VVqfkKJB1mG+xkOKiBVlfFZ9BfUB5vf7eVyIRork24sABXdeH4x+XeWuqDKnLBTDedotA+1a5MxlV2Q==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true + "license": "BSD-3-Clause" }, "node_modules/vega-transforms": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/vega-transforms/-/vega-transforms-4.12.1.tgz", "integrity": "sha512-Qxo+xeEEftY1jYyKgzOGc9NuW4/MqGm1YPZ5WrL9eXg2G0410Ne+xL/MFIjHF4hRX+3mgFF4Io2hPpfy/thjLg==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44509,7 +44120,6 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/vega-typings/-/vega-typings-1.5.0.tgz", "integrity": "sha512-tcZ2HwmiQEOXIGyBMP8sdCnoFoVqHn4KQ4H0MQiHwzFU1hb1EXURhfc+Uamthewk4h/9BICtAM3AFQMjBGpjQA==", - "dev": true, "license": "BSD-3-Clause", "dependencies": { "@types/geojson": "7946.0.4", @@ -44522,21 +44132,18 @@ "version": "7946.0.4", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.4.tgz", "integrity": "sha512-MHmwBtCb7OCv1DSivz2UNJXPGU/1btAWRKlqJ2saEhVJkpkvqHMMaOpKg0v4sAbDWSQekHGvPVMM8nQ+Jen03Q==", - "dev": true, "license": "MIT" }, "node_modules/vega-util": { "version": "1.17.3", "resolved": "https://registry.npmjs.org/vega-util/-/vega-util-1.17.3.tgz", "integrity": "sha512-nSNpZLUrRvFo46M5OK4O6x6f08WD1yOcEzHNlqivF+sDLSsVpstaF6fdJYwrbf/debFi2L9Tkp4gZQtssup9iQ==", - "dev": true, "license": "BSD-3-Clause" }, "node_modules/vega-view": { "version": "5.16.0", "resolved": "https://registry.npmjs.org/vega-view/-/vega-view-5.16.0.tgz", "integrity": "sha512-Nxp1MEAY+8bphIm+7BeGFzWPoJnX9+hgvze6wqCAPoM69YiyVR0o0VK8M2EESIL+22+Owr0Fdy94hWHnmon5tQ==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44554,7 +44161,6 @@ "version": "4.6.1", "resolved": "https://registry.npmjs.org/vega-view-transforms/-/vega-view-transforms-4.6.1.tgz", "integrity": "sha512-RYlyMJu5kZV4XXjmyTQKADJWDB25SMHsiF+B1rbE1p+pmdQPlp5tGdPl9r5dUJOp3p8mSt/NGI8GPGucmPMxtw==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44567,7 +44173,6 @@ "version": "4.2.4", "resolved": "https://registry.npmjs.org/vega-voronoi/-/vega-voronoi-4.2.4.tgz", "integrity": "sha512-lWNimgJAXGeRFu2Pz8axOUqVf1moYhD+5yhBzDSmckE9I5jLOyZc/XvgFTXwFnsVkMd1QW1vxJa+y9yfUblzYw==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -44580,7 +44185,6 @@ "version": "4.1.6", "resolved": "https://registry.npmjs.org/vega-wordcloud/-/vega-wordcloud-4.1.6.tgz", "integrity": "sha512-lFmF3u9/ozU0P+WqPjeThQfZm0PigdbXDwpIUCxczrCXKYJLYFmZuZLZR7cxtmpZ0/yuvRvAJ4g123LXbSZF8A==", - "dev": true, "license": "BSD-3-Clause", "peer": true, "dependencies": { @@ -45220,13 +44824,18 @@ } }, "node_modules/vitefu": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", - "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.1.tgz", + "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", "dev": true, "license": "MIT", + "workspaces": [ + "tests/deps/*", + "tests/projects/*", + "tests/projects/workspace/packages/*" + ], "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0-beta.0" }, "peerDependenciesMeta": { "vite": { @@ -45489,7 +45098,6 @@ "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "dev": true, "license": "MIT" }, "node_modules/w3c-xmlserializer": { @@ -46527,7 +46135,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "license": "ISC", "engines": { "node": ">=10" @@ -46564,7 +46171,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^8.0.1", @@ -46583,7 +46189,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "license": "ISC", "engines": { "node": ">=12" @@ -46593,14 +46198,12 @@ "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, "license": "MIT" }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -46610,7 +46213,6 @@ "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, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -46625,7 +46227,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -46681,6 +46282,13 @@ "type-fest": "^2.19.0" } }, + "node_modules/zimmerframe": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", + "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/zip-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", @@ -46777,22 +46385,40 @@ "@sveltejs/adapter-static": "^3.0.5", "@sveltejs/kit": "^2.7.1", "@tanstack/svelte-query": "^5.69.0", - "@tanstack/svelte-table": "^8.11.8", "autoprefixer": "^10.4.20", "axios": "^1.7.7", "cronstrue": "^2.41.0", "orval": "^7.8.0", "postcss": "^8.4.47", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-check": "^4.0.4", "svelte-preprocess": "^6.0.3", "tailwindcss": "^3.4.13", + "tanstack-table-8-svelte-5": "^0.1.2", "vitest": "^3.1.1", "web-common": "*" } }, + "web-admin/node_modules/tanstack-table-8-svelte-5": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tanstack-table-8-svelte-5/-/tanstack-table-8-svelte-5-0.1.2.tgz", + "integrity": "sha512-wMRu7Y709GpRrbPSN6uiYPCsNk5J/ZjvNuHGCbSUNNZEs1u4q09qnoTbY1EcwGAb3RkDEHEyrE9ArJNT4w0HOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "^8.20.5" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, "web-common": { "version": "0.0.0", + "dependencies": { + "@internationalized/date": "^3.10.1", + "@tiptap/suggestion": "^3.20.1", + "vega-embed": "^7.1.0" + }, "devDependencies": { "@bufbuild/protobuf": "^1.0.0", "@codemirror/autocomplete": "^6.18.1", @@ -46823,17 +46449,16 @@ "@storybook/test": "^7.6.20", "@sveltejs/kit": "^2.7.1", "@tanstack/svelte-query": "^5.69.0", - "@tanstack/svelte-table": "^8.11.8", "@tanstack/svelte-virtual": "^3.0.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/svelte": "^5.2.7", - "@tiptap/core": "^3.11.0", - "@tiptap/extension-document": "^3.11.0", - "@tiptap/extension-mention": "^3.11.0", - "@tiptap/extension-paragraph": "^3.11.0", - "@tiptap/extension-text": "^3.11.0", - "@tiptap/extensions": "^3.11.0", - "@tiptap/pm": "^3.11.0", + "@tiptap/core": "^3.20.1", + "@tiptap/extension-document": "^3.20.1", + "@tiptap/extension-mention": "^3.20.1", + "@tiptap/extension-paragraph": "^3.20.1", + "@tiptap/extension-text": "^3.20.1", + "@tiptap/extensions": "^3.20.1", + "@tiptap/pm": "^3.20.1", "@types/chroma-js": "^3.1.1", "@types/codemirror": "^5.60.15", "@types/d3-format": "^3.0.4", @@ -46843,10 +46468,9 @@ "@types/memoizee": "^0.4.11", "@xyflow/svelte": "^0.1.39", "autoprefixer": "^10.4.20", - "bits-ui": "^0.22.0", + "bits-ui": "^2.14.4", "chroma-js": "^3.1.2", "clsx": "^2.0.0", - "cmdk-sv": "^0.0.19", "codemirror-json-schema": "^0.7.8", "crypto-js": "^4.1.1", "d3-array": "^3.1.1", @@ -46874,7 +46498,7 @@ "prismjs": "^1.30.0", "regular-table": "^0.5.9", "storybook": "^7.0.18", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-preprocess": "^6.0.3", "svelte-radix": "^1.1.0", "svelte-vega": "^2.3.0", @@ -46882,6 +46506,7 @@ "tailwind-merge": "^2.1.0", "tailwind-variants": "^0.1.19", "tailwindcss": "^3.4.13", + "tanstack-table-8-svelte-5": "^0.1.2", "ts-json-schema-generator": "^2.3.0", "tsx": "^4.7.0", "ua-parser-js": "^1.0.2", @@ -46922,6 +46547,255 @@ "dev": true, "license": "MIT" }, + "web-common/node_modules/@tiptap/core": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/core/-/core-3.20.1.tgz", + "integrity": "sha512-SwkPEWIfaDEZjC8SEIi4kZjqIYUbRgLUHUuQezo5GbphUNC8kM1pi3C3EtoOPtxXrEbY6e4pWEzW54Pcrd+rVA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/pm": "^3.20.1" + } + }, + "web-common/node_modules/@tiptap/extension-document": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-document/-/extension-document-3.20.1.tgz", + "integrity": "sha512-9vrqdGmRV7bQCSY3NLgu7UhIwgOCDp4sKqMNsoNRX0aZ021QQMTvBQDPkiRkCf7MNsnWrNNnr52PVnULEn3vFQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.20.1" + } + }, + "web-common/node_modules/@tiptap/extension-mention": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-mention/-/extension-mention-3.20.1.tgz", + "integrity": "sha512-KOGokj7oH1QpcM8P02V+o6wHsVE0g7XEtdIy2vtq2vlFE3npNNNFkMa8F8VWX6qyC+VeVrNU6SIzS5MFY2TORA==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.20.1", + "@tiptap/pm": "^3.20.1", + "@tiptap/suggestion": "^3.20.1" + } + }, + "web-common/node_modules/@tiptap/extension-paragraph": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-paragraph/-/extension-paragraph-3.20.1.tgz", + "integrity": "sha512-QFrAtXNyv7JSnomMQc1nx5AnG9mMznfbYJAbdOQYVdbLtAzTfiTuNPNbQrufy5ZGtGaHxDCoaygu2QEfzaKG+Q==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.20.1" + } + }, + "web-common/node_modules/@tiptap/extension-text": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/extension-text/-/extension-text-3.20.1.tgz", + "integrity": "sha512-7PlIbYW8UenV6NPOXHmv8IcmPGlGx6HFq66RmkJAOJRPXPkTLAiX0N8rQtzUJ6jDEHqoJpaHFEHJw0xzW1yF+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.20.1" + } + }, + "web-common/node_modules/@tiptap/extensions": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/extensions/-/extensions-3.20.1.tgz", + "integrity": "sha512-JRc/v+OBH0qLTdvQ7HvHWTxGJH73QOf1MC0R8NhOX2QnAbg2mPFv1h+FjGa2gfLGuCXBdWQomjekWkUKbC4e5A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.20.1", + "@tiptap/pm": "^3.20.1" + } + }, + "web-common/node_modules/@tiptap/pm": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.20.1.tgz", + "integrity": "sha512-6kCiGLvpES4AxcEuOhb7HR7/xIeJWMjZlb6J7e8zpiIh5BoQc7NoRdctsnmFEjZvC19bIasccshHQ7H2zchWqw==", + "license": "MIT", + "dependencies": { + "prosemirror-changeset": "^2.3.0", + "prosemirror-collab": "^1.3.1", + "prosemirror-commands": "^1.6.2", + "prosemirror-dropcursor": "^1.8.1", + "prosemirror-gapcursor": "^1.3.2", + "prosemirror-history": "^1.4.1", + "prosemirror-inputrules": "^1.4.0", + "prosemirror-keymap": "^1.2.2", + "prosemirror-markdown": "^1.13.1", + "prosemirror-menu": "^1.2.4", + "prosemirror-model": "^1.24.1", + "prosemirror-schema-basic": "^1.2.3", + "prosemirror-schema-list": "^1.5.0", + "prosemirror-state": "^1.4.3", + "prosemirror-tables": "^1.6.4", + "prosemirror-trailing-node": "^3.0.0", + "prosemirror-transform": "^1.10.2", + "prosemirror-view": "^1.38.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + } + }, + "web-common/node_modules/@tiptap/suggestion": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@tiptap/suggestion/-/suggestion-3.20.1.tgz", + "integrity": "sha512-ng7olbzgZhWvPJVJygNQK5153CjquR2eJXpkLq7bRjHlahvt4TH4tGFYvGdYZcXuzbe2g9RoqT7NaPGL9CUq9w==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/ueberdosis" + }, + "peerDependencies": { + "@tiptap/core": "^3.20.1", + "@tiptap/pm": "^3.20.1" + } + }, + "web-common/node_modules/bits-ui": { + "version": "2.14.4", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-2.14.4.tgz", + "integrity": "sha512-W6kenhnbd/YVvur+DKkaVJ6GldE53eLewur5AhUCqslYQ0vjZr8eWlOfwZnMiPB+PF5HMVqf61vXBvmyrAmPWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.1", + "@floating-ui/dom": "^1.7.1", + "esm-env": "^1.1.2", + "runed": "^0.35.1", + "svelte-toolbelt": "^0.10.6", + "tabbable": "^6.2.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/huntabyte" + }, + "peerDependencies": { + "@internationalized/date": "^3.8.1", + "svelte": "^5.33.0" + } + }, + "web-common/node_modules/runed": { + "version": "0.35.1", + "resolved": "https://registry.npmjs.org/runed/-/runed-0.35.1.tgz", + "integrity": "sha512-2F4Q/FZzbeJTFdIS/PuOoPRSm92sA2LhzTnv6FXhCoENb3huf5+fDuNOg1LNvGOouy3u/225qxmuJvcV3IZK5Q==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte", + "https://github.com/sponsors/tglide" + ], + "license": "MIT", + "dependencies": { + "dequal": "^2.0.3", + "esm-env": "^1.0.0", + "lz-string": "^1.5.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.21.0", + "svelte": "^5.7.0" + }, + "peerDependenciesMeta": { + "@sveltejs/kit": { + "optional": true + } + } + }, + "web-common/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "web-common/node_modules/svelte-toolbelt": { + "version": "0.10.6", + "resolved": "https://registry.npmjs.org/svelte-toolbelt/-/svelte-toolbelt-0.10.6.tgz", + "integrity": "sha512-YWuX+RE+CnWYx09yseAe4ZVMM7e7GRFZM6OYWpBKOb++s+SQ8RBIMMe+Bs/CznBMc0QPLjr+vDBxTAkozXsFXQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/huntabyte" + ], + "dependencies": { + "clsx": "^2.1.1", + "runed": "^0.35.1", + "style-to-object": "^1.0.8" + }, + "engines": { + "node": ">=18", + "pnpm": ">=8.7.0" + }, + "peerDependencies": { + "svelte": "^5.30.2" + } + }, + "web-common/node_modules/tanstack-table-8-svelte-5": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/tanstack-table-8-svelte-5/-/tanstack-table-8-svelte-5-0.1.2.tgz", + "integrity": "sha512-wMRu7Y709GpRrbPSN6uiYPCsNk5J/ZjvNuHGCbSUNNZEs1u4q09qnoTbY1EcwGAb3RkDEHEyrE9ArJNT4w0HOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/table-core": "^8.20.5" + }, + "peerDependencies": { + "svelte": "^5.0.0" + } + }, + "web-common/node_modules/vega-embed": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/vega-embed/-/vega-embed-7.1.0.tgz", + "integrity": "sha512-ZmEIn5XJrQt7fSh2lwtSdXG/9uf3yIqZnvXFEwBJRppiBgrEWZcZbj6VK3xn8sNTFQ+sQDXW5sl/6kmbAW3s5A==", + "license": "BSD-3-Clause", + "dependencies": { + "fast-json-patch": "^3.1.1", + "json-stringify-pretty-compact": "^4.0.0", + "semver": "^7.7.2", + "tslib": "^2.8.1", + "vega-interpreter": "^2.0.0", + "vega-schema-url-parser": "^3.0.2", + "vega-themes": "3.0.0", + "vega-tooltip": "1.0.0" + }, + "funding": { + "url": "https://app.hubspot.com/payments/GyPC972GD9Rt" + }, + "peerDependencies": { + "vega": "*", + "vega-lite": "*" + } + }, "web-integration": { "version": "0.0.0" }, @@ -46938,7 +46812,7 @@ "axios": "^1.7.7", "playwright": "^1.50.1", "postcss-load-config": "^6.0.1", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-check": "^4.0.4", "svelte-preprocess": "^6.0.3", "testcontainers": "^11.0.3", diff --git a/package.json b/package.json index 5ebf16d44aa..475fc3c42b1 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "quality:ci": "FAIL_FAST=true bash ./scripts/web-test-code-quality.sh" }, "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^4.0.4", "@types/eslint": "^8.56.9", "@vitest/eslint-plugin": "^1.1.42", "eslint": "^9.24.0", @@ -45,6 +46,7 @@ ] }, "overrides": { - "@sveltejs/vite-plugin-svelte": "^3.1.2" + "svelte": "^5.0.0", + "@sveltejs/vite-plugin-svelte": "^4.0.4" } } diff --git a/scripts/tsc-with-whitelist.sh b/scripts/tsc-with-whitelist.sh index ca2fdffbf5a..0c1575687b8 100755 --- a/scripts/tsc-with-whitelist.sh +++ b/scripts/tsc-with-whitelist.sh @@ -2,17 +2,9 @@ whitelist=" web-admin/src/features/alerts/selectors.ts: error TS18048 -web-admin/src/features/alerts/selectors.ts: error TS2345 +web-admin/src/features/billing/issues/getMessageForTrialPlan.ts: error TS18048 web-admin/src/features/dashboards/listing/selectors.ts: error TS18048 -web-admin/src/features/dashboards/listing/selectors.ts: error TS2322 -web-admin/src/features/dashboards/listing/selectors.ts: error TS2345 -web-admin/src/features/dashboards/listing/selectors.ts: error TS2769 -web-admin/src/components/errors/error-utils.ts: error TS18048 -web-admin/src/components/errors/error-utils.ts: error TS2322 web-admin/src/features/scheduled-reports/selectors.ts: error TS18048 -web-admin/src/features/scheduled-reports/selectors.ts: error TS2345 -web-admin/src/features/billing/issues/getMessageForTrialPlan.ts: error TS18048 -web-admin/src/features/billing/plans/selectors.ts: error TS18048 web-admin/src/routes/[organization]/-/settings/+layout.ts: error TS2307 web-admin/src/routes/[organization]/-/settings/+page.ts: error TS2307 web-admin/src/routes/[organization]/-/settings/billing/+page.ts: error TS2307 @@ -21,42 +13,18 @@ web-admin/src/routes/[organization]/-/settings/billing/upgrade/+page.ts: error T web-admin/src/routes/[organization]/-/settings/usage/+page.ts: error TS2307 web-admin/src/routes/[organization]/-/upgrade-callback/+page.ts: error TS2307 web-admin/src/routes/[organization]/[project]/-/open-query/+page.ts: error TS2307 -web-admin/src/routes/[organization]/[project]/-/share/[token]/+page.ts: error TS2345 -web-common/src/components/editor/line-status/line-number-gutter.ts: error TS2322 -web-common/src/components/editor/line-status/line-number-gutter.ts: error TS2339 +web-common/src/components/editor/line-status/line-number-gutter.svelte.ts: error TS2322 +web-common/src/components/editor/line-status/line-number-gutter.svelte.ts: error TS2339 web-common/src/components/editor/line-status/line-status-gutter.ts: error TS2339 web-common/src/components/editor/line-status/state.ts: error TS2322 -web-common/src/features/dashboards/selectors.ts: error TS18048 -web-common/src/features/dashboards/selectors.ts: error TS2322 -web-common/src/features/dashboards/selectors.ts: error TS2345 -web-common/src/features/dashboards/state-managers/selectors/dashboard-queries.ts: error TS2322 -web-common/src/features/dashboards/time-controls/time-control-store.spec.ts: error TS18048 web-common/src/features/dashboards/time-controls/time-control-store.spec.ts: error TS2322 -web-common/src/features/dashboards/time-controls/time-control-store.spec.ts: error TS2345 -web-common/src/features/dashboards/time-controls/time-range-utils.ts: error TS2322 -web-common/src/features/dashboards/url-state/filters/expression.cjs: error TS5097 web-common/src/features/dashboards/url-state/filters/expression.cjs: error TS1286 +web-common/src/features/dashboards/url-state/time-ranges/rill-time.cjs: error TS1286 web-common/src/features/metrics-views/column-selectors.ts: error TS18048 -web-common/src/features/metrics-views/editor/create-placeholder.ts: error TS2322 -web-common/src/features/models/inspector/utils.ts: error TS18048 web-common/src/lib/formatters.ts: error TS18046 web-common/src/lib/number-formatting/utils/format-with-order-of-magnitude.spec.ts: error TS2345 web-common/src/lib/time/comparisons/index.ts: error TS2322 -web-common/src/lib/time/grains/index.spec.ts: error TS2345 -web-common/src/lib/time/ranges/index.ts: error TS18048 -web-common/src/lib/time/ranges/index.ts: error TS2345 -web-common/src/lib/url-utils.ts: error TS2345 -web-common/src/runtime-client/fetchWrapper.ts: error TS2345 -web-common/src/runtime-client/http-request-queue/Heap.ts: error TS2322 -web-common/src/runtime-client/http-request-queue/Heap.ts: error TS2345 -web-common/src/runtime-client/http-request-queue/Heap.ts: error TS2538 -web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts: error TS18048 -web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts: error TS2345 -web-common/src/runtime-client/http-request-queue/HttpRequestQueue.ts: error TS2532 -web-common/src/runtime-client/http-request-queue/HttpRequestQueueTypes.ts: error TS18048 -web-common/src/runtime-client/http-request-queue/HttpRequestQueueTypes.ts: error TS2322 web-common/src/lib/time/config.ts: error TS2322 -web-common/src/features/dashboards/url-state/time-ranges/rill-time.cjs: error TS1286 " # Run TypeScript compiler and find all distinct error per file diff --git a/web-admin/package.json b/web-admin/package.json index fffb076022c..228a96d8e60 100644 --- a/web-admin/package.json +++ b/web-admin/package.json @@ -23,13 +23,13 @@ "@sveltejs/adapter-static": "^3.0.5", "@sveltejs/kit": "^2.7.1", "@tanstack/svelte-query": "^5.69.0", - "@tanstack/svelte-table": "^8.11.8", + "tanstack-table-8-svelte-5": "^0.1.2", "autoprefixer": "^10.4.20", "axios": "^1.7.7", "cronstrue": "^2.41.0", "orval": "^7.8.0", "postcss": "^8.4.47", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-check": "^4.0.4", "svelte-preprocess": "^6.0.3", "tailwindcss": "^3.4.13", diff --git a/web-admin/src/features/alerts/CreateAlert.svelte b/web-admin/src/features/alerts/CreateAlert.svelte index 3a48edfbff7..c514116ceb1 100644 --- a/web-admin/src/features/alerts/CreateAlert.svelte +++ b/web-admin/src/features/alerts/CreateAlert.svelte @@ -39,24 +39,32 @@ bind:open let:onCancel let:onClose + let:preventClose > - - - - - To create an alert, set a non-custom time range. - - + + {#snippet child({ props })} + + + + To create an alert, set a non-custom time range. + + + {/snippet} - + - - + + {#snippet child({ props })} + + {/snippet} - + diff --git a/web-admin/src/features/alerts/history/AlertHistoryTable.svelte b/web-admin/src/features/alerts/history/AlertHistoryTable.svelte index 4b5fd28a996..92bbbc461be 100644 --- a/web-admin/src/features/alerts/history/AlertHistoryTable.svelte +++ b/web-admin/src/features/alerts/history/AlertHistoryTable.svelte @@ -5,8 +5,8 @@ import ResourceList from "@rilldata/web-admin/features/resources/ResourceList.svelte"; import type { V1AlertExecution } from "@rilldata/web-common/runtime-client/gen/index.schemas"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; - import type { ColumnDef } from "@tanstack/svelte-table"; - import { flexRender } from "@tanstack/svelte-table"; + import type { ColumnDef } from "tanstack-table-8-svelte-5"; + import { renderComponent } from "tanstack-table-8-svelte-5"; export let alert: string; @@ -23,7 +23,7 @@ { id: "composite", cell: (info) => - flexRender(AlertHistoryTableCompositeCell, { + renderComponent(AlertHistoryTableCompositeCell, { alertTime: info.row.original.executionTime, timeZone: $alertQuery.data.resource.alert.spec.refreshSchedule.timeZone, diff --git a/web-admin/src/features/alerts/listing/AlertsTable.svelte b/web-admin/src/features/alerts/listing/AlertsTable.svelte index fefd956aeab..fb4b18ac4e4 100644 --- a/web-admin/src/features/alerts/listing/AlertsTable.svelte +++ b/web-admin/src/features/alerts/listing/AlertsTable.svelte @@ -3,7 +3,7 @@ import ResourceListEmptyState from "@rilldata/web-admin/features/resources/ResourceListEmptyState.svelte"; import AlertIcon from "@rilldata/web-common/components/icons/AlertIcon.svelte"; import type { V1Resource } from "@rilldata/web-common/runtime-client/gen/index.schemas"; - import { flexRender, type ColumnDef } from "@tanstack/svelte-table"; + import { renderComponent, type ColumnDef } from "tanstack-table-8-svelte-5"; import AlertsTableCompositeCell from "./AlertsTableCompositeCell.svelte"; export let data: V1Resource[]; @@ -24,7 +24,7 @@ { id: "composite", cell: (info) => - flexRender(AlertsTableCompositeCell, { + renderComponent(AlertsTableCompositeCell, { organization: organization, project: project, id: info.row.original.meta.name.name, diff --git a/web-admin/src/features/alerts/listing/AlertsTableActionCell.svelte b/web-admin/src/features/alerts/listing/AlertsTableActionCell.svelte index 612cad636c3..06431906183 100644 --- a/web-admin/src/features/alerts/listing/AlertsTableActionCell.svelte +++ b/web-admin/src/features/alerts/listing/AlertsTableActionCell.svelte @@ -6,7 +6,7 @@ diff --git a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte index ab43a19a811..2ea8d710117 100644 --- a/web-admin/src/features/alerts/metadata/AlertMetadata.svelte +++ b/web-admin/src/features/alerts/metadata/AlertMetadata.svelte @@ -141,7 +141,7 @@

{alertSpec.displayName}

-
+
{#if !$isAlertCreatedByCode.data} @@ -151,7 +151,7 @@ - + Delete Alert diff --git a/web-admin/src/features/authentication/AvatarButton.svelte b/web-admin/src/features/authentication/AvatarButton.svelte index 95dc0bb5d04..29fb95350f4 100644 --- a/web-admin/src/features/authentication/AvatarButton.svelte +++ b/web-admin/src/features/authentication/AvatarButton.svelte @@ -54,7 +54,9 @@ }; }); - // Keep src in sync if the user query resolves or changes after mount + // Keep src in sync if the user query resolves or changes after mount. + // sharedImg is module-level (shared singleton); reactivity is driven by $user.data. + // svelte-ignore reactive_declaration_module_script_dependency $: if ( sharedImg && $user.data?.user?.photoUrl && @@ -80,7 +82,7 @@ -
+
{#if params.organization && params.project} @@ -91,7 +93,7 @@ { + onclick={() => { subMenuOpen = !subMenuOpen; }} > @@ -143,9 +145,9 @@ > Join us on Discord - + Contact Rill support - Logout + Logout diff --git a/web-admin/src/features/billing/ContactUs.svelte b/web-admin/src/features/billing/ContactUs.svelte index 8e978938770..6cc6bbd853d 100644 --- a/web-admin/src/features/billing/ContactUs.svelte +++ b/web-admin/src/features/billing/ContactUs.svelte @@ -8,6 +8,6 @@ } - diff --git a/web-admin/src/features/billing/contact/ChangeBillingContactDialog.svelte b/web-admin/src/features/billing/contact/ChangeBillingContactDialog.svelte index 621a2c859d1..91231b81c7e 100644 --- a/web-admin/src/features/billing/contact/ChangeBillingContactDialog.svelte +++ b/web-admin/src/features/billing/contact/ChangeBillingContactDialog.svelte @@ -66,8 +66,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/billing/plans/StartTeamPlanDialog.svelte b/web-admin/src/features/billing/plans/StartTeamPlanDialog.svelte index f674f5c92e2..5037d3a87b4 100644 --- a/web-admin/src/features/billing/plans/StartTeamPlanDialog.svelte +++ b/web-admin/src/features/billing/plans/StartTeamPlanDialog.svelte @@ -148,8 +148,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/billing/plans/TeamPlan.svelte b/web-admin/src/features/billing/plans/TeamPlan.svelte index c811c717e10..25fe9c7eded 100644 --- a/web-admin/src/features/billing/plans/TeamPlan.svelte +++ b/web-admin/src/features/billing/plans/TeamPlan.svelte @@ -68,8 +68,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/billing/plans/WelcomeToRillCloudDialog.svelte b/web-admin/src/features/billing/plans/WelcomeToRillCloudDialog.svelte index af1a8e9c94a..04fea0566ec 100644 --- a/web-admin/src/features/billing/plans/WelcomeToRillCloudDialog.svelte +++ b/web-admin/src/features/billing/plans/WelcomeToRillCloudDialog.svelte @@ -15,8 +15,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/bookmarks/Bookmarks.svelte b/web-admin/src/features/bookmarks/Bookmarks.svelte index b766619fcf4..9be4abbe26e 100644 --- a/web-admin/src/features/bookmarks/Bookmarks.svelte +++ b/web-admin/src/features/bookmarks/Bookmarks.svelte @@ -165,21 +165,23 @@ {manageProject} /> - - - + + + {#snippet child({ props })} + + {/snippet} - (showDialog = true)}> + (showDialog = true)}>
Bookmark current view
@@ -206,7 +208,6 @@ {bookmark} {onEdit} onDelete={deleteBookmark} - on:select /> {/key} {/each} diff --git a/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte b/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte index de4069b7b42..4fe7404f35a 100644 --- a/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte +++ b/web-admin/src/features/bookmarks/BookmarksFormDialog.svelte @@ -261,7 +261,10 @@ Managed bookmarks will be available to all viewers of this dashboard.`; class="flex flex-col gap-4 z-50" id={formId} use:enhance - on:submit|preventDefault={submit} + onsubmit={(e) => { + e.preventDefault(); + submit(e); + }} >
-
+
diff --git a/web-admin/src/features/bookmarks/BookmarksMenuItem.svelte b/web-admin/src/features/bookmarks/BookmarksMenuItem.svelte index ba8faa77ca9..17c92465941 100644 --- a/web-admin/src/features/bookmarks/BookmarksMenuItem.svelte +++ b/web-admin/src/features/bookmarks/BookmarksMenuItem.svelte @@ -67,8 +67,8 @@
(hovered = true)} - on:mouseleave={() => (hovered = false)} + onmouseenter={() => (hovered = true)} + onmouseleave={() => (hovered = false)} role="menuitem" tabindex="-1" aria-label={`${bookmark.resource.displayName ?? ""} Bookmark Entry`} @@ -76,7 +76,7 @@
@@ -102,18 +102,20 @@ {/if} - - - + + + {#snippet child({ props })} + + {/snippet} {#if showDeleteTooltip} diff --git a/web-admin/src/features/bookmarks/HomeBookmarkButton.svelte b/web-admin/src/features/bookmarks/HomeBookmarkButton.svelte index 420364981b2..7e12fb8ed6d 100644 --- a/web-admin/src/features/bookmarks/HomeBookmarkButton.svelte +++ b/web-admin/src/features/bookmarks/HomeBookmarkButton.svelte @@ -47,18 +47,20 @@ {#if manageProject} - - - + + + {#snippet child({ props })} + + {/snippet} {#if homeBookmark} @@ -74,7 +76,7 @@ href={fullHomeBookmarkUrl} class="flex flex-row gap-x-2 w-full min-h-7" aria-label="Home Bookmark Entry" - on:click={goToDashboardHome} + onclick={goToDashboardHome} >
@@ -88,7 +90,7 @@ {/if} - +
@@ -104,26 +106,28 @@ {:else} - - - + + + {#snippet child({ props })} + + {/snippet} Return to dashboard home diff --git a/web-admin/src/features/dashboards/listing/DashboardsTable.svelte b/web-admin/src/features/dashboards/listing/DashboardsTable.svelte index 280df562578..4cdadbf90a5 100644 --- a/web-admin/src/features/dashboards/listing/DashboardsTable.svelte +++ b/web-admin/src/features/dashboards/listing/DashboardsTable.svelte @@ -7,7 +7,7 @@ import DelayedSpinner from "@rilldata/web-common/features/entity-management/DelayedSpinner.svelte"; import type { V1Resource } from "@rilldata/web-common/runtime-client"; import { useRuntimeClient } from "@rilldata/web-common/runtime-client/v2"; - import { flexRender } from "@tanstack/svelte-table"; + import { renderComponent } from "tanstack-table-8-svelte-5"; import DashboardsTableCompositeCell from "./DashboardsTableCompositeCell.svelte"; import { useDashboards } from "./selectors"; @@ -64,7 +64,7 @@ ? resource.explore?.state?.dataRefreshedOn : resource.canvas?.state?.dataRefreshedOn; - return flexRender(DashboardsTableCompositeCell, { + return renderComponent(DashboardsTableCompositeCell, { name, title, lastRefreshed: refreshedOn, @@ -72,6 +72,8 @@ error: resource.meta.reconcileError, isMetricsExplorer, isEmbedded, + organization, + project, }); }, }, diff --git a/web-admin/src/features/dashboards/listing/DashboardsTableCompositeCell.svelte b/web-admin/src/features/dashboards/listing/DashboardsTableCompositeCell.svelte index 0180652b0c1..deea0f98325 100644 --- a/web-admin/src/features/dashboards/listing/DashboardsTableCompositeCell.svelte +++ b/web-admin/src/features/dashboards/listing/DashboardsTableCompositeCell.svelte @@ -1,5 +1,4 @@ - - - - Share dashboard - + + {#snippet child({ props })} + + + Share dashboard + + {/snippet} diff --git a/web-admin/src/features/embeds/EmbedHeader.svelte b/web-admin/src/features/embeds/EmbedHeader.svelte index 6fa3f539a35..65a1ba35360 100644 --- a/web-admin/src/features/embeds/EmbedHeader.svelte +++ b/web-admin/src/features/embeds/EmbedHeader.svelte @@ -81,7 +81,7 @@ {:else} -
+
{/if} {#if showDashboardChat} @@ -92,5 +92,5 @@ {/if}
{:else} -
+
{/if} diff --git a/web-admin/src/features/organizations/OrganizationTabs.svelte b/web-admin/src/features/organizations/OrganizationTabs.svelte index f8f0fa47285..cc5e88a3de0 100644 --- a/web-admin/src/features/organizations/OrganizationTabs.svelte +++ b/web-admin/src/features/organizations/OrganizationTabs.svelte @@ -54,7 +54,7 @@ + > {/if} {/if}
diff --git a/web-admin/src/features/organizations/settings/DeleteOrg.svelte b/web-admin/src/features/organizations/settings/DeleteOrg.svelte index bcbd86daf69..c69978b8eb1 100644 --- a/web-admin/src/features/organizations/settings/DeleteOrg.svelte +++ b/web-admin/src/features/organizations/settings/DeleteOrg.svelte @@ -58,10 +58,8 @@ error={deleteOrgResult.error?.message} onConfirm={deleteOrg} > - - + + diff --git a/web-admin/src/features/organizations/settings/OrgDomainAllowListSettings.svelte b/web-admin/src/features/organizations/settings/OrgDomainAllowListSettings.svelte index cbdce3a1fc2..0a1dbe68526 100644 --- a/web-admin/src/features/organizations/settings/OrgDomainAllowListSettings.svelte +++ b/web-admin/src/features/organizations/settings/OrgDomainAllowListSettings.svelte @@ -72,7 +72,7 @@ {:else} diff --git a/web-admin/src/features/organizations/settings/OrgNameSettings.svelte b/web-admin/src/features/organizations/settings/OrgNameSettings.svelte index 114bcbc1718..9ee1ed5a5aa 100644 --- a/web-admin/src/features/organizations/settings/OrgNameSettings.svelte +++ b/web-admin/src/features/organizations/settings/OrgNameSettings.svelte @@ -107,7 +107,10 @@
{ + e.preventDefault(); + submit(e); + }} class="update-org-form" use:enhance > diff --git a/web-admin/src/features/organizations/settings/UploadImagePopover.svelte b/web-admin/src/features/organizations/settings/UploadImagePopover.svelte index cc63afdbe47..90fdee9ac40 100644 --- a/web-admin/src/features/organizations/settings/UploadImagePopover.svelte +++ b/web-admin/src/features/organizations/settings/UploadImagePopover.svelte @@ -10,8 +10,6 @@ PopoverTrigger, } from "@rilldata/web-common/components/popover/index.js"; import { extractFileExtension } from "@rilldata/web-common/features/entity-management/file-path-utils"; - import { builderActions, getAttrs } from "bits-ui"; - export let imageUrl: string; export let accept: string; export let label: string; @@ -75,33 +73,29 @@ if (!o) onCancel(); }} > - - +
+ {#if !open} +
+ +
+ {/if} - - diff --git a/web-admin/src/features/organizations/user-management/OrgUsersFilters.svelte b/web-admin/src/features/organizations/user-management/OrgUsersFilters.svelte index 62788c19846..214adbc9bcb 100644 --- a/web-admin/src/features/organizations/user-management/OrgUsersFilters.svelte +++ b/web-admin/src/features/organizations/user-management/OrgUsersFilters.svelte @@ -39,7 +39,7 @@ { + onclick={() => { filterSelection = "all"; }} > @@ -49,7 +49,7 @@ { + onclick={() => { filterSelection = "members"; }} > @@ -59,7 +59,7 @@ { + onclick={() => { filterSelection = "pending"; }} > @@ -85,7 +85,7 @@ { + onclick={() => { roleFilter = option.value; }} > diff --git a/web-admin/src/features/organizations/user-management/dialogs/AddGuestsDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/AddGuestsDialog.svelte index dfd40d67275..9fcaf656c90 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/AddGuestsDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/AddGuestsDialog.svelte @@ -195,21 +195,25 @@ { - e.preventDefault(); - open = false; - resetDialogState(); - }} onOpenChange={(dialogOpen) => { if (!dialogOpen) { resetDialogState(); } }} > - - + + {#snippet child({ props })} + + {/snippet} - + { + e.preventDefault(); + open = false; + resetDialogState(); + }} + > Add guest users @@ -219,7 +223,10 @@ { + e.preventDefault(); + submit(e); + }} class="w-full" use:enhance > @@ -252,10 +259,7 @@ {:else if projects.length === 0}
No projects
{:else} - + {#each projects as p (p.id)} toggleProjectSelection(p.name)} diff --git a/web-admin/src/features/organizations/user-management/dialogs/AddUsersDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/AddUsersDialog.svelte index 1270e5fd9cd..3149876966f 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/AddUsersDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/AddUsersDialog.svelte @@ -161,15 +161,6 @@ { - e.preventDefault(); - open = false; - email = ""; - role = ""; - isSuperUser = false; - failedInvites = []; - $form.emails = [""]; - }} onOpenChange={(open) => { if (!open) { email = ""; @@ -180,16 +171,32 @@ } }} > - - + + {#snippet child({ props })} + + {/snippet} - + { + e.preventDefault(); + open = false; + email = ""; + role = ""; + isSuperUser = false; + failedInvites = []; + $form.emails = [""]; + }} + > Add users { + e.preventDefault(); + submit(e); + }} class="w-full" use:enhance > @@ -203,7 +210,7 @@ plural="emails" >
- + @@ -220,7 +227,7 @@ > {#each ORG_ROLES_OPTIONS as { value, label, description } (value)} ($form.role = value)} + onclick={() => ($form.role = value)} class="text-xs hover:bg-surface-hover {$form.role === value ? 'bg-surface-active' : ''}" diff --git a/web-admin/src/features/organizations/user-management/dialogs/ChangingBillingContactRoleDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/ChangingBillingContactRoleDialog.svelte index beb0390dba8..2a92df27eb6 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/ChangingBillingContactRoleDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/ChangingBillingContactRoleDialog.svelte @@ -7,8 +7,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/organizations/user-management/dialogs/ConvertGuestToMemberDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/ConvertGuestToMemberDialog.svelte index eed99385998..337a1b802f6 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/ConvertGuestToMemberDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/ConvertGuestToMemberDialog.svelte @@ -65,17 +65,19 @@ } - { - e.preventDefault(); - open = false; - }} -> - - + + + {#snippet child({ props })} + + {/snippet} - + { + e.preventDefault(); + open = false; + }} + > Convert to member
Convert {userName} to {role}
diff --git a/web-admin/src/features/organizations/user-management/dialogs/CreateUserGroupDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/CreateUserGroupDialog.svelte index 23cbecf39c0..dcc4ca26132 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/CreateUserGroupDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/CreateUserGroupDialog.svelte @@ -258,26 +258,28 @@ { - e.preventDefault(); - }} onOpenChange={(open) => { if (!open) { handleClose(); } }} > - - + + {#snippet child({ props })} + + {/snippet} - + Create a group { + e.preventDefault(); + submit(e); + }} use:enhance >
@@ -317,7 +319,7 @@ onSelectedChange={(values) => { if (!values) return; - const newEmails = values.map((v) => v.value); + const newEmails = values; const currentEmails = selectedUsers.map((u) => u.userEmail); // Find emails to add (in new but not in current) diff --git a/web-admin/src/features/organizations/user-management/dialogs/DeleteUserGroupConfirmDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/DeleteUserGroupConfirmDialog.svelte index ef5775bdc2c..8493a8bc4b0 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/DeleteUserGroupConfirmDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/DeleteUserGroupConfirmDialog.svelte @@ -62,8 +62,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/organizations/user-management/dialogs/EditUserGroupDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/EditUserGroupDialog.svelte index f073fd6521d..f9b70247e05 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/EditUserGroupDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/EditUserGroupDialog.svelte @@ -274,26 +274,28 @@ { - e.preventDefault(); - }} onOpenChange={(open) => { if (!open) { handleClose(); } }} > - - + + {#snippet child({ props })} + + {/snippet} - + Edit group { + e.preventDefault(); + submit(e); + }} use:enhance >
@@ -330,7 +332,7 @@ onSelectedChange={(values) => { if (!values) return; - const newEmails = values.map((v) => v.value); + const newEmails = values; const currentEmails = selectedUsers.map((u) => u.userEmail); // Find emails to add (in new but not in current) diff --git a/web-admin/src/features/organizations/user-management/dialogs/OrgUpgradeGuestConfirmDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/OrgUpgradeGuestConfirmDialog.svelte index 62f63fca347..95a937f44e7 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/OrgUpgradeGuestConfirmDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/OrgUpgradeGuestConfirmDialog.svelte @@ -26,8 +26,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/organizations/user-management/dialogs/RemoveUserFromOrgConfirmDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/RemoveUserFromOrgConfirmDialog.svelte index 90694de4404..f5bbb89753d 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/RemoveUserFromOrgConfirmDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/RemoveUserFromOrgConfirmDialog.svelte @@ -25,8 +25,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/organizations/user-management/dialogs/RemovingBillingContactDialog.svelte b/web-admin/src/features/organizations/user-management/dialogs/RemovingBillingContactDialog.svelte index 09f11d2b45e..75d17cc72b3 100644 --- a/web-admin/src/features/organizations/user-management/dialogs/RemovingBillingContactDialog.svelte +++ b/web-admin/src/features/organizations/user-management/dialogs/RemovingBillingContactDialog.svelte @@ -7,8 +7,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/organizations/user-management/table/groups/GroupActionsCell.svelte b/web-admin/src/features/organizations/user-management/table/groups/GroupActionsCell.svelte index ae908272769..a5336fce4fc 100644 --- a/web-admin/src/features/organizations/user-management/table/groups/GroupActionsCell.svelte +++ b/web-admin/src/features/organizations/user-management/table/groups/GroupActionsCell.svelte @@ -23,7 +23,7 @@ { + onclick={() => { isEditDialogOpen = true; }} > @@ -33,7 +33,7 @@ { + onclick={() => { isDeleteConfirmOpen = true; }} > diff --git a/web-admin/src/features/organizations/user-management/table/groups/GroupCompositeCell.svelte b/web-admin/src/features/organizations/user-management/table/groups/GroupCompositeCell.svelte index b3d6008a190..04b9875f48b 100644 --- a/web-admin/src/features/organizations/user-management/table/groups/GroupCompositeCell.svelte +++ b/web-admin/src/features/organizations/user-management/table/groups/GroupCompositeCell.svelte @@ -104,9 +104,9 @@ class="flex flex-row items-center gap-x-1" role="button" tabindex="0" - on:mouseenter={() => (hovered = true)} - on:focus={() => (hovered = true)} - on:blur={() => (hovered = false)} + onmouseenter={() => (hovered = true)} + onfocus={() => (hovered = true)} + onblur={() => (hovered = false)} > {usersCount} user{usersCount === 1 ? "" : "s"} diff --git a/web-admin/src/features/organizations/user-management/table/groups/GroupRoleCell.svelte b/web-admin/src/features/organizations/user-management/table/groups/GroupRoleCell.svelte index 383aadb390a..15746f8be57 100644 --- a/web-admin/src/features/organizations/user-management/table/groups/GroupRoleCell.svelte +++ b/web-admin/src/features/organizations/user-management/table/groups/GroupRoleCell.svelte @@ -128,7 +128,7 @@ class="font-normal flex flex-col items-start py-2 {role === 'admin' ? 'bg-gray-100' : ''}" - on:click={() => handleRoleSelect(OrgUserRoles.Admin)} + onclick={() => handleRoleSelect(OrgUserRoles.Admin)} > Admin handleRoleSelect(OrgUserRoles.Editor)} + onclick={() => handleRoleSelect(OrgUserRoles.Editor)} > Editor handleRoleSelect(OrgUserRoles.Viewer)} + onclick={() => handleRoleSelect(OrgUserRoles.Viewer)} > Viewer Remove diff --git a/web-admin/src/features/organizations/user-management/table/groups/OrgGroupsTable.svelte b/web-admin/src/features/organizations/user-management/table/groups/OrgGroupsTable.svelte index d0db64f6b7f..6f27f9486fa 100644 --- a/web-admin/src/features/organizations/user-management/table/groups/OrgGroupsTable.svelte +++ b/web-admin/src/features/organizations/user-management/table/groups/OrgGroupsTable.svelte @@ -1,7 +1,7 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/projects/environment-variables/EditDialog.svelte b/web-admin/src/features/projects/environment-variables/EditDialog.svelte index 7d4bf70cc9d..431443a2655 100644 --- a/web-admin/src/features/projects/environment-variables/EditDialog.svelte +++ b/web-admin/src/features/projects/environment-variables/EditDialog.svelte @@ -269,15 +269,16 @@ } - handleReset()} - onOutsideClick={() => handleReset()} -> - - + handleReset()}> + + {#snippet child({ props })} + + {/snippet} - + handleReset()} + > Edit environment variable @@ -290,7 +291,10 @@ { + e.preventDefault(); + submit(e); + }} use:enhance >
@@ -330,14 +334,14 @@ ? "error-input-wrapper" : ""} placeholder="Key" - on:input={(e) => handleKeyChange(e)} + oninput={(e) => handleKeyChange(e)} /> handleValueChange(e)} + oninput={(e) => handleValueChange(e)} />
{#if $errors.key} diff --git a/web-admin/src/features/projects/environment-variables/EnvironmentVariablesTable.svelte b/web-admin/src/features/projects/environment-variables/EnvironmentVariablesTable.svelte index e5035a79d77..4300d1ad23d 100644 --- a/web-admin/src/features/projects/environment-variables/EnvironmentVariablesTable.svelte +++ b/web-admin/src/features/projects/environment-variables/EnvironmentVariablesTable.svelte @@ -1,6 +1,6 @@ - - + + {#snippet child({ props })} + + {/snippet} @@ -54,7 +56,7 @@ diff --git a/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte b/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte index 541d0b6dab4..18fb0a5bdea 100644 --- a/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte +++ b/web-admin/src/features/projects/status/resource-table/ProjectResourcesTable.svelte @@ -12,8 +12,8 @@ import { goto } from "$app/navigation"; import { page } from "$app/stores"; import { useQueryClient } from "@tanstack/svelte-query"; - import type { ColumnDef } from "@tanstack/svelte-table"; - import { flexRender } from "@tanstack/svelte-table"; + import type { ColumnDef } from "tanstack-table-8-svelte-5"; + import { renderComponent } from "tanstack-table-8-svelte-5"; import ActionsCell from "./ActionsCell.svelte"; import NameCell from "./NameCell.svelte"; import RefreshCell from "./RefreshCell.svelte"; @@ -145,7 +145,7 @@ header: "Type", accessorFn: (row) => row.meta.name.kind, cell: ({ row }) => - flexRender(ResourceTypeBadge, { + renderComponent(ResourceTypeBadge, { kind: row.original.meta.name.kind as ResourceKind, }), }, @@ -153,7 +153,7 @@ accessorFn: (row) => row.meta.name.name, header: "Name", cell: ({ getValue }) => - flexRender(NameCell, { + renderComponent(NameCell, { name: getValue() as string, }), }, @@ -182,7 +182,7 @@ ); }, cell: ({ row }) => - flexRender(ResourceErrorMessage, { + renderComponent(ResourceErrorMessage, { message: row.original.meta.reconcileError, status: row.original.meta.reconcileStatus, }), @@ -195,7 +195,7 @@ header: "Last refresh", sortDescFirst: true, cell: (info) => - flexRender(RefreshCell, { + renderComponent(RefreshCell, { date: info.getValue() as string, }), }, @@ -203,7 +203,7 @@ accessorFn: (row) => row.meta.reconcileOn, header: "Next refresh", cell: (info) => - flexRender(RefreshCell, { + renderComponent(RefreshCell, { date: info.getValue() as string, }), }, @@ -216,7 +216,7 @@ status === V1ReconcileStatus.RECONCILE_STATUS_PENDING || status === V1ReconcileStatus.RECONCILE_STATUS_RUNNING; const resourceKey = `${row.original.meta.name.kind}:${row.original.meta.name.name}`; - return flexRender(ActionsCell, { + return renderComponent(ActionsCell, { resourceKind: row.original.meta.name.kind, resourceName: row.original.meta.name.name, resource: row.original, diff --git a/web-admin/src/features/projects/status/resource-table/ResourceErrorMessage.svelte b/web-admin/src/features/projects/status/resource-table/ResourceErrorMessage.svelte index 61560e5b641..1604ac914d6 100644 --- a/web-admin/src/features/projects/status/resource-table/ResourceErrorMessage.svelte +++ b/web-admin/src/features/projects/status/resource-table/ResourceErrorMessage.svelte @@ -27,7 +27,7 @@ - Share project - + + {#snippet child({ props })} + + + Share project + + {/snippet} { + e.preventDefault(); + submit(e); + }} class="w-full" use:enhance > diff --git a/web-admin/src/features/projects/user-management/UserRoleSelect.svelte b/web-admin/src/features/projects/user-management/UserRoleSelect.svelte index 988ea3c41a0..cdc9aa1e676 100644 --- a/web-admin/src/features/projects/user-management/UserRoleSelect.svelte +++ b/web-admin/src/features/projects/user-management/UserRoleSelect.svelte @@ -21,7 +21,7 @@ $: selected = PROJECT_ROLES_OPTIONS.find((o) => o.value === value); - + + onclick={() => handleSetRole(getUserEmail(user), ProjectUserRoles.Admin)} > Admin @@ -153,7 +153,7 @@ 'editor' ? 'bg-gray-100' : ''}" - on:click={() => + onclick={() => handleSetRole(getUserEmail(user), ProjectUserRoles.Editor)} > Editor @@ -167,7 +167,7 @@ 'viewer' ? 'bg-gray-100' : ''}" - on:click={() => + onclick={() => handleSetRole(getUserEmail(user), ProjectUserRoles.Viewer)} > Viewer @@ -180,7 +180,7 @@ handleRemove(getUserEmail(user))} + onclick={() => handleRemove(getUserEmail(user))} > Remove diff --git a/web-admin/src/features/projects/user-management/UsergroupSetRole.svelte b/web-admin/src/features/projects/user-management/UsergroupSetRole.svelte index 722b19368b8..00128e223bb 100644 --- a/web-admin/src/features/projects/user-management/UsergroupSetRole.svelte +++ b/web-admin/src/features/projects/user-management/UsergroupSetRole.svelte @@ -101,7 +101,7 @@ 'admin' ? 'bg-surface-active' : ''}" - on:click={() => handleSetRole(group.groupName, ProjectUserRoles.Admin)} + onclick={() => handleSetRole(group.groupName, ProjectUserRoles.Admin)} > Admin handleSetRole(group.groupName, ProjectUserRoles.Editor)} + onclick={() => handleSetRole(group.groupName, ProjectUserRoles.Editor)} > Editor handleSetRole(group.groupName, ProjectUserRoles.Viewer)} + onclick={() => handleSetRole(group.groupName, ProjectUserRoles.Viewer)} > Viewer handleRemove(group.groupName)} + onclick={() => handleRemove(group.groupName)} > Remove diff --git a/web-admin/src/features/public-urls/CreatePublicURLForm.svelte b/web-admin/src/features/public-urls/CreatePublicURLForm.svelte index 68c03414044..7ab560f0388 100644 --- a/web-admin/src/features/public-urls/CreatePublicURLForm.svelte +++ b/web-admin/src/features/public-urls/CreatePublicURLForm.svelte @@ -141,7 +141,14 @@ {#if !url} - + { + e.preventDefault(); + submit(e); + }} + use:enhance + >

Create a shareable public URL for this view.

diff --git a/web-admin/src/features/public-urls/DeletePublicURLConfirmDialog.svelte b/web-admin/src/features/public-urls/DeletePublicURLConfirmDialog.svelte index dad54f3207f..9deeeeb767f 100644 --- a/web-admin/src/features/public-urls/DeletePublicURLConfirmDialog.svelte +++ b/web-admin/src/features/public-urls/DeletePublicURLConfirmDialog.svelte @@ -25,8 +25,10 @@ - - + + {#snippet child({ props })} + + {/snippet} diff --git a/web-admin/src/features/public-urls/PublicURLsActionsRow.svelte b/web-admin/src/features/public-urls/PublicURLsActionsRow.svelte index 8037711dc4a..5a26d5d7ac7 100644 --- a/web-admin/src/features/public-urls/PublicURLsActionsRow.svelte +++ b/web-admin/src/features/public-urls/PublicURLsActionsRow.svelte @@ -28,7 +28,7 @@ {#if url} Copy URL @@ -37,7 +37,7 @@ { + onclick={() => { isDeleteConfirmOpen = true; }} > diff --git a/web-admin/src/features/public-urls/PublicURLsTable.svelte b/web-admin/src/features/public-urls/PublicURLsTable.svelte index 908164e939a..cc268ecb9b7 100644 --- a/web-admin/src/features/public-urls/PublicURLsTable.svelte +++ b/web-admin/src/features/public-urls/PublicURLsTable.svelte @@ -1,6 +1,6 @@ - - { - viewAsUserStore.set(null); - errorStore.reset(); - }} - > -
- Viewing as {$viewAsUserStore.email} -
-
+ + {#snippet child({ props })} + { + viewAsUserStore.set(null); + errorStore.reset(); + }} + > +
+ Viewing as {$viewAsUserStore.email} +
+
+ {/snippet}
No results found. - - {#each clientSideUsers as user} - handleViewAsUser(user)}> - {user.email} - - {/each} + + Users + + {#each clientSideUsers as user} + handleViewAsUser(user)}> + {user.email} + + {/each} + diff --git a/web-admin/src/routes/+layout.svelte b/web-admin/src/routes/+layout.svelte index 76ba904d827..b3bcb10db15 100644 --- a/web-admin/src/routes/+layout.svelte +++ b/web-admin/src/routes/+layout.svelte @@ -27,6 +27,7 @@ import ErrorBoundary from "../components/errors/ErrorBoundary.svelte"; import OrgHeader from "../features/organizations/OrgHeader.svelte"; import "@rilldata/web-common/app.css"; + import * as Tooltip from "@rilldata/web-common/components/tooltip-v2"; import { themeControl } from "@rilldata/web-common/features/themes/theme-control"; import { getThemedLogoUrl } from "@rilldata/web-admin/features/themes/organization-logo"; import type { V1Organization } from "@rilldata/web-admin/client"; @@ -136,32 +137,38 @@ {/if} - -
- - {#if !hideBillingManager} - - {/if} - {#if !isEmbed && !hideTopBar && !withinProject($page)} - - - {#if withinOnlyOrg} - + + +
+ + {#if !hideBillingManager} + {/if} - {/if} - - - -
-
- - + {#if !isEmbed && !hideTopBar && !withinProject($page)} + + + {#if withinOnlyOrg} + + {/if} + {/if} + + + +
+
+ + + diff --git a/web-admin/src/routes/[organization]/-/settings/usage/+page.svelte b/web-admin/src/routes/[organization]/-/settings/usage/+page.svelte index 04bb3175c23..2881c459d6f 100644 --- a/web-admin/src/routes/[organization]/-/settings/usage/+page.svelte +++ b/web-admin/src/routes/[organization]/-/settings/usage/+page.svelte @@ -22,8 +22,8 @@ src={data.billingPortalUrl} title="Orb Billing Portal" class="w-full h-[1000px]" - on:load={() => (iframeLoading = false)} -/> + onload={() => (iframeLoading = false)} +> diff --git a/web-admin/src/routes/[organization]/[project]/+page.svelte b/web-admin/src/routes/[organization]/[project]/+page.svelte index 124aec73b06..a72a13ba409 100644 --- a/web-admin/src/routes/[organization]/[project]/+page.svelte +++ b/web-admin/src/routes/[organization]/[project]/+page.svelte @@ -35,7 +35,7 @@
{#if isLoadingDisplayName} -
+
{:else if isErrorDisplayName}

+ onclick={() => handleFilterByEnvironment(EnvironmentType.UNDEFINED)} > All environments + onclick={() => handleFilterByEnvironment(EnvironmentType.PRODUCTION)} > Production + onclick={() => handleFilterByEnvironment(EnvironmentType.DEVELOPMENT)} > Development diff --git a/web-admin/svelte.config.js b/web-admin/svelte.config.js index abe66a1f1b8..bdc27a02dc6 100644 --- a/web-admin/svelte.config.js +++ b/web-admin/svelte.config.js @@ -5,6 +5,17 @@ import { vitePreprocess } from "@sveltejs/vite-plugin-svelte"; const config = { preprocess: vitePreprocess(), + // Suppress state_referenced_locally warnings from SvelteKit's auto-generated root.svelte. + // Fixed upstream in SvelteKit 2.49.1 (https://github.com/sveltejs/kit/pull/15013). + onwarn(warning, defaultHandler) { + if ( + warning.code === "state_referenced_locally" && + warning.filename?.includes(".svelte-kit/generated/root.svelte") + ) + return; + defaultHandler(warning); + }, + kit: { adapter: adapter({ fallback: "index.html", diff --git a/web-admin/tests/alerts.spec.ts b/web-admin/tests/alerts.spec.ts index 2bc3c5b83fa..3aab5e95a7c 100644 --- a/web-admin/tests/alerts.spec.ts +++ b/web-admin/tests/alerts.spec.ts @@ -20,15 +20,14 @@ test.describe.serial("Alerts", () => { // Select "Last 6 hours" as time range await interactWithTimeRangeMenu(alertForm, async () => { - await alertForm.getByRole("menuitem", { name: "Last 6 hours" }).click(); + // Menu content is portaled to document.body, so use page-level scope + await adminPage.getByRole("menuitem", { name: "Last 6 hours" }).click(); }); // Enable time comparison await alertForm.getByLabel("Toggle time comparison").click(); // Select "App Site Name" as split by dimension - await adminPage - .getByRole("combobox", { name: "Split by dimension" }) - .click(); + await adminPage.getByLabel("Split by dimension", { exact: true }).click(); await adminPage.getByRole("listbox").getByText("App Site Name").click(); // Preview should have the correct 1st row @@ -164,24 +163,30 @@ test.describe.serial("Alerts", () => { // Select "Last 24 hours" as time range await interactWithTimeRangeMenu(alertForm, async () => { - await alertForm + // Menu content is portaled to document.body, so use page-level scope + await adminPage .getByRole("menuitem", { name: "Last 24 hours" }) .click(); }); // Add "Ad Size" filter await alertForm.getByLabel("Add filter button").click(); - await alertForm.getByRole("menuitem", { name: "Ad Size" }).click(); - // Add filters for 1024x768, 120x600, 160x600 - await alertForm.getByRole("menuitem", { name: "1024x768" }).click(); - await alertForm.getByRole("menuitem", { name: "120x600" }).click(); - await alertForm.getByRole("menuitem", { name: "160x600" }).click(); + // Menu content is portaled to document.body, so use page-level scope + await adminPage.getByRole("menuitem", { name: "Ad Size" }).click(); + // DimensionFilter values are also portaled + await adminPage + .getByRole("menuitemcheckbox", { name: "1024x768" }) + .click(); + await adminPage + .getByRole("menuitemcheckbox", { name: "120x600" }) + .click(); + await adminPage + .getByRole("menuitemcheckbox", { name: "160x600" }) + .click(); await alertForm.getByLabel("Open ad_size filter").click(); // Update split by dimension to "App Site Domain" - await adminPage - .getByRole("combobox", { name: "Split by dimension" }) - .click(); + await adminPage.getByLabel("Split by dimension", { exact: true }).click(); await adminPage.getByRole("listbox").getByText("App Site Domain").click(); // Preview should have the correct 1st row @@ -289,9 +294,7 @@ test.describe.serial("Alerts", () => { const alertForm = adminPage.locator("form#create-alert-form"); // Select "App Site Name" as split by dimension - await adminPage - .getByRole("combobox", { name: "Split by dimension" }) - .click(); + await adminPage.getByLabel("Split by dimension", { exact: true }).click(); await adminPage.getByRole("listbox").getByText("App Site Name").click(); // Go to criteria tab diff --git a/web-admin/tests/embeds.spec.ts b/web-admin/tests/embeds.spec.ts index 06e7a111434..259ac0a0994 100644 --- a/web-admin/tests/embeds.spec.ts +++ b/web-admin/tests/embeds.spec.ts @@ -536,7 +536,7 @@ test.describe("Embeds", () => { // Go to the `Programmatic Ads Auction` dashboard using the breadcrumbs await frame.getByLabel("Breadcrumb dropdown").click(); await frame - .getByRole("menuitem", { + .getByRole("menuitemcheckbox", { name: "Programmatic Ads Auction", exact: true, }) @@ -554,7 +554,7 @@ test.describe("Embeds", () => { // Go to the `Bids Canvas Dashboard` dashboard using the breadcrumbs await frame.getByLabel("Breadcrumb dropdown").click(); await frame - .getByRole("menuitem", { name: "Bids Canvas Dashboard" }) + .getByRole("menuitemcheckbox", { name: "Bids Canvas Dashboard" }) .first() .click(); @@ -580,7 +580,7 @@ test.describe("Embeds", () => { // Go back to the `Programmatic Ads Bids` dashboard using the breadcrumbs await frame.getByLabel("Breadcrumb dropdown").click(); await frame - .getByRole("menuitem", { name: "Programmatic Ads Bids" }) + .getByRole("menuitemcheckbox", { name: "Programmatic Ads Bids" }) .click(); await embedPage.waitForTimeout(500); @@ -595,7 +595,7 @@ test.describe("Embeds", () => { // Go back to the `Bids Canvas Dashboard` dashboard using the breadcrumbs await frame.getByLabel("Breadcrumb dropdown").click(); await frame - .getByRole("menuitem", { name: "Bids Canvas Dashboard" }) + .getByRole("menuitemcheckbox", { name: "Bids Canvas Dashboard" }) .first() .click(); diff --git a/web-admin/tests/project-status-refresh.spec.ts b/web-admin/tests/project-status-refresh.spec.ts index 3e5e0a9a749..1bf69cea68c 100644 --- a/web-admin/tests/project-status-refresh.spec.ts +++ b/web-admin/tests/project-status-refresh.spec.ts @@ -25,8 +25,9 @@ test.describe("Project Status - Resource Refresh (openrtb)", () => { const modelRow = adminPage.locator(".row").filter({ hasText: "auction_data_model", }); - // Target the dropdown menu trigger specifically (rows may have multiple buttons) - await modelRow.locator("[data-melt-dropdown-menu-trigger]").click(); + await modelRow + .getByRole("button", { name: "Open resource actions" }) + .click(); // Verify "Full Refresh" is visible await expect( @@ -45,8 +46,9 @@ test.describe("Project Status - Resource Refresh (openrtb)", () => { const sourceRow = adminPage.locator(".row").filter({ hasText: "bids_data_raw", }); - // Target the dropdown menu trigger specifically (rows may have multiple buttons) - await sourceRow.locator("[data-melt-dropdown-menu-trigger]").click(); + await sourceRow + .getByRole("button", { name: "Open resource actions" }) + .click(); // Verify "Full Refresh" is visible await expect( @@ -66,8 +68,9 @@ test.describe("Project Status - Resource Refresh (openrtb)", () => { const modelRow = adminPage.locator(".row").filter({ hasText: "auction_data_model", }); - // Target the dropdown menu trigger specifically (rows may have multiple buttons) - await modelRow.locator("[data-melt-dropdown-menu-trigger]").click(); + await modelRow + .getByRole("button", { name: "Open resource actions" }) + .click(); // Verify "Full Refresh" is visible await expect( @@ -87,8 +90,9 @@ test.describe("Project Status - Resource Refresh (openrtb)", () => { const modelRow = adminPage.locator(".row").filter({ hasText: "auction_data_model", }); - // Target the dropdown menu trigger specifically (rows may have multiple buttons) - await modelRow.locator("[data-melt-dropdown-menu-trigger]").click(); + await modelRow + .getByRole("button", { name: "Open resource actions" }) + .click(); // "Refresh Errored Partitions" should not be visible for models without errored partitions await expect( @@ -101,8 +105,9 @@ test.describe("Project Status - Resource Refresh (openrtb)", () => { const modelRow = adminPage.locator(".row").filter({ hasText: "auction_data_model", }); - // Target the dropdown menu trigger specifically (rows may have multiple buttons) - await modelRow.locator("[data-melt-dropdown-menu-trigger]").click(); + await modelRow + .getByRole("button", { name: "Open resource actions" }) + .click(); // Click "Full Refresh" await adminPage.getByRole("menuitem", { name: "Full Refresh" }).click(); diff --git a/web-admin/tests/public-urls.spec.ts b/web-admin/tests/public-urls.spec.ts index d413d56dc58..7ce557a0ceb 100644 --- a/web-admin/tests/public-urls.spec.ts +++ b/web-admin/tests/public-urls.spec.ts @@ -11,15 +11,19 @@ test.describe.serial("Public URLs", () => { // Add a filter on "Pub Name" await page.getByLabel("Add Filter Button").click(); await page.getByRole("menuitem", { name: "Pub Name" }).click(); - await page.getByLabel("Pub Name").getByPlaceholder("Search").click(); - await page.getByLabel("Pub Name").getByPlaceholder("Search").fill("disney"); - await page.getByRole("menuitem", { name: "Disney" }).first().click(); - await page.getByLabel("pub_name filter", { exact: true }).click(); // Hides the popover + // DimensionFilter content is portaled to document.body, so use page-level scope + await page.getByPlaceholder("Search").click(); + await page.getByPlaceholder("Search").fill("disney"); + await page + .getByRole("menuitemcheckbox", { name: "Disney" }) + .first() + .click(); + await page.keyboard.press("Escape"); // Close the dimension filter popover // Change the time grain to hour // (Tests that non-default state propagates to the public URL) await page.getByLabel("Select reference time and grain").click(); - await page.getByRole("menuitem", { name: "hour" }).click(); + await page.getByRole("menuitemcheckbox", { name: "hour" }).click(); // Check the Big Number await expect( diff --git a/web-admin/tests/reports.spec.ts b/web-admin/tests/reports.spec.ts index d6ab5398904..d2c0803c59d 100644 --- a/web-admin/tests/reports.spec.ts +++ b/web-admin/tests/reports.spec.ts @@ -15,10 +15,13 @@ test.describe.serial("Reports", () => { // Enter dimension table "App Site Domain" await adminPage.getByText("App Site Domain").click(); - // Now and then clicking "App Site Domain" results in a tooltip being shown for a column in the dimension table. - // This tooltip blocks the export button causing the test to fail. - // So hover over "select all" to get rid of this tooltip. - await adminPage.getByText("Select all").hover(); + // Wait for the dimension table to fully render before interacting. + await adminPage.getByLabel("Dimension Display").waitFor(); + + // Clicking "App Site Domain" can trigger a tooltip that overlays the export + // button. Move the mouse away to dismiss it (Tooltip uses hoverIntent which + // only dismisses on mouse leave). + await adminPage.mouse.move(0, 0); // Open scheduled report dialog await adminPage.getByLabel("Export dimension table data").click(); @@ -40,7 +43,8 @@ test.describe.serial("Reports", () => { // Select "Last 14 Days" as time range await interactWithTimeRangeMenu(reportForm, async () => { - await reportForm.getByRole("menuitem", { name: "Last 14 days" }).click(); + // Menu content is portaled to document.body, so use page-level scope + await adminPage.getByRole("menuitem", { name: "Last 14 days" }).click(); }); // Enable time comparison await reportForm.getByLabel("Toggle time comparison").click(); @@ -53,8 +57,8 @@ test.describe.serial("Reports", () => { .click(); // Add "App Site Name" column await reportForm.getByLabel("Add Columns fields").click(); + // Menu content is portaled to document.body, so use page-level scope await adminPage - .getByLabel("Columns field list") .getByRole("menuitem", { name: "App Site Name" }) .click({ force: true }); // Assert columns @@ -63,10 +67,8 @@ test.describe.serial("Reports", () => { ); // Add "Pub Name" row await reportForm.getByLabel("Add Rows fields").click(); - await adminPage - .getByLabel("Rows field list") - .getByRole("menuitem", { name: "Pub Name" }) - .click(); + // Menu content is portaled to document.body, so use page-level scope + await adminPage.getByRole("menuitem", { name: "Pub Name" }).click(); // Assert rows and columns await expect(reportForm.getByLabel("Rows field list")).toHaveText( /Pub Name/, @@ -162,7 +164,8 @@ test.describe.serial("Reports", () => { // Select "Last 4 Weeks" as time range await interactWithTimeRangeMenu(reportForm, async () => { - await reportForm.getByRole("menuitem", { name: "Last 4 weeks" }).click(); + // Menu content is portaled to document.body, so use page-level scope + await adminPage.getByRole("menuitem", { name: "Last 4 weeks" }).click(); }); // Change rows/columns @@ -182,14 +185,14 @@ test.describe.serial("Reports", () => { .click(); // Add "App Site Domain" row await reportForm.getByLabel("Add Rows fields").click({ force: true }); + // Menu content is portaled to document.body, so use page-level scope await adminPage - .getByLabel("Rows field list") .getByRole("menuitem", { name: "App Site Domain" }) .click({ force: true }); // Add "Time month" column await reportForm.getByLabel("Add Columns fields").click(); + // Menu content is portaled to document.body, so use page-level scope await adminPage - .getByLabel("Columns field list") .getByRole("menuitem", { name: "Time month" }) .click({ force: true }); // Assert rows and columns @@ -203,11 +206,12 @@ test.describe.serial("Reports", () => { const filtersForm = reportForm.getByLabel("Filters form"); // Add "Ad Size" filter await filtersForm.getByLabel("Add filter button").click(); - await filtersForm.getByRole("menuitem", { name: "Ad Size" }).click(); - // Add filters for 1024x768, 120x600, 160x600 - await filtersForm.getByRole("menuitem", { name: "1024x768" }).click(); - await filtersForm.getByRole("menuitem", { name: "120x600" }).click(); - await filtersForm.getByRole("menuitem", { name: "160x600" }).click(); + // Menu content is portaled to document.body, so use page-level scope + await adminPage.getByRole("menuitem", { name: "Ad Size" }).click(); + // DimensionFilter values are also portaled + await adminPage.getByRole("menuitemcheckbox", { name: "1024x768" }).click(); + await adminPage.getByRole("menuitemcheckbox", { name: "120x600" }).click(); + await adminPage.getByRole("menuitemcheckbox", { name: "160x600" }).click(); await filtersForm.getByLabel("Open ad_size filter").click(); // Save the report diff --git a/web-admin/vite.config.ts b/web-admin/vite.config.ts index 251f0550c5c..bb189b14b06 100644 --- a/web-admin/vite.config.ts +++ b/web-admin/vite.config.ts @@ -27,7 +27,6 @@ export default defineConfig({ optimizeDeps: { include: [ "@tanstack/svelte-query", - "@tanstack/svelte-table", "@codemirror/view", "@codemirror/state", "@codemirror/language", @@ -35,7 +34,6 @@ export default defineConfig({ "d3-format", "d3-array", "luxon", - "bits-ui", "vega-lite", ], }, diff --git a/web-common/package.json b/web-common/package.json index 1c12545dac9..15a478e509c 100644 --- a/web-common/package.json +++ b/web-common/package.json @@ -47,17 +47,16 @@ "@storybook/test": "^7.6.20", "@sveltejs/kit": "^2.7.1", "@tanstack/svelte-query": "^5.69.0", - "@tanstack/svelte-table": "^8.11.8", "@tanstack/svelte-virtual": "^3.0.1", "@testing-library/jest-dom": "^6.6.3", "@testing-library/svelte": "^5.2.7", - "@tiptap/core": "^3.11.0", - "@tiptap/extension-document": "^3.11.0", - "@tiptap/extension-mention": "^3.11.0", - "@tiptap/extension-paragraph": "^3.11.0", - "@tiptap/extension-text": "^3.11.0", - "@tiptap/extensions": "^3.11.0", - "@tiptap/pm": "^3.11.0", + "@tiptap/core": "^3.20.1", + "@tiptap/extension-document": "^3.20.1", + "@tiptap/extension-mention": "^3.20.1", + "@tiptap/extension-paragraph": "^3.20.1", + "@tiptap/extension-text": "^3.20.1", + "@tiptap/extensions": "^3.20.1", + "@tiptap/pm": "^3.20.1", "@types/chroma-js": "^3.1.1", "@types/codemirror": "^5.60.15", "@types/d3-format": "^3.0.4", @@ -67,10 +66,9 @@ "@types/memoizee": "^0.4.11", "@xyflow/svelte": "^0.1.39", "autoprefixer": "^10.4.20", - "bits-ui": "^0.22.0", + "bits-ui": "^2.14.4", "chroma-js": "^3.1.2", "clsx": "^2.0.0", - "cmdk-sv": "^0.0.19", "codemirror-json-schema": "^0.7.8", "crypto-js": "^4.1.1", "d3-array": "^3.1.1", @@ -98,7 +96,7 @@ "prismjs": "^1.30.0", "regular-table": "^0.5.9", "storybook": "^7.0.18", - "svelte": "^4.2.19", + "svelte": "^5.0.0", "svelte-preprocess": "^6.0.3", "svelte-radix": "^1.1.0", "svelte-vega": "^2.3.0", @@ -106,6 +104,7 @@ "tailwind-merge": "^2.1.0", "tailwind-variants": "^0.1.19", "tailwindcss": "^3.4.13", + "tanstack-table-8-svelte-5": "^0.1.2", "ts-json-schema-generator": "^2.3.0", "tsx": "^4.7.0", "ua-parser-js": "^1.0.2", @@ -117,5 +116,10 @@ "yaml": "^2.4.5", "yup": "^1.4.0" }, - "type": "module" + "type": "module", + "dependencies": { + "@internationalized/date": "^3.10.1", + "@tiptap/suggestion": "^3.20.1", + "vega-embed": "^7.1.0" + } } diff --git a/web-common/src/components/BarAndLabel.svelte b/web-common/src/components/BarAndLabel.svelte index 43285d948e0..ec835b22191 100644 --- a/web-common/src/components/BarAndLabel.svelte +++ b/web-common/src/components/BarAndLabel.svelte @@ -42,7 +42,7 @@
+ >
- import { onMount, onDestroy } from "svelte"; import { fly } from "svelte/transition"; + import { onMount, onDestroy } from "svelte"; import { formatInteger } from "../lib/formatters"; import { cellInspectorStore } from "../features/dashboards/stores/cell-inspector-store"; import { cubicOut } from "svelte/easing"; @@ -159,7 +159,7 @@ > Manage {/if}
diff --git a/web-common/src/components/banner/Banner.svelte b/web-common/src/components/banner/Banner.svelte index 8112e4bd6c6..1fa5567051c 100644 --- a/web-common/src/components/banner/Banner.svelte +++ b/web-common/src/components/banner/Banner.svelte @@ -39,13 +39,13 @@ {:else if banner.cta.type === "button"} - {/if} diff --git a/web-common/src/components/button/Button.svelte b/web-common/src/components/button/Button.svelte index fe7fbbfcbff..69cf77ce6b3 100644 --- a/web-common/src/components/button/Button.svelte +++ b/web-common/src/components/button/Button.svelte @@ -1,47 +1,83 @@ {loadingCopy} {/if} {:else} - + {@render children?.()} {/if} diff --git a/web-common/src/components/button/ContextButton.svelte b/web-common/src/components/button/ContextButton.svelte index af3d12b3639..7e5a1b0f4ad 100644 --- a/web-common/src/components/button/ContextButton.svelte +++ b/web-common/src/components/button/ContextButton.svelte @@ -1,32 +1,37 @@ - {tooltipText} diff --git a/web-common/src/components/button/IconButton.svelte b/web-common/src/components/button/IconButton.svelte index 1bc13e547bb..59b90f29296 100644 --- a/web-common/src/components/button/IconButton.svelte +++ b/web-common/src/components/button/IconButton.svelte @@ -20,6 +20,7 @@ export let marginClasses = ""; export let ariaLabel = ""; export let ariaPressed: boolean | undefined = undefined; + export let onclick: ((e: MouseEvent) => void) | undefined = undefined;

diff --git a/web-common/src/components/card/Card.svelte b/web-common/src/components/card/Card.svelte index 5ffe208180e..40f6b0211e1 100644 --- a/web-common/src/components/card/Card.svelte +++ b/web-common/src/components/card/Card.svelte @@ -6,13 +6,15 @@ export let redirect = false; export let href = "/"; export let imageUrl = ""; + export let onclick: ((e: MouseEvent) => void | Promise) | undefined = + undefined;
e.key === "Enter" && e.currentTarget.click()} + {onclick} + onkeydown={(e) => e.key === "Enter" && e.currentTarget.click()} aria-disabled={disabled} class:loading={isLoading} style:background-image={imageUrl ? `url('${imageUrl}')` : ""} diff --git a/web-common/src/components/chip/core/Chip.svelte b/web-common/src/components/chip/core/Chip.svelte index f04b00d9c2c..bda5e3ac2f8 100644 --- a/web-common/src/components/chip/core/Chip.svelte +++ b/web-common/src/components/chip/core/Chip.svelte @@ -1,5 +1,4 @@ - + diff --git a/web-common/src/components/collapsible/collapsible-trigger.svelte b/web-common/src/components/collapsible/collapsible-trigger.svelte new file mode 100644 index 00000000000..1939067a427 --- /dev/null +++ b/web-common/src/components/collapsible/collapsible-trigger.svelte @@ -0,0 +1,8 @@ + + + diff --git a/web-common/src/components/collapsible/index.ts b/web-common/src/components/collapsible/index.ts index 441e763ea81..977e94a7698 100644 --- a/web-common/src/components/collapsible/index.ts +++ b/web-common/src/components/collapsible/index.ts @@ -1,8 +1,8 @@ import { Collapsible as CollapsiblePrimitive } from "bits-ui"; import Content from "web-common/src/components/collapsible/collapsible-content.svelte"; +import Trigger from "web-common/src/components/collapsible/collapsible-trigger.svelte"; const Root = CollapsiblePrimitive.Root; -const Trigger = CollapsiblePrimitive.Trigger; export { Root, diff --git a/web-common/src/components/color-picker/ColorInput.svelte b/web-common/src/components/color-picker/ColorInput.svelte index 970632edd22..0d71f2f0e57 100644 --- a/web-common/src/components/color-picker/ColorInput.svelte +++ b/web-common/src/components/color-picker/ColorInput.svelte @@ -26,7 +26,7 @@ { + onkeydown={(e) => { if (e.key === "Escape" || e.key === "Enter") { open = false; } @@ -51,12 +51,12 @@ class:text-red-500={!isColorValid} bind:value={stringColor} {disabled} - on:keydown={(e) => { + onkeydown={(e) => { if (e.key === "Enter") { e.currentTarget.blur(); } }} - on:blur={() => { + onblur={() => { if (stringColor) { onChange(stringColor); } @@ -64,19 +64,20 @@ /> - - + + {#snippet child({ props })} + + {/snippet} {:else} - - + + {#snippet child({ props })} + + {/snippet} { + onkeydown={(e) => { if (e.key === "Enter") { e.currentTarget.blur(); } }} - on:blur={() => { + onblur={() => { if (stringColor) { onChange(stringColor); } diff --git a/web-common/src/components/color-picker/ColorSlider.svelte b/web-common/src/components/color-picker/ColorSlider.svelte index ee95976ae4a..87a24c261e0 100644 --- a/web-common/src/components/color-picker/ColorSlider.svelte +++ b/web-common/src/components/color-picker/ColorSlider.svelte @@ -37,7 +37,7 @@ min="0" max={mode === "hue" ? 360 : 100} bind:value - on:change={onChange} + onchange={onChange} />

diff --git a/web-common/src/components/combobox/Combobox.svelte b/web-common/src/components/combobox/Combobox.svelte index 1c514b49ab5..608e88d6d8b 100644 --- a/web-common/src/components/combobox/Combobox.svelte +++ b/web-common/src/components/combobox/Combobox.svelte @@ -1,9 +1,8 @@ { + searchValue = e.currentTarget.value; + }} /> {#if error} @@ -146,7 +129,7 @@
{#if filteredItems.length === 0}
No results found
@@ -165,9 +148,9 @@ leftSpacing={false} />
- + {#if selectedValues.includes(item.value)} - + {/if} {/each} {#if hasMore && isLoadingMore} diff --git a/web-common/src/components/command/command-dialog.svelte b/web-common/src/components/command/command-dialog.svelte index 7c29216b733..21cea3f4faf 100644 --- a/web-common/src/components/command/command-dialog.svelte +++ b/web-common/src/components/command/command-dialog.svelte @@ -1,10 +1,11 @@ diff --git a/web-common/src/components/command/command-input.svelte b/web-common/src/components/command/command-input.svelte index 4f36947da74..1134b096fc4 100644 --- a/web-common/src/components/command/command-input.svelte +++ b/web-common/src/components/command/command-input.svelte @@ -1,10 +1,8 @@ - + diff --git a/web-common/src/components/command/command-list.svelte b/web-common/src/components/command/command-list.svelte index fa92f3f0eae..55665b3e4d2 100644 --- a/web-common/src/components/command/command-list.svelte +++ b/web-common/src/components/command/command-list.svelte @@ -1,8 +1,6 @@ - - - + + + + + diff --git a/web-common/src/components/context-menu/context-menu-item.svelte b/web-common/src/components/context-menu/context-menu-item.svelte index f017d1a7746..39fc07748a7 100644 --- a/web-common/src/components/context-menu/context-menu-item.svelte +++ b/web-common/src/components/context-menu/context-menu-item.svelte @@ -5,7 +5,6 @@ type $$Props = ContextMenuPrimitive.ItemProps & { inset?: boolean; }; - // type $$Events = ContextMenuPrimitive.ItemEvents; let className: $$Props["class"] = undefined; export let inset: $$Props["inset"] = undefined; @@ -19,13 +18,6 @@ className, )} {...$$restProps} - on:click - on:keydown - on:focusin - on:focusout - on:pointerdown - on:pointerleave - on:pointermove > diff --git a/web-common/src/components/context-menu/context-menu-label.svelte b/web-common/src/components/context-menu/context-menu-label.svelte index 6992fed9d38..b31674d353a 100644 --- a/web-common/src/components/context-menu/context-menu-label.svelte +++ b/web-common/src/components/context-menu/context-menu-label.svelte @@ -2,7 +2,7 @@ import { ContextMenu as ContextMenuPrimitive } from "bits-ui"; import { cn } from "@rilldata/web-common/lib/shadcn"; - type $$Props = ContextMenuPrimitive.LabelProps & { + type $$Props = ContextMenuPrimitive.GroupHeadingProps & { inset?: boolean; }; @@ -11,7 +11,7 @@ export { className as class }; - - + diff --git a/web-common/src/components/context-menu/context-menu-radio-item.svelte b/web-common/src/components/context-menu/context-menu-radio-item.svelte index d673f8ce878..d24318abcfc 100644 --- a/web-common/src/components/context-menu/context-menu-radio-item.svelte +++ b/web-common/src/components/context-menu/context-menu-radio-item.svelte @@ -4,7 +4,6 @@ import { Dot } from "lucide-svelte"; type $$Props = ContextMenuPrimitive.RadioItemProps; - // type $$Events = ContextMenuPrimitive.RadioItemEvents; let className: $$Props["class"] = undefined; export let value: $$Props["value"]; @@ -13,23 +12,14 @@ - - - + diff --git a/web-common/src/components/context-menu/context-menu-sub-content.svelte b/web-common/src/components/context-menu/context-menu-sub-content.svelte index c3d8ac21c9b..d0503219d56 100644 --- a/web-common/src/components/context-menu/context-menu-sub-content.svelte +++ b/web-common/src/components/context-menu/context-menu-sub-content.svelte @@ -1,26 +1,19 @@ diff --git a/web-common/src/components/context-menu/context-menu-sub-trigger.svelte b/web-common/src/components/context-menu/context-menu-sub-trigger.svelte index efb4050ceeb..de405c4f2bf 100644 --- a/web-common/src/components/context-menu/context-menu-sub-trigger.svelte +++ b/web-common/src/components/context-menu/context-menu-sub-trigger.svelte @@ -6,7 +6,6 @@ type $$Props = ContextMenuPrimitive.SubTriggerProps & { inset?: boolean; }; - // type $$Events = ContextMenuPrimitive.SubTriggerEvents; let className: $$Props["class"] = undefined; export let inset: $$Props["inset"] = undefined; @@ -20,12 +19,6 @@ className, )} {...$$restProps} - on:click - on:keydown - on:focusin - on:focusout - on:pointerleave - on:pointermove > diff --git a/web-common/src/components/context-menu/context-menu-trigger.svelte b/web-common/src/components/context-menu/context-menu-trigger.svelte new file mode 100644 index 00000000000..0670294715b --- /dev/null +++ b/web-common/src/components/context-menu/context-menu-trigger.svelte @@ -0,0 +1,8 @@ + + + diff --git a/web-common/src/components/context-menu/index.ts b/web-common/src/components/context-menu/index.ts index 4ecd7217676..83103556bcc 100644 --- a/web-common/src/components/context-menu/index.ts +++ b/web-common/src/components/context-menu/index.ts @@ -10,10 +10,10 @@ import RadioGroup from "./context-menu-radio-group.svelte"; import SubContent from "./context-menu-sub-content.svelte"; import SubTrigger from "./context-menu-sub-trigger.svelte"; import CheckboxItem from "./context-menu-checkbox-item.svelte"; +import Trigger from "./context-menu-trigger.svelte"; const Sub = ContextMenuPrimitive.Sub; const Root = ContextMenuPrimitive.Root; -const Trigger = ContextMenuPrimitive.Trigger; const Group = ContextMenuPrimitive.Group; export { diff --git a/web-common/src/components/data-graphic/compositions/timestamp-profile/TimestampBound.svelte b/web-common/src/components/data-graphic/compositions/timestamp-profile/TimestampBound.svelte index 66aab608ab3..55fe1030ca4 100644 --- a/web-common/src/components/data-graphic/compositions/timestamp-profile/TimestampBound.svelte +++ b/web-common/src/components/data-graphic/compositions/timestamp-profile/TimestampBound.svelte @@ -46,7 +46,7 @@ + + + {#snippet child({ props })} + + {/snippet} {#if errorType === ErrorType.OUT_OF_RANGE} diff --git a/web-common/src/components/date-picker/DateSelector.svelte b/web-common/src/components/date-picker/DateSelector.svelte index 4d694c42620..fe1f8437800 100644 --- a/web-common/src/components/date-picker/DateSelector.svelte +++ b/web-common/src/components/date-picker/DateSelector.svelte @@ -29,80 +29,89 @@
{ - if (e === undefined) return; + type="single" + value={value?.month?.toString() ?? ""} + onValueChange={(val) => { + if (val === undefined) return; + const monthNum = Number(val); if (!value) { - value = DateTime.fromObject({ year: maxYear, month: e.value }).setZone( + value = DateTime.fromObject({ year: maxYear, month: monthNum }).setZone( zone, ); } else { - value = value.set({ month: e.value }); + value = value.set({ month: monthNum }); } }} - items={months} + items={months.map((m) => ({ value: m.value.toString(), label: m.label }))} > - + {value?.monthLong ?? ""} - {#each months as { value, label }} - - {label} + {#each months as { value: monthVal, label: monthLabel }} + + {monthLabel} {/each} { - if (e === undefined) return; + type="single" + value={value?.day?.toString() ?? ""} + onValueChange={(val) => { + if (val === undefined) return; + const dayNum = Number(val); if (!value) { value = DateTime.fromObject({ year: maxYear, month: 1, - day: e.value, + day: dayNum, }).setZone(zone); } else { - value = value.set({ day: e.value }); + value = value.set({ day: dayNum }); } }} disabled={!value} - items={days} + items={days.map((d) => ({ value: d.value.toString(), label: d.label }))} > - + {value?.day.toString() ?? ""} - {#each days as { value, label }} - - {label} + {#each days as { value: dayVal, label: dayLabel }} + + {dayLabel} {/each} { - if (e === undefined) return; + type="single" + value={value?.year?.toString() ?? ""} + onValueChange={(val) => { + if (val === undefined) return; + const yearNum = Number(val); if (!value) { value = DateTime.fromObject({ - year: e.value, + year: yearNum, month: 1, day: 1, }).setZone(zone); } else { - value = value.set({ year: e.value }); + value = value.set({ year: yearNum }); } }} - items={years} + items={years.map((y) => ({ value: y.value.toString(), label: y.label }))} > - + {value?.year.toString() ?? ""} - {#each years as { value, label }} - - {label} + {#each years as { value: yearVal, label: yearLabel }} + + {yearLabel} {/each} diff --git a/web-common/src/components/date-picker/Day.svelte b/web-common/src/components/date-picker/Day.svelte index 2baf95b6fca..73cb6f2346a 100644 --- a/web-common/src/components/date-picker/Day.svelte +++ b/web-common/src/components/date-picker/Day.svelte @@ -1,12 +1,13 @@ - - { - e.preventDefault(); - onCancel(); - }} - onOpenChange={(o) => { - // Hack to intercept cancel from clicking X or pressing escape - if (!o && open) onCancel(); - setTimeout(() => (open = true)); - }} - closeOnOutsideClick={false} - closeOnEscape={false} -> - + + + - - -
diff --git a/web-common/src/components/dialog/dialog-close.svelte b/web-common/src/components/dialog/dialog-close.svelte new file mode 100644 index 00000000000..2ac1b5a97d9 --- /dev/null +++ b/web-common/src/components/dialog/dialog-close.svelte @@ -0,0 +1,8 @@ + + + diff --git a/web-common/src/components/dialog/dialog-content.svelte b/web-common/src/components/dialog/dialog-content.svelte index 830baa4befc..3bc9a6305ea 100644 --- a/web-common/src/components/dialog/dialog-content.svelte +++ b/web-common/src/components/dialog/dialog-content.svelte @@ -2,16 +2,11 @@ import { cn } from "@rilldata/web-common/lib/shadcn"; import { Dialog as DialogPrimitive } from "bits-ui"; import Cross2 from "svelte-radix/Cross2.svelte"; - import { fade } from "svelte/transition"; import * as Dialog from "web-common/src/components/dialog/index.js"; type $$Props = DialogPrimitive.ContentProps & { noClose?: boolean }; let className: $$Props["class"] = undefined; - export let transition: $$Props["transition"] = fade; - export let transitionConfig: $$Props["transitionConfig"] = { - duration: 150, - }; export let noClose = false; export { className as class }; @@ -19,8 +14,6 @@ import { cn } from "@rilldata/web-common/lib/shadcn"; import { Dialog as DialogPrimitive } from "bits-ui"; - import { fade } from "svelte/transition"; type $$Props = DialogPrimitive.OverlayProps; let className: $$Props["class"] = undefined; - export let transition: $$Props["transition"] = fade; - export let transitionConfig: $$Props["transitionConfig"] = { - duration: 150, - }; export { className as class }; + import { Dialog as DialogPrimitive } from "bits-ui"; + + // svelte-ignore custom_element_props_identifier + let { ...restProps }: DialogPrimitive.TriggerProps = $props(); + + + diff --git a/web-common/src/components/dialog/index.ts b/web-common/src/components/dialog/index.ts index 07a0ffeb893..2cac27cf7a4 100644 --- a/web-common/src/components/dialog/index.ts +++ b/web-common/src/components/dialog/index.ts @@ -7,10 +7,10 @@ import Header from "./dialog-header.svelte"; import Overlay from "./dialog-overlay.svelte"; import Content from "./dialog-content.svelte"; import Description from "./dialog-description.svelte"; +import Trigger from "./dialog-trigger.svelte"; +import Close from "./dialog-close.svelte"; const Root = DialogPrimitive.Root; -const Trigger = DialogPrimitive.Trigger; -const Close = DialogPrimitive.Close; export { Root, diff --git a/web-common/src/components/draggable-list/DraggableList.svelte b/web-common/src/components/draggable-list/DraggableList.svelte index 7b84e51ce3d..1fa622e9222 100644 --- a/web-common/src/components/draggable-list/DraggableList.svelte +++ b/web-common/src/components/draggable-list/DraggableList.svelte @@ -1,4 +1,5 @@ @@ -173,35 +197,39 @@ > {#if showSearch}
- + {#if searchSnippet} + {@render searchSnippet({ searchValue })} + {:else} - + {/if}
{/if}
- - - + {#if header} + {@render header({ items: filteredItems })} + {/if} - - - + {#if footer} + {@render footer({ items: filteredItems })} + {/if}
diff --git a/web-common/src/components/dropdown-menu/DropdownMenuCheckboxItem.svelte b/web-common/src/components/dropdown-menu/DropdownMenuCheckboxItem.svelte index fef8770c226..ce9fd2cd217 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuCheckboxItem.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuCheckboxItem.svelte @@ -2,26 +2,29 @@ import { cn } from "@rilldata/web-common/lib/shadcn"; import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; import { Check, X } from "lucide-svelte"; + import type { Snippet } from "svelte"; - type $$Props = DropdownMenuPrimitive.CheckboxItemProps & { + // svelte-ignore custom_element_props_identifier + let { + class: className, + checked = $bindable(false), + checkSize = "h-4 w-4", + href, + preloadData = true, + showXForSelected = false, + checkRight = false, + closeOnSelect = true, + children, + ...restProps + }: DropdownMenuPrimitive.CheckboxItemProps & { checkSize?: string; checkRight?: boolean; - // See: https://www.bits-ui.com/docs/components/dropdown-menu#dropdownmenucheckboxitem - // Converts div to anchor tag href?: string; preloadData?: boolean; showXForSelected?: boolean; - }; - // type $$Events = DropdownMenuPrimitive.CheckboxItemEvents; - - let className: $$Props["class"] = undefined; - export let checked: $$Props["checked"] = undefined; - export let checkSize: $$Props["checkSize"] = "h-4 w-4"; - export let href: $$Props["href"] = undefined; - export let preloadData: $$Props["preloadData"] = true; - export let showXForSelected: $$Props["showXForSelected"] = false; - export let checkRight: $$Props["checkRight"] = false; - export { className as class }; + closeOnSelect?: boolean; + children?: Snippet; + } = $props(); {#if checked} - + {#if showXForSelected} + + {:else} + + {/if} {/if} - + {@render children?.()} diff --git a/web-common/src/components/dropdown-menu/DropdownMenuContent.svelte b/web-common/src/components/dropdown-menu/DropdownMenuContent.svelte index 41520fbc158..45d34be23cf 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuContent.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuContent.svelte @@ -1,27 +1,31 @@ - - - + + + {@render children?.()} + + diff --git a/web-common/src/components/dropdown-menu/DropdownMenuItem.svelte b/web-common/src/components/dropdown-menu/DropdownMenuItem.svelte index 1222974e57a..5bf580a59ed 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuItem.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuItem.svelte @@ -1,44 +1,45 @@ - - - + + {@render children?.()} + + diff --git a/web-common/src/components/dropdown-menu/DropdownMenuLabel.svelte b/web-common/src/components/dropdown-menu/DropdownMenuLabel.svelte index 3bff397dc1c..778dbb0729e 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuLabel.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuLabel.svelte @@ -2,7 +2,7 @@ import { cn } from "@rilldata/web-common/lib/shadcn"; import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; - type $$Props = DropdownMenuPrimitive.LabelProps & { + type $$Props = DropdownMenuPrimitive.GroupHeadingProps & { inset?: boolean; }; @@ -11,7 +11,7 @@ export { className as class }; - - + diff --git a/web-common/src/components/dropdown-menu/DropdownMenuRadioItem.svelte b/web-common/src/components/dropdown-menu/DropdownMenuRadioItem.svelte index 5b1b4913fbd..b58e4982f77 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuRadioItem.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuRadioItem.svelte @@ -4,7 +4,6 @@ import { Circle } from "lucide-svelte"; type $$Props = DropdownMenuPrimitive.RadioItemProps; - // type $$Events = DropdownMenuPrimitive.RadioItemEvents; let className: $$Props["class"] = undefined; export let value: $$Props["value"]; @@ -13,23 +12,16 @@ - - - + diff --git a/web-common/src/components/dropdown-menu/DropdownMenuSubContent.svelte b/web-common/src/components/dropdown-menu/DropdownMenuSubContent.svelte index 198cdcaae68..b9af230b043 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuSubContent.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuSubContent.svelte @@ -1,30 +1,26 @@ - + {@render children?.()} diff --git a/web-common/src/components/dropdown-menu/DropdownMenuSubTrigger.svelte b/web-common/src/components/dropdown-menu/DropdownMenuSubTrigger.svelte index 3b4ea85e6b6..9a5e9a5525f 100644 --- a/web-common/src/components/dropdown-menu/DropdownMenuSubTrigger.svelte +++ b/web-common/src/components/dropdown-menu/DropdownMenuSubTrigger.svelte @@ -2,15 +2,18 @@ import { cn } from "@rilldata/web-common/lib/shadcn"; import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui"; import { ChevronRight } from "lucide-svelte"; + import type { Snippet } from "svelte"; - type $$Props = DropdownMenuPrimitive.SubTriggerProps & { + // svelte-ignore custom_element_props_identifier + let { + class: className, + inset, + children, + ...restProps + }: DropdownMenuPrimitive.SubTriggerProps & { inset?: boolean; - }; - // type $$Events = DropdownMenuPrimitive.SubTriggerEvents; - - let className: $$Props["class"] = undefined; - export let inset: $$Props["inset"] = undefined; - export { className as class }; + children?: Snippet; + } = $props(); - + {@render children?.()} diff --git a/web-common/src/components/dropdown-menu/DropdownMenuTrigger.svelte b/web-common/src/components/dropdown-menu/DropdownMenuTrigger.svelte new file mode 100644 index 00000000000..b183b3103e1 --- /dev/null +++ b/web-common/src/components/dropdown-menu/DropdownMenuTrigger.svelte @@ -0,0 +1,8 @@ + + + diff --git a/web-common/src/components/dropdown-menu/__stories__/DropdownMenu.stories.svelte b/web-common/src/components/dropdown-menu/__stories__/DropdownMenu.stories.svelte index 39b1514f248..a2ad9d2aa1e 100644 --- a/web-common/src/components/dropdown-menu/__stories__/DropdownMenu.stories.svelte +++ b/web-common/src/components/dropdown-menu/__stories__/DropdownMenu.stories.svelte @@ -15,8 +15,10 @@ - - + + {#snippet child({ props })} + + {/snippet} Option 1 @@ -27,8 +29,10 @@ - - + + {#snippet child({ props })} + + {/snippet} @@ -45,14 +49,16 @@ - - + + {#snippet child({ props })} + + {/snippet} (subMenuOpen = !subMenuOpen)} + onclick={() => (subMenuOpen = !subMenuOpen)} > Option 1 diff --git a/web-common/src/components/dropdown-menu/index.ts b/web-common/src/components/dropdown-menu/index.ts index 423ca479483..6df23e45aaf 100644 --- a/web-common/src/components/dropdown-menu/index.ts +++ b/web-common/src/components/dropdown-menu/index.ts @@ -9,10 +9,10 @@ import RadioGroup from "./DropdownMenuRadioGroup.svelte"; import SubContent from "./DropdownMenuSubContent.svelte"; import SubTrigger from "./DropdownMenuSubTrigger.svelte"; import CheckboxItem from "./DropdownMenuCheckboxItem.svelte"; +import Trigger from "./DropdownMenuTrigger.svelte"; const Sub = DropdownMenuPrimitive.Sub; const Root = DropdownMenuPrimitive.Root; -const Trigger = DropdownMenuPrimitive.Trigger; const Group = DropdownMenuPrimitive.Group; export { diff --git a/web-common/src/components/editor/line-status/index.ts b/web-common/src/components/editor/line-status/index.ts index 956cc7edca7..14737682599 100644 --- a/web-common/src/components/editor/line-status/index.ts +++ b/web-common/src/components/editor/line-status/index.ts @@ -1,6 +1,6 @@ import type { EditorView } from "@codemirror/view"; import { createLineStatusHighlighter } from "./highlighter"; -import { createLineNumberGutter } from "./line-number-gutter"; +import { createLineNumberGutter } from "./line-number-gutter.svelte"; import { createStatusLineGutter } from "./line-status-gutter"; import { type LineStatus, diff --git a/web-common/src/components/editor/line-status/line-number-gutter.spec.ts b/web-common/src/components/editor/line-status/line-number-gutter.spec.ts index 5727b9928dd..4f26a07f4a9 100644 --- a/web-common/src/components/editor/line-status/line-number-gutter.spec.ts +++ b/web-common/src/components/editor/line-status/line-number-gutter.spec.ts @@ -1,8 +1,9 @@ import { EditorState } from "@codemirror/state"; import { EditorView } from "@codemirror/view"; import { beforeEach, describe, expect, it } from "vitest"; +import { flushSync } from "svelte"; import { lineStatus } from "."; -import { LINE_NUMBER_GUTTER_CLASS } from "./line-number-gutter"; +import { LINE_NUMBER_GUTTER_CLASS } from "./line-number-gutter.svelte"; const doc = `name: test dashboard measures: @@ -72,6 +73,7 @@ describe("Line Number Gutter Extension (CodeMirror)", () => { insert: doc + "\n", }, }); + flushSync(); const lineNumbers = getLineNumberElements(container); expect(lineNumbers.length).toBe(doc.split("\n").length + 2); expect(lineNumbers[0].textContent).toBe("7"); @@ -86,6 +88,7 @@ describe("Line Number Gutter Extension (CodeMirror)", () => { insert: doc.split("\n").slice(0, -1).join("\n"), }, }); + flushSync(); const lineNumbers = getLineNumberElements(container); expect(lineNumbers.length).toBe(doc.split("\n").length); diff --git a/web-common/src/components/editor/line-status/line-number-gutter.ts b/web-common/src/components/editor/line-status/line-number-gutter.svelte.ts similarity index 80% rename from web-common/src/components/editor/line-status/line-number-gutter.ts rename to web-common/src/components/editor/line-status/line-number-gutter.svelte.ts index 820d45c8418..e963ed48517 100644 --- a/web-common/src/components/editor/line-status/line-number-gutter.ts +++ b/web-common/src/components/editor/line-status/line-number-gutter.svelte.ts @@ -1,13 +1,14 @@ import { GutterMarker, gutter } from "@codemirror/view"; import LineNumberGutterMarkerComponent from "./LineNumberGutterMarker.svelte"; import { lineStatusesStateField, updateLineStatuses } from "./state"; -import type { SvelteComponent } from "svelte"; +import { mount, unmount } from "svelte"; export const LINE_NUMBER_GUTTER_CLASS = "cm-line-number-gutter"; class NumberMarker extends GutterMarker { element: HTMLElement; - component: SvelteComponent; + component: Record; + props: { line: number; level: string | undefined; active: boolean }; line: number; level: "error" | "warning" | "info" | "success" | undefined; active: boolean; @@ -22,11 +23,21 @@ class NumberMarker extends GutterMarker { this.level = level; this.active = active; this.element = document.createElement("div"); - this.component = new LineNumberGutterMarkerComponent({ + this.props = $state({ line, level, active }); + this.component = mount(LineNumberGutterMarkerComponent, { target: this.element, - props: { line, level, active }, + props: this.props, }); } + setProps( + line: number, + level: "error" | "warning" | "info" | "success" | undefined, + active: boolean, + ) { + this.props.line = line; + this.props.level = level; + this.props.active = active; + } eq(mkr) { return ( mkr.line === this.line && @@ -38,7 +49,7 @@ class NumberMarker extends GutterMarker { return this.element; } destroy() { - this.component.$destroy(); + unmount(this.component); } } @@ -48,11 +59,7 @@ export const createLineNumberGutter = () => initialSpacer: (view) => new NumberMarker(view.state.doc.lines, undefined, false), updateSpacer: (spacer: NumberMarker, update) => { - spacer.component.$set({ - line: update.state.doc.lines, - level: undefined, - active: false, - }); + spacer.setProps(update.state.doc.lines, undefined, false); return spacer; }, lineMarker(view, line) { diff --git a/web-common/src/components/editor/line-status/line-status-gutter.ts b/web-common/src/components/editor/line-status/line-status-gutter.ts index c8b7a842eb8..303c0d7b061 100644 --- a/web-common/src/components/editor/line-status/line-status-gutter.ts +++ b/web-common/src/components/editor/line-status/line-status-gutter.ts @@ -1,6 +1,6 @@ import { RangeSetBuilder } from "@codemirror/state"; import { gutter, GutterMarker } from "@codemirror/view"; -import type { SvelteComponent } from "svelte"; +import { mount, unmount } from "svelte"; import { lineStatusesStateField, updateLineStatuses } from "./state"; import StatusGutterMarkerComponent from "./StatusGutterMarker.svelte"; @@ -8,7 +8,7 @@ export const LINE_STATUS_GUTTER_CLASS = "cm-line-status-gutter"; class StatusGutterMarker extends GutterMarker { element: HTMLElement; - component: SvelteComponent; + component: Record; line: number; active: boolean; @@ -18,7 +18,7 @@ class StatusGutterMarker extends GutterMarker { this.line = line; this.element = document.createElement("div"); this.active = active; - this.component = new StatusGutterMarkerComponent({ + this.component = mount(StatusGutterMarkerComponent, { target: this.element, props: { level, message, active }, }); @@ -30,7 +30,7 @@ class StatusGutterMarker extends GutterMarker { return this.element; } destroy() { - this.component.$destroy(); + unmount(this.component); } } diff --git a/web-common/src/components/floating-element/FloatingElement.svelte b/web-common/src/components/floating-element/FloatingElement.svelte index eea8c6d14b6..2463308046e 100644 --- a/web-common/src/components/floating-element/FloatingElement.svelte +++ b/web-common/src/components/floating-element/FloatingElement.svelte @@ -7,8 +7,8 @@ display:contents. This is useful when nesting a floating element within a toolti - a mouse click location through "mouse". This is an {x,y} coordinate that matches where the pointer is. --> -
+
diff --git a/web-common/src/components/menu/DashboardMetricsDraggableList.svelte b/web-common/src/components/menu/DashboardMetricsDraggableList.svelte index dfc484446fb..2790f426091 100644 --- a/web-common/src/components/menu/DashboardMetricsDraggableList.svelte +++ b/web-common/src/components/menu/DashboardMetricsDraggableList.svelte @@ -9,7 +9,7 @@ MetricsViewSpecDimension, MetricsViewSpecMeasure, } from "@rilldata/web-common/runtime-client"; - import { Tooltip } from "bits-ui"; + import * as Tooltip from "@rilldata/web-common/components/tooltip-v2"; import { Button } from "../button"; import Search from "../search/Search.svelte"; @@ -89,23 +89,24 @@ - - + + {#snippet child({ props })} + + {/snippet} -
-

- Shown {type === "measure" ? "Measures" : "Dimensions"} -

- {#if selectedItems.length > 1} - - {/if} -
+ {#snippet header()} +
+

+ Shown {type === "measure" ? "Measures" : "Dimensions"} +

+ {#if selectedItems.length > 1} + + {/if} +
+ {/snippet} -
+ {#snippet empty()} {searchText ? `No matching ${type === "measure" ? "measures" : "dimensions"} shown` : `No ${type === "measure" ? "measures" : "dimensions"} shown`} -
+ {/snippet} -
+ {#snippet item({ item })} {@const itemData = allItemsMap.get(item.id)} {@const displayName = itemData?.displayName ?? `Unknown ${type === "measure" ? "measure" : "dimension"}`} - {#if itemData?.description || selectedItems.length === 1} - - - - - {displayName} - - - - -
+ {#if itemData?.description || selectedItems.length === 1} + + + + + {displayName} + + + + {#if selectedItems.length === 1} Must show at least one {type === "measure" @@ -199,39 +200,40 @@ {:else} {itemData?.description} {/if} -
-
-
- {:else} - - - {displayName} - - - {/if} -
+ + + {:else} + + + {displayName} + + + {/if} +
+ {/snippet}
{#if selectedItems.length < allItems.length} - +
-
-

- Hidden {type === "measure" ? "Measures" : "Dimensions"} -

- -
+

+ Hidden {type === "measure" ? "Measures" : "Dimensions"} +

+ +
+ {/snippet} -
+ {#snippet empty()} {searchText ? `No matching hidden ${type === "measure" ? "measures" : "dimensions"}` : `No hidden ${type === "measure" ? "measures" : "dimensions"}`} -
+ {/snippet} -
+ {#snippet item({ item, index })} {@const itemData = allItemsMap.get(item.id)} {@const displayName = itemData?.displayName ?? `Unknown ${type === "measure" ? "measure" : "dimension"}`} - {#if itemData?.description} - - - - {displayName} - - - - -
+ {displayName} + + + + {itemData.description} -
-
-
- {:else} - - {displayName} - - - {/if} -
+
+
+ {:else} + + {displayName} + + + {/if} +
+ {/snippet}
{/if} diff --git a/web-common/src/components/menu/DashboardVisibilityDropdown.svelte b/web-common/src/components/menu/DashboardVisibilityDropdown.svelte index 589dadae9f2..423a1861998 100644 --- a/web-common/src/components/menu/DashboardVisibilityDropdown.svelte +++ b/web-common/src/components/menu/DashboardVisibilityDropdown.svelte @@ -1,8 +1,8 @@ - - - - + {`${numShownString} ${category}`} + + + +
+ -
- - {tooltipText} - -
- +
+ + {tooltipText} + +
+ + {/snippet} + import { fly } from "svelte/transition"; import * as DropdownMenu from "@rilldata/web-common/components/dropdown-menu/"; import Tooltip from "@rilldata/web-common/components/tooltip/Tooltip.svelte"; - import { fly } from "svelte/transition"; import CaretDownIcon from "@rilldata/web-common/components/icons/CaretDownIcon.svelte"; import TooltipContent from "@rilldata/web-common/components/tooltip/TooltipContent.svelte"; import Search from "@rilldata/web-common/components/search/Search.svelte"; @@ -59,9 +59,8 @@ active = false; } - function toggleMultiSelect() { - const newMultiSelect = !multiSelect; - if (!newMultiSelect) { + function onMultiSelectChange(checked: boolean) { + if (!checked) { onToggleOff(); } else { // When toggling back to multi-select, restore the last selection @@ -71,7 +70,7 @@ setLeaderboardSortByMeasureName(lastMeasures[0]); } } - multiSelect = newMultiSelect; + multiSelect = checked; } function toggleMeasure(name: string) { @@ -110,114 +109,114 @@ { if (!open) searchText = ""; }} > - - - - - -
- -
- -
- {#if filteredMeasures.length} - {#each filteredMeasures as measure (measure.name)} - { - if (measure.name) toggleMeasure(measure.name); - }} - > -
- {measure.displayName || measure.name} -
-
- {/each} - {:else} -
- No matching leaderboard measures shown -
+ Showing {showingMeasuresText} + + + +
+ + + +
+ +
+ +
+ {#if filteredMeasures.length} + {#each filteredMeasures as measure (measure.name)} + { + if (measure.name) toggleMeasure(measure.name); + }} + > +
+ {measure.displayName || measure.name} +
+
+ {/each} + {:else} +
+ No matching leaderboard measures shown +
+ {/if} +
+ + {#if visibleMeasures.length > 1} +
+
+ + +
+
{/if} -
+ - {#if visibleMeasures.length > 1} -
-
- - -
-
- {/if} - - -
- - Choose measures to display - -
- +
+ + Choose measures to display + +
+ + {/snippet} diff --git a/web-common/src/components/navigation/breadcrumbs/BreadcrumbItem.svelte b/web-common/src/components/navigation/breadcrumbs/BreadcrumbItem.svelte index 309ae984b05..f64661d008a 100644 --- a/web-common/src/components/navigation/breadcrumbs/BreadcrumbItem.svelte +++ b/web-common/src/components/navigation/breadcrumbs/BreadcrumbItem.svelte @@ -66,7 +66,7 @@ > {#if selected}
{ + onclick={() => { if (isCurrentPage && !isEmbedded) window.location.reload(); }} href={isCurrentPage @@ -85,15 +85,12 @@ {/if} {#if options.size > 1} - - + + {#snippet child({ props })} + + {/snippet} { + onclick={() => { if (onSelect) { onSelect(id); } @@ -150,7 +147,7 @@ } .trigger:hover, - .trigger[data-state="open"] { + .trigger:global([data-state="open"]) { @apply bg-gray-100; } diff --git a/web-common/src/components/navigation/breadcrumbs/TwoTieredBreadcrumbItem.svelte b/web-common/src/components/navigation/breadcrumbs/TwoTieredBreadcrumbItem.svelte index f1570c25787..3f06d36732a 100644 --- a/web-common/src/components/navigation/breadcrumbs/TwoTieredBreadcrumbItem.svelte +++ b/web-common/src/components/navigation/breadcrumbs/TwoTieredBreadcrumbItem.svelte @@ -40,10 +40,12 @@ {/if} {#if options.size > 1} - - + + {#snippet child({ props })} + + {/snippet} {#each Array.from(groupedData.entries()) as [group, subItems]} @@ -59,7 +61,7 @@ {subItem.label} @@ -73,7 +75,7 @@ {subItems.label} @@ -98,8 +100,11 @@ @apply px-0.5 py-1 rounded; } - .trigger:hover, - .trigger[data-state="open"] { + .trigger:hover { + @apply bg-gray-100; + } + + .trigger:global([data-state="open"]) { @apply bg-gray-100; } diff --git a/web-common/src/components/notifications/Notification.svelte b/web-common/src/components/notifications/Notification.svelte index 20e6b089224..039bd4d0e98 100644 --- a/web-common/src/components/notifications/Notification.svelte +++ b/web-common/src/components/notifications/Notification.svelte @@ -1,8 +1,8 @@ - +
{#key bg} @@ -28,7 +28,7 @@ transition:fade|global={{ duration: 200 }} style:background={bg} class={classes} - /> + >
{/key}
diff --git a/web-common/src/components/popover/index.ts b/web-common/src/components/popover/index.ts index 64820629a30..56dd0bc36f2 100644 --- a/web-common/src/components/popover/index.ts +++ b/web-common/src/components/popover/index.ts @@ -1,17 +1,18 @@ import { Popover as PopoverPrimitive } from "bits-ui"; import Content from "./popover-content.svelte"; +import Trigger from "./popover-trigger.svelte"; + const Root = PopoverPrimitive.Root; -const Trigger = PopoverPrimitive.Trigger; const Close = PopoverPrimitive.Close; export { Close, Content, + Trigger, // Root as Popover, Close as PopoverClose, Content as PopoverContent, Trigger as PopoverTrigger, Root, - Trigger, }; diff --git a/web-common/src/components/popover/popover-content.svelte b/web-common/src/components/popover/popover-content.svelte index 18b499b9905..e42d484c13e 100644 --- a/web-common/src/components/popover/popover-content.svelte +++ b/web-common/src/components/popover/popover-content.svelte @@ -1,5 +1,5 @@ - - - + + + + + diff --git a/web-common/src/components/popover/popover-trigger.svelte b/web-common/src/components/popover/popover-trigger.svelte new file mode 100644 index 00000000000..e97eacf2541 --- /dev/null +++ b/web-common/src/components/popover/popover-trigger.svelte @@ -0,0 +1,8 @@ + + + diff --git a/web-common/src/components/progress/progress.svelte b/web-common/src/components/progress/progress.svelte index e5f354e51ef..3a1022ebe98 100644 --- a/web-common/src/components/progress/progress.svelte +++ b/web-common/src/components/progress/progress.svelte @@ -2,7 +2,7 @@ import { cn } from "@rilldata/web-common/lib/shadcn"; import { Progress as ProgressPrimitive } from "bits-ui"; - type $$Props = ProgressPrimitive.Props; + type $$Props = ProgressPrimitive.RootProps; let className: $$Props["class"] = undefined; export let max: $$Props["max"] = 100; diff --git a/web-common/src/components/search/Search.svelte b/web-common/src/components/search/Search.svelte index 8957ae74212..6b23000b877 100644 --- a/web-common/src/components/search/Search.svelte +++ b/web-common/src/components/search/Search.svelte @@ -63,7 +63,7 @@ @@ -45,8 +48,9 @@ class="absolute top-0 -right-1 w-2 z-10 cursor-col-resize" style:height="{HEADER_HEIGHT}px" data-index={index} - on:mousedown - /> + aria-label="Resize column" + {onmousedown} + > {/if} diff --git a/web-common/src/components/virtualized-table/VirtualTableRow.svelte b/web-common/src/components/virtualized-table/VirtualTableRow.svelte index 0e216291ae0..3f642fe82b9 100644 --- a/web-common/src/components/virtualized-table/VirtualTableRow.svelte +++ b/web-common/src/components/virtualized-table/VirtualTableRow.svelte @@ -22,6 +22,7 @@ export let startColumn: number; export let cells: V1MetricsViewRowsResponseDataItem; export let valueAccessor: (columnLabel: string) => string; + export let onmouseenter: ((e: MouseEvent) => void) | undefined = undefined; @@ -40,7 +41,7 @@ data-index={columnIndex} data-column={columnLabel} style:left="{position}px" - on:mouseenter + {onmouseenter} > {/each} - + {#each { length: renderedColumns } as _, i (i)} {@const columnIndex = startColumn + i} @@ -62,7 +63,7 @@ {@const sorted = columns[columnIndex].name === sortedColumn} {@const pinned = pinnedColumns.has(columnIndex)} {#if !pinned} - + + diff --git a/web-common/src/features/dashboards/filters/measure-filters/MeasureFilter.svelte b/web-common/src/features/dashboards/filters/measure-filters/MeasureFilter.svelte index 4a28503b093..3c0e1385f1a 100644 --- a/web-common/src/features/dashboards/filters/measure-filters/MeasureFilter.svelte +++ b/web-common/src/features/dashboards/filters/measure-filters/MeasureFilter.svelte @@ -1,4 +1,5 @@ { + onkeydown={(e) => { if (e.key === "Enter") { submit(); } @@ -124,6 +124,7 @@ {side} class="p-2 px-3 w-[250px]" strategy="fixed" + preventScroll id="measure-filter-popover" > {#if showPinControl} diff --git a/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte b/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte index 582e787b95b..a36b873aab8 100644 --- a/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte +++ b/web-common/src/features/dashboards/granular-access-policies/ViewAsButton.svelte @@ -24,34 +24,35 @@ - - {#if $selectedMockUserStore === null} - - {:else} - { - updateDevJWT(queryClient, client, null); - }} - > -
- Viewing as {$selectedMockUserStore.email} -
-
- {/if} + + {#snippet child({ props })} + {#if $selectedMockUserStore === null} + + {:else} + { + updateDevJWT(queryClient, client, null); + }} + > +
+ Viewing as {$selectedMockUserStore.email} +
+
+ {/if} + {/snippet}
@@ -60,7 +61,7 @@ {:else if $mockUsers.data?.length > 0} {#each $mockUsers.data as user (user?.email)} { + onclick={() => { updateDevJWT(queryClient, client, user); }} class="flex gap-x-2 items-center" diff --git a/web-common/src/features/dashboards/leaderboard/DimensionCompareMenu.svelte b/web-common/src/features/dashboards/leaderboard/DimensionCompareMenu.svelte index 63feca3b478..2d332765556 100644 --- a/web-common/src/features/dashboards/leaderboard/DimensionCompareMenu.svelte +++ b/web-common/src/features/dashboards/leaderboard/DimensionCompareMenu.svelte @@ -11,7 +11,7 @@ { + onclick={(e) => { e.stopPropagation(); if (dimensionName) toggleComparisonDimension(dimensionName); }} diff --git a/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte b/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte index 6eef745a851..043eb18218a 100644 --- a/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte +++ b/web-common/src/features/dashboards/leaderboard/Leaderboard.svelte @@ -314,8 +314,8 @@ aria-label="{dimensionName} leaderboard" role="table" bind:this={container} - on:mouseenter={() => (hovered = true)} - on:mouseleave={() => (hovered = false)} + onmouseenter={() => (hovered = true)} + onmouseleave={() => (hovered = false)} > @@ -421,7 +421,7 @@ diff --git a/web-common/src/features/dashboards/leaderboard/LeaderboardCell.svelte b/web-common/src/features/dashboards/leaderboard/LeaderboardCell.svelte index 5fb3994f249..c28f909d8f2 100644 --- a/web-common/src/features/dashboards/leaderboard/LeaderboardCell.svelte +++ b/web-common/src/features/dashboards/leaderboard/LeaderboardCell.svelte @@ -1,5 +1,6 @@ - - - + + + {#snippet child({ props })} + + {/snippet} + > {/if}
handleTimeGrainSelect(item, timeGrain)} - on:mousedown={(e) => handleMouseDown(e, item)} + onmousedown={(e) => handleMouseDown(e, item)} onRemove={() => { items = items.filter((i) => i.id !== item.id); onUpdate(items); @@ -342,7 +342,7 @@ {item} grab removable={isDropLocation} - on:mousedown={(e) => handleMouseDown(e, item)} + onmousedown={(e) => handleMouseDown(e, item)} onRemove={() => { items = items.filter((i) => i.id !== item.id); onUpdate(items); @@ -357,7 +357,7 @@
{#each headers as header (header.id)} @@ -155,7 +160,7 @@ class:select-none={header.column.getCanSort()} class:flex-row-reverse={!!getMeasureColumn(header.column)} class:border-r={hasBorderRight(header.column.id)} - on:click={header.column.getToggleSortingHandler()} + onclick={header.column.getToggleSortingHandler()} > {#if !header.isPlaceholder} {#if icon} @@ -181,7 +186,7 @@ {/each} - + {#each virtualRows as row (row.index)} {@const cells = rows[row.index].getVisibleCells()} @@ -202,8 +207,8 @@ data-value={cell.getValue()} data-rowid={cell.row.id} data-columnid={cell.column.id} - on:mouseover={() => cellInspectorStore.updateValue(cell.getValue())} - on:focus={() => cellInspectorStore.updateValue(cell.getValue())} + onmouseover={() => cellInspectorStore.updateValue(cell.getValue())} + onfocus={() => cellInspectorStore.updateValue(cell.getValue())} > {#if result?.component && result?.props} {/each} - +
diff --git a/web-common/src/features/dashboards/pivot/NestedTable.svelte b/web-common/src/features/dashboards/pivot/NestedTable.svelte index d1ac76697ff..237705d4e79 100644 --- a/web-common/src/features/dashboards/pivot/NestedTable.svelte +++ b/web-common/src/features/dashboards/pivot/NestedTable.svelte @@ -7,8 +7,8 @@ import ArrowDown from "@rilldata/web-common/components/icons/ArrowDown.svelte"; import Resizer from "@rilldata/web-common/layout/Resizer.svelte"; import { modified } from "@rilldata/web-common/lib/actions/modified-click"; - import type { Cell, HeaderGroup, Row } from "@tanstack/svelte-table"; - import { flexRender } from "@tanstack/svelte-table"; + import type { Cell, HeaderGroup, Row } from "tanstack-table-8-svelte-5"; + import { flexRender } from "tanstack-table-8-svelte-5"; import { cellInspectorStore } from "../stores/cell-inspector-store"; import { getRowNestedLabel, @@ -218,7 +218,7 @@ resizingMeasure = false; }} > -
+
@@ -250,7 +250,7 @@ resizingMeasure = false; }} > -
+
{/each} @@ -266,9 +266,9 @@ class:with-measures={hasMeasures} role="presentation" style:width="{totalLength + rowDimensionWidth}px" - on:click={modified({ shift: onCellCopy, click: onCellClick })} - on:mousemove={onMouseMove} - on:mouseleave={onTableLeave} + onclick={modified({ shift: onCellCopy, click: onCellClick })} + onmousemove={onMouseMove} + onmouseleave={onTableLeave} > {#if rowDimensionName && rowDimensionWidth} @@ -300,7 +300,7 @@ class:select-none={header.column.getCanSort()} class:flex-row-reverse={isMeasureColumn(header, i)} class:border-r={shouldShowHeaderRightBorder(header, i)} - on:click={header.column.getToggleSortingHandler()} + onclick={header.column.getToggleSortingHandler()} > {#if !header.isPlaceholder} {#if icon} @@ -326,7 +326,7 @@ {/each} - + {#each virtualRows as row (row.index)} {@const cells = rows[row.index].getVisibleCells()} @@ -346,8 +346,8 @@ data-columnid={cell.column.id} data-rowheader={i === 0 || undefined} class:totals-column={i > 0 && i <= measureCount} - on:mouseover={() => cellInspectorStore.updateValue(cell.getValue())} - on:focus={() => cellInspectorStore.updateValue(cell.getValue())} + onmouseover={() => cellInspectorStore.updateValue(cell.getValue())} + onfocus={() => cellInspectorStore.updateValue(cell.getValue())} > {#if result?.component && result?.props} {/each} - + diff --git a/web-common/src/features/dashboards/pivot/PivotChip.svelte b/web-common/src/features/dashboards/pivot/PivotChip.svelte index 251bd184383..9f10d5ca80e 100644 --- a/web-common/src/features/dashboards/pivot/PivotChip.svelte +++ b/web-common/src/features/dashboards/pivot/PivotChip.svelte @@ -16,6 +16,8 @@ export let active = false; export let fullWidth = false; export let onRemove: () => void = () => {}; + export let onmousedown: ((e: MouseEvent) => void) | undefined = undefined; + export let onclick: ((e: MouseEvent) => void) | undefined = undefined; $: activeTimeGrainLabel = item.type === PivotChipType.Time && item.id @@ -47,8 +49,8 @@ {removable} {fullWidth} supressTooltip - on:mousedown - on:click + {onmousedown} + {onclick} {onRemove} >
- {/if} {:else} - + {/if} diff --git a/web-common/src/features/dashboards/time-controls/comparison-pill/ComparisonPill.svelte b/web-common/src/features/dashboards/time-controls/comparison-pill/ComparisonPill.svelte index c3e21ebbd7e..d82944c530e 100644 --- a/web-common/src/features/dashboards/time-controls/comparison-pill/ComparisonPill.svelte +++ b/web-common/src/features/dashboards/time-controls/comparison-pill/ComparisonPill.svelte @@ -78,7 +78,7 @@ +
+ {#if !timeComparisonOptionsState.length && !showComparison} +

no comparison period

+ {:else} + {label} + {#if interval?.isValid && showFullRange} + + {/if} + {/if} +
+ + + + + {/snippet} @@ -137,7 +136,7 @@ {@const selected = selectedLabel === option.name} { + onclick={() => { onCompareRangeSelect(option.name); open = false; }} @@ -157,7 +156,7 @@ { + onclick={() => { showSelector = !showSelector; }} > @@ -195,8 +194,4 @@ button { @apply gap-x-1; } - - .inactive { - @apply opacity-50; - } diff --git a/web-common/src/features/dashboards/time-controls/super-pill/components/Nudge.svelte b/web-common/src/features/dashboards/time-controls/super-pill/components/Nudge.svelte index 4dc30b66af3..d22d550faa7 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/components/Nudge.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/components/Nudge.svelte @@ -11,7 +11,7 @@ + {#if interval.isValid && showFullRange} + + {/if} + + + + + {/snippet}
diff --git a/web-common/src/features/dashboards/time-controls/super-pill/components/SyntaxElement.svelte b/web-common/src/features/dashboards/time-controls/super-pill/components/SyntaxElement.svelte index 6e4715164eb..4b8b95991be 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/components/SyntaxElement.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/components/SyntaxElement.svelte @@ -10,7 +10,7 @@ class:dark role={onClick ? "button" : undefined} class="element" - on:click={() => onClick?.(range)} + onclick={() => onClick?.(range)} > {range} diff --git a/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenu.svelte b/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenu.svelte index 73f4b23919a..b424d62177b 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenu.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenu.svelte @@ -6,7 +6,6 @@ NamedRange, ISODurationString, } from "../../new-time-controls"; - import type { CustomEventHandler } from "bits-ui"; import { RILL_TO_LABEL, ALL_TIME_RANGE_ALIAS } from "../../new-time-controls"; export let ranges: RangeBuckets; @@ -17,8 +16,8 @@ export let onSelectCustomOption: () => void; export let allowCustomTimeRange = true; - function handleClick(e: CustomEventHandler) { - const range = e.detail.currentTarget.dataset.range; + function handleClick(e: MouseEvent) { + const range = (e.currentTarget as HTMLElement)?.dataset?.range; if (!range) { throw new Error("No range provided"); } @@ -28,7 +27,7 @@ {#if showDefaultItem && defaultTimeRange} - +
Last {humaniseISODuration(defaultTimeRange)}
@@ -40,7 +39,7 @@ {#each ranges.latest as rillTime, i (i)} {rillTime.getLabel()} @@ -55,7 +54,7 @@ {#each ranges.periodToDate as rillTime, i (i)} {rillTime.getLabel()} @@ -70,7 +69,7 @@ {#each ranges.previous as rillTime, i (i)} {rillTime.getLabel()} @@ -80,7 +79,7 @@ {#if ranges.allTime} - + {RILL_TO_LABEL[ALL_TIME_RANGE_ALIAS]} @@ -89,7 +88,7 @@ {#if allowCustomTimeRange} - + Custom {/if} diff --git a/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenuItem.svelte b/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenuItem.svelte index df669daa88f..391719e8d57 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenuItem.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeMenuItem.svelte @@ -20,7 +20,7 @@ role="menuitem" class:font-bold={selected} class="group truncate h-7 p-2 text-popover-foreground justify-between overflow-hidden hover:bg-popover-accent rounded-sm w-full select-none flex items-center" - on:click={() => { + onclick={() => { onClick(range); }} > diff --git a/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeSearch.svelte b/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeSearch.svelte index fa4246543f4..8598a7f9fd0 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeSearch.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/components/TimeRangeSearch.svelte @@ -37,7 +37,7 @@ class:error={(inError || unableToParse) && timeString !== ALL_TIME_RANGE_ALIAS} class="" - on:submit={(e) => { + onsubmit={(e) => { e.preventDefault(); if (searchValue === ALL_TIME_RANGE_ALIAS) { @@ -68,7 +68,7 @@ { + onclick={() => { searchElement.focus(); }} > @@ -78,7 +78,7 @@ placeholder="Enter a time range" type="text" class="h-7 border w-full" - on:keydown={() => { + onkeydown={() => { if (unableToParse) { unableToParse = false; } diff --git a/web-common/src/features/dashboards/time-controls/super-pill/components/Timestamp.svelte b/web-common/src/features/dashboards/time-controls/super-pill/components/Timestamp.svelte index 2d874263b99..e91db7f90ab 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/components/Timestamp.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/components/Timestamp.svelte @@ -1,7 +1,7 @@ - - + + {#snippet child({ props })} + + {/snippet}
-
+
{/if}
{#each filteredPinnedTimeZones as [iana, { offset, abbreviation }] (iana)}
{#if !searchValue && recentIANAs.length} -
+

Recent

{#if recentIANAs.length} - +
+ {zoneAbbreviation} +
+ {/if} - - {#if interval} - - {/if} - - - + + + + + {/snippet} + + {/snippet} + + + + {#if interval} + + {/if} + + { + onclick={() => { handleRangeSelect("inf"); }} > @@ -354,12 +357,12 @@ {#if allowCustomTimeRange}
-
+
+ + { + showCalendarPicker = false; + }} + class="group h-7 overflow-hidden hover:bg-popover-accent flex-none rounded-sm w-full select-none flex items-center truncate text-left gap-x-1 pr-1 pl-2" + > +
+ +
+
Time zone
+
+
+
-
+
- + { + showCalendarPicker = false; + }} + aria-label="Select time axis" + class="group h-7 overflow-hidden hover:bg-surface-hover flex-none rounded-sm w-full select-none flex items-center truncate text-left gap-x-1 pr-1 pl-2" > -
{ - showCalendarPicker = false; - }} - role="presentation" - class="group h-7 overflow-hidden hover:bg-surface-hover flex-none rounded-sm w-full select-none flex items-center" - > - +
+ +
+
Time axis
+
+
+ { + onclick={() => { onTimeDimensionSelect(value); closeMenu(); timeAxisPickerOpen = false; @@ -554,8 +533,4 @@ .item:hover { @apply bg-surface-hover text-fg-primary; } - - .separator { - @apply h-px w-full bg-gray-200 my-1; - } diff --git a/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TimeRangeOptionGroup.svelte b/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TimeRangeOptionGroup.svelte index 80a2020a8e4..b5c73c6f150 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TimeRangeOptionGroup.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TimeRangeOptionGroup.svelte @@ -20,14 +20,14 @@ {#if filtered.length}
{#if hideDivider} -
+
{/if} {#each filtered as option, i (i)} {/each} {#if !hideDivider} -
+
{/if}
{/if} diff --git a/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TruncationSelector.svelte b/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TruncationSelector.svelte index 25237fe8873..578e299c038 100644 --- a/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TruncationSelector.svelte +++ b/web-common/src/features/dashboards/time-controls/super-pill/new-time-dropdown/TruncationSelector.svelte @@ -9,7 +9,8 @@ } from "@rilldata/web-common/lib/time/new-grains"; import TooltipContent from "@rilldata/web-common/components/tooltip/TooltipContent.svelte"; import Switch from "@rilldata/web-common/components/forms/Switch.svelte"; - import { builderActions, getAttrs, Tooltip } from "bits-ui"; + import { Tooltip as TooltipPrimitive } from "bits-ui"; + import * as Tooltip from "@rilldata/web-common/components/tooltip-v2"; import TooltipTitle from "@rilldata/web-common/components/tooltip/TooltipTitle.svelte"; import TooltipDescription from "@rilldata/web-common/components/tooltip/TooltipDescription.svelte"; import { onDestroy, onMount } from "svelte"; @@ -34,9 +35,25 @@ ) => void; let open = false; + let hoveredOption: string | null = null; + let hoverTimer: ReturnType | undefined; let now = DateTime.now().setZone(zone); + + function startHoverTimer(id: string) { + clearHoverTimer(); + hoverTimer = setTimeout(() => { + hoveredOption = id; + }, 800); + } + + function clearHoverTimer() { + if (hoverTimer) { + clearTimeout(hoverTimer); + hoverTimer = undefined; + } + hoveredOption = null; + } let interval: ReturnType | undefined = undefined; - let disableTooltip = false; onMount(() => { interval = setInterval(() => { @@ -48,6 +65,9 @@ if (interval) { clearInterval(interval); } + if (hoverTimer) { + clearTimeout(hoverTimer); + } }); $: dateTimeUnit = grain ? V1TimeGrainToDateTimeUnit[grain] : undefined; @@ -140,73 +160,55 @@ } - - - - + + + + + {derivedAnchor.toLocaleString(DateTime.DATETIME_MED_WITH_SECONDS)} + + + + {getColloquialOffset(derivedAnchor)} + + + + @@ -215,60 +217,55 @@ {#each options as { id, label, description, timestamp } (id)} {#if id !== RillTimeLabel.Watermark || (id === RillTimeLabel.Watermark && !!timestamp)} - { - onSelectAsOfOption(id); - }} - > - - -
+ + {#snippet child({ props: tooltipProps })} + { + onSelectAsOfOption(id); + }} + onpointerenter={() => startHoverTimer(id)} + onpointerleave={clearHoverTimer} > {label} -
-
+
+ {/snippet} + - {#if timestamp} - - -
- - {timestamp.toLocaleString( - DateTime.DATETIME_MED_WITH_SECONDS, - )} - - -
+ {#if timestamp} + + +
+ + {timestamp.toLocaleString( + DateTime.DATETIME_MED_WITH_SECONDS, + )} + + +
- {#if id !== RillTimeLabel.Now} -
- {getColloquialOffset(timestamp)} -
- {/if} - - {description} - -
-
- {/if} - - + {#if id !== RillTimeLabel.Now} +
+ {getColloquialOffset(timestamp)} +
+ {/if} + + {description} + +
+
+ {/if} + {/if} {/each}
@@ -280,8 +277,9 @@ {#each grainOptions as option, i (i)} { + onSelect={() => { onSelectEnding(option); }} > @@ -303,7 +301,7 @@ disabled={ref === RillTimeLabel.Watermark} small checked={snapToEnd || ref === RillTimeLabel.Watermark} - on:click={() => { + onclick={() => { onToggleAlignment(!snapToEnd); }} /> diff --git a/web-common/src/features/dashboards/time-dimension-details/TDDTable.svelte b/web-common/src/features/dashboards/time-dimension-details/TDDTable.svelte index 9b81339fb9d..22b15c24728 100644 --- a/web-common/src/features/dashboards/time-dimension-details/TDDTable.svelte +++ b/web-common/src/features/dashboards/time-dimension-details/TDDTable.svelte @@ -390,7 +390,7 @@
- +
handleChartTypeChange(id, disabled)} + onclick={() => handleChartTypeChange(id, disabled)} > { + e.stopPropagation(); + handleClick(); + }} aria-label={priorRange ? "Undo zoom" : "Zoom"} >
@@ -199,7 +202,7 @@ {/if} - + diff --git a/web-common/src/layout/CollapsibleSectionTitle.svelte b/web-common/src/layout/CollapsibleSectionTitle.svelte index 0c4f73e89af..6fa812014d5 100644 --- a/web-common/src/layout/CollapsibleSectionTitle.svelte +++ b/web-common/src/layout/CollapsibleSectionTitle.svelte @@ -38,7 +38,7 @@ max-width: 100%; " - on:click={() => { + onclick={() => { active = !active; }} > diff --git a/web-common/src/layout/Resizer.svelte b/web-common/src/layout/Resizer.svelte index aecc502b324..da94bc18609 100644 --- a/web-common/src/layout/Resizer.svelte +++ b/web-common/src/layout/Resizer.svelte @@ -85,13 +85,20 @@ class:hang class:minned={dimension === min} class:maxed={dimension === max} - on:mousedown|stopPropagation|preventDefault={handleMousedown} - on:dblclick|stopPropagation={handleDoubleClick} - on:mouseenter={() => { + onmousedown={(e) => { + e.stopPropagation(); + e.preventDefault(); + handleMousedown(e); + }} + ondblclick={(e) => { + e.stopPropagation(); + handleDoubleClick(); + }} + onmouseenter={() => { if (timeout) clearTimeout(timeout); timeout = setTimeout(() => (hover = true), 150); }} - on:mouseleave={() => { + onmouseleave={() => { if (timeout) clearTimeout(timeout); timeout = null; hover = false; @@ -107,7 +114,6 @@ @apply z-50 flex-none; @apply pointer-events-auto; @apply flex items-center; - /* @apply bg-red-500 opacity-50; */ } button:disabled { diff --git a/web-common/src/layout/navigation/Navigation.svelte b/web-common/src/layout/navigation/Navigation.svelte index 0512c54cd12..287a58433ed 100644 --- a/web-common/src/layout/navigation/Navigation.svelte +++ b/web-common/src/layout/navigation/Navigation.svelte @@ -61,8 +61,8 @@ { + onresize={handleResize} + onkeydown={(e) => { const isMac = window.navigator.userAgent.includes("Macintosh"); if (e[isMac ? "metaKey" : "ctrlkey"] && e.key === "b") { @@ -116,7 +116,7 @@ {/if}