From a9484e6edf3f2a63985ea75204c83832880dbc08 Mon Sep 17 00:00:00 2001 From: worksofliam Date: Tue, 7 Jan 2025 13:52:13 -0500 Subject: [PATCH 1/2] Updated dependencies and refactored components to use new element library Signed-off-by: worksofliam --- package-lock.json | 161 +++++++++++++---------------------------- package.json | 2 +- src/types/dataqueue.ts | 4 +- src/types/saveFile.ts | 2 +- src/webviewToolkit.ts | 70 +++++++++--------- webpack.config.js | 4 +- 6 files changed, 93 insertions(+), 150 deletions(-) diff --git a/package-lock.json b/package-lock.json index b61382b..c83e27a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.3-dev0", "license": "MIT", "dependencies": { - "@vscode/webview-ui-toolkit": "^1.4.0" + "@vscode-elements/elements": "^1.9.1" }, "devDependencies": { "@halcyontech/vscode-ibmi-types": "^2.13", @@ -516,50 +516,17 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@microsoft/fast-element": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.13.0.tgz", - "integrity": "sha512-iFhzKbbD0cFRo9cEzLS3Tdo9BYuatdxmCEKCpZs1Cro/93zNMpZ/Y9/Z7SknmW6fhDZbpBvtO8lLh9TFEcNVAQ==", - "license": "MIT" - }, - "node_modules/@microsoft/fast-foundation": { - "version": "2.49.6", - "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.49.6.tgz", - "integrity": "sha512-DZVr+J/NIoskFC1Y6xnAowrMkdbf2d5o7UyWK6gW5AiQ6S386Ql8dw4KcC4kHaeE1yL2CKvweE79cj6ZhJhTvA==", - "license": "MIT", - "dependencies": { - "@microsoft/fast-element": "^1.13.0", - "@microsoft/fast-web-utilities": "^5.4.1", - "tabbable": "^5.2.0", - "tslib": "^1.13.0" - } - }, - "node_modules/@microsoft/fast-foundation/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "license": "0BSD" - }, - "node_modules/@microsoft/fast-react-wrapper": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.3.24.tgz", - "integrity": "sha512-sRnSBIKaO42p4mYoYR60spWVkg89wFxFAgQETIMazAm2TxtlsnsGszJnTwVhXq2Uz+XNiD8eKBkfzK5c/i6/Kw==", - "license": "MIT", - "dependencies": { - "@microsoft/fast-element": "^1.13.0", - "@microsoft/fast-foundation": "^2.49.6" - }, - "peerDependencies": { - "react": ">=16.9.0" - } + "node_modules/@lit-labs/ssr-dom-shim": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz", + "integrity": "sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ==" }, - "node_modules/@microsoft/fast-web-utilities": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", - "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", - "license": "MIT", + "node_modules/@lit/reactive-element": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@lit/reactive-element/-/reactive-element-2.0.4.tgz", + "integrity": "sha512-GFn91inaUa2oHLak8awSIigYz0cU0Payr1rcFsrkf5OJ5eSPxElyZfKh0f2p9FsTiZWXQdWGJeXZICEfXXYSXQ==", "dependencies": { - "exenv-es6": "^1.1.1" + "@lit-labs/ssr-dom-shim": "^1.2.0" } }, "node_modules/@pkgjs/parseargs": { @@ -597,6 +564,11 @@ "undici-types": "~6.19.2" } }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==" + }, "node_modules/@types/vscode": { "version": "1.93.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.93.0.tgz", @@ -604,19 +576,12 @@ "dev": true, "license": "MIT" }, - "node_modules/@vscode/webview-ui-toolkit": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.4.0.tgz", - "integrity": "sha512-modXVHQkZLsxgmd5yoP3ptRC/G8NBDD+ob+ngPiWNQdlrH6H1xR/qgOBD85bfU3BhOB5sZzFWBwwhp9/SfoHww==", - "license": "MIT", + "node_modules/@vscode-elements/elements": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@vscode-elements/elements/-/elements-1.9.1.tgz", + "integrity": "sha512-OqNqE6vD4gbmu8L5UBAHuiU/cclLDsEb1gikJvuzEY7jVQOU0jFR70gFdk/aQikWFcKzVMoXqgO+lIKPSK0IUw==", "dependencies": { - "@microsoft/fast-element": "^1.12.0", - "@microsoft/fast-foundation": "^2.49.4", - "@microsoft/fast-react-wrapper": "^0.3.22", - "tslib": "^2.6.2" - }, - "peerDependencies": { - "react": ">=16.9.0" + "lit": "^3.2.1" } }, "node_modules/@webassemblyjs/ast": { @@ -1065,11 +1030,10 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1699,12 +1663,6 @@ "node": ">=0.8.x" } }, - "node_modules/exenv-es6": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", - "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==", - "license": "MIT" - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1968,13 +1926,6 @@ "node": ">= 10.13.0" } }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT", - "peer": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -2012,6 +1963,34 @@ "node": ">=0.10.0" } }, + "node_modules/lit": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit/-/lit-3.2.1.tgz", + "integrity": "sha512-1BBa1E/z0O9ye5fZprPtdqnc0BFzxIxTTOO/tQFmyC/hj1O3jL4TfmLBw0WEwjAokdLwpclkvGgDJwTIh0/22w==", + "dependencies": { + "@lit/reactive-element": "^2.0.4", + "lit-element": "^4.1.0", + "lit-html": "^3.2.0" + } + }, + "node_modules/lit-element": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lit-element/-/lit-element-4.1.1.tgz", + "integrity": "sha512-HO9Tkkh34QkTeUmEdNYhMT8hzLid7YlMlATSi1q4q17HE5d9mrrEHJ/o8O2D0cMi182zK1F3v7x0PWFjrhXFew==", + "dependencies": { + "@lit-labs/ssr-dom-shim": "^1.2.0", + "@lit/reactive-element": "^2.0.4", + "lit-html": "^3.2.0" + } + }, + "node_modules/lit-html": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/lit-html/-/lit-html-3.2.1.tgz", + "integrity": "sha512-qI/3lziaPMSKsrwlxH/xMgikhQ0EGOX2ICU73Bi/YHFvz2j/yMCIrw4+puF2IpQ4+upd3EWbvnHM9+PnJn48YA==", + "dependencies": { + "@types/trusted-types": "^2.0.2" + } + }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -2050,19 +2029,6 @@ "node": ">=8" } }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "peer": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -2270,19 +2236,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/react": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", - "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/rechoir": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", @@ -2623,12 +2576,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tabbable": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", - "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==", - "license": "MIT" - }, "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", @@ -2693,12 +2640,6 @@ } } }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", - "license": "0BSD" - }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", diff --git a/package.json b/package.json index acf7467..62aca82 100644 --- a/package.json +++ b/package.json @@ -146,6 +146,6 @@ "webpack-cli": "^5.1.4" }, "dependencies": { - "@vscode/webview-ui-toolkit": "^1.4.0" + "@vscode-elements/elements": "^1.9.1" } } diff --git a/src/types/dataqueue.ts b/src/types/dataqueue.ts index 97789a0..4352dfd 100644 --- a/src/types/dataqueue.ts +++ b/src/types/dataqueue.ts @@ -208,8 +208,8 @@ export class DataQueue extends Base { private renderDataQueuePanel(): string { return /*html*/ `${Components.keyValueTable(infoKey, infoValue, Object.entries(this._info))} ${Components.divider()} - ${Components.button("Send data", { action: ACTION_SEND, icon: { name: "arrow-right", left: true } })} - ${Components.button("Clear", { action: ACTION_CLEAR, appearance: "secondary", icon: { name: "clear-all", left: true } })} + ${Components.button("Send data", { action: ACTION_SEND, icon: "arrow-right" })} + ${Components.button("Clear", { action: ACTION_CLEAR, secondary: true, icon: "clear-all" })} `; } } diff --git a/src/types/saveFile.ts b/src/types/saveFile.ts index c216e30..a20e95c 100644 --- a/src/types/saveFile.ts +++ b/src/types/saveFile.ts @@ -369,7 +369,7 @@ function renderHeaders(size: string, headers: Header[]): string { headers )} ${Components.divider()} - ${Components.button(`Download${size ? ` (${size})` : ''}`, { action: ACTION_DOWNLOAD, icon: { name: "cloud-download" } })}`; + ${Components.button(`Download${size ? ` (${size})` : ''}`, { action: ACTION_DOWNLOAD, icon: "cloud-download" })}`; } function renderObjects(objects: Object[]): string { diff --git a/src/webviewToolkit.ts b/src/webviewToolkit.ts index aa7a884..76bef31 100644 --- a/src/webviewToolkit.ts +++ b/src/webviewToolkit.ts @@ -1,4 +1,4 @@ -const webToolKit = require("@vscode/webview-ui-toolkit/dist/toolkit.min.js"); +const webToolKit = require("@vscode-elements/elements/dist/bundled"); const head = /*html*/` @@ -128,7 +128,7 @@ export function generateError(text: string) { `; } -//https://github.com/microsoft/vscode-webview-ui-toolkit/blob/main/docs/components.md +// https://vscode-elements.github.io/components/ export namespace Components { interface Component { class?: string @@ -169,7 +169,7 @@ export namespace Components { } interface Button extends Component { - appearance: "primary" | "secondary" | "icon" + secondary: boolean; ariaLabel: string gautofocus: boolean disabled: boolean @@ -181,7 +181,8 @@ export namespace Components { formtarget: string type: string value: string - icon: ButtonIcon, + icon: string, + iconAfter: string; action: string } @@ -223,34 +224,36 @@ export namespace Components { content: string } - export function panels(panels: Panel[], attributes?: Component, activeid?: number): string { - return /*html*/ ` - ${panels.map((panel, index) => /*html*/ `${panel.title.toUpperCase()}${panel.badge ? badge(panel.badge, true) : ''}`).join("")} - ${panels.map((panel, index) => /*html*/ `${panel.content}`).join("")} - `; + export function panels(panels: Panel[], attributes?: Component, activeTab?: number): string { + return /*html*/ ` + + ${panels.map((panel, index) => /*html*/ ` + + ${panel.title.toUpperCase()}${panel.badge ? badge(panel.badge, true) : ''} + + + ${panel.content} + + `).join("")} + `; } export function dataGrid(grid: DataGrid, content: T[]): string { - return /*html*/ ` + return /*html*/ ` ${renderHeader(grid)} - ${content.map(row => renderRow(grid, row)).join("")} - `; - } - function gridTemplateColumns(grid: DataGrid) { - const attemptToSize = grid.columns.some(col => col.size); - if (attemptToSize) { - return `grid-template-columns="${grid.columns.map(col => col.size ? col.size : "auto").join(" ")}"`; - } else { - return ``; - } + + ${content.map(row => renderRow(grid, row)).join("")} + + `; } function renderHeader(grid: DataGrid) { if (grid.columns.filter(col => col.title).length) { - return /*html*/ ` - ${grid.columns.map((col, index) => /*html*/ `${col.title || ""}`).join("")} - `; + // TODO: support sticky-header. We need custom css for sticky header + return /*html*/ ` + ${grid.columns.map((col) => /*html*/ `${col.title || ""}`).join("")} + `; } else { return ""; @@ -258,9 +261,9 @@ export namespace Components { } function renderRow(grid: DataGrid, row: T) { - return /*html*/ ` - ${grid.columns.map((col, index) => /*html*/ `${col.cellValue(row)}`).join("")} - `; + return /*html*/ ` + ${grid.columns.map((col) => /*html*/ `${col.cellValue(row)}`).join("")} + `; } export function divider(options?: Partial) { @@ -268,18 +271,18 @@ export namespace Components { } export function dropDown(id: string, dropDown: Partial, noChangeListener?: boolean) { - return /*html*/ ` + return /*html*/ ` ${dropDown.indicator ? /*html*/ _icon(dropDown.indicator, "indicator") : ''} - ${dropDown.items?.map(item => /*html*/ `${item}`).join("")} - `; + ${dropDown.items?.map(item => /*html*/ ``).join("")} + `; } export function textField(id: string, label?: string, options?: Partial, noChangeListener?: boolean) { - return /* html */`${label || ''}`; + return /* html */`${label || ''}`; } export function textArea(id: string, label?: string, options?: Partial