From d49449846ae291b35c5588621b51b579d09e7b17 Mon Sep 17 00:00:00 2001 From: flovancur Date: Thu, 28 Aug 2025 16:23:35 +0200 Subject: [PATCH 1/6] fixed selection Issue, reformatted App.tsx added new styling --- .vscode/launch.json | 18 ++ example/workspace/example.nmeta | 9 +- example/workspace/test.nmeta | 2 +- package-lock.json | 65 +++++++- package.json | 4 +- packages/nmeta-vscode/package.json | 21 ++- .../nmeta-vscode/src/nmeta-editor-provider.ts | 2 +- packages/nmeta-vscode/src/nmeta-extension.ts | 47 +++--- .../src/property-view-provider.ts | 37 +++-- packages/nmeta-vscode/webpack.config.js | 2 +- packages/property-view/package.json | 3 +- packages/property-view/src/App.css | 12 +- packages/property-view/src/App.tsx | 154 +++++++++++------- packages/property-view/src/main.tsx | 4 +- packages/property-view/vite.config.mts | 11 +- .../src/websocket-provider.ts | 5 +- 16 files changed, 267 insertions(+), 129 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index c5a68be..e2772a2 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,6 +4,24 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ + { + "name": "Debug Vite Dev Server", + "type": "pwa-node", + "request": "launch", + "runtimeExecutable": "yarn", + "runtimeArgs": ["dev"], + "port": 9229, + "console": "integratedTerminal", + "cwd": "${workspaceFolder}/packages/property-view/src", + "sourceMaps": true + }, + { + "name": "Debug in Browser", + "type": "pwa-chrome", + "request": "launch", + "url": "http://localhost:3000", + "webRoot": "${workspaceFolder}/src" + }, { "name": "Run NMeta Extension", "type": "extensionHost", diff --git a/example/workspace/example.nmeta b/example/workspace/example.nmeta index a458aa5..3e9ec1e 100644 --- a/example/workspace/example.nmeta +++ b/example/workspace/example.nmeta @@ -1,18 +1,19 @@  - + - + - - + + + \ No newline at end of file diff --git a/example/workspace/test.nmeta b/example/workspace/test.nmeta index d8752a1..9329d76 100644 --- a/example/workspace/test.nmeta +++ b/example/workspace/test.nmeta @@ -1,5 +1,5 @@  + - \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 4690b23..be1ce95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2601,6 +2601,8 @@ }, "node_modules/@types/vscode": { "version": "1.67.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.67.0.tgz", + "integrity": "sha512-GH8BDf8cw9AC9080uneJfulhSa7KHSMI2s/CyKePXoGNos9J486w2V4YKoeNUqIEkW4hKoEAWp6/cXTwyGj47g==", "dev": true, "license": "MIT" }, @@ -4349,6 +4351,22 @@ "dev": true, "license": "MIT" }, + "node_modules/bufferutil": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz", + "integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/cac": { "version": "6.7.14", "dev": true, @@ -10269,6 +10287,20 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-gyp/node_modules/env-paths": { "version": "2.2.1", "devOptional": true, @@ -15031,6 +15063,22 @@ "node": ">=0.10.0" } }, + "node_modules/utf-8-validate": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.5.tgz", + "integrity": "sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "devOptional": true, @@ -16046,6 +16094,20 @@ "node": ">=12" } }, + "node_modules/yarn": { + "version": "1.22.22", + "resolved": "https://registry.npmjs.org/yarn/-/yarn-1.22.22.tgz", + "integrity": "sha512-prL3kGtyG7o9Z9Sv8IPfBNrWTDmXB4Qbes8A9rEzt6wkJV8mUvoirjU0Mp3GGAU06Y0XQyA3/2/RQFVuK7MTfg==", + "hasInstallScript": true, + "license": "BSD-2-Clause", + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/yauzl": { "version": "2.10.0", "dev": true, @@ -17727,7 +17789,8 @@ "property-views-client": "^0.0.1-beta", "react": "^18.3.1", "react-dom": "^18.3.1", - "vscode-jsonrpc": "^8.2.1" + "vscode-jsonrpc": "^8.2.1", + "yarn": "^1.22.22" }, "devDependencies": { "@testing-library/react": "^16.0.0", diff --git a/package.json b/package.json index be15797..306a481 100644 --- a/package.json +++ b/package.json @@ -36,8 +36,8 @@ "eslint-plugin-header": "~3.1.1", "shx": "~0.3.4", "typescript": "~5.1.6", - "vitest": "~1.5.0" - }, + "vitest": "~1.5.0" +}, "overrides": { "@types/node": "~16.18.41" }, diff --git a/packages/nmeta-vscode/package.json b/packages/nmeta-vscode/package.json index ee26ada..3c349fd 100644 --- a/packages/nmeta-vscode/package.json +++ b/packages/nmeta-vscode/package.json @@ -179,15 +179,22 @@ "label": "Diagram" } ], + "viewsContainers": { + "panel": [ + { + "id": "propertyPanel", + "title": "PropertyPanel", + "icon": "images/edit.min.svg" + } + ] + }, "views": { - "explorer": [ + "propertyPanel": [ { "type": "webview", "id": "nmeta.propertyView", - "name": "Properties", - "contextualTitle": "Properties View", - "icon": "images/edit.min.svg" - } + "name": "Propertieeeees", + "contextualTitle": "Properties View" } ] } }, @@ -198,11 +205,11 @@ "@eclipse-glsp/vscode-integration": "2.1.1", "@vscode/vsce": "^2.19.0", "copy-webpack-plugin": "^11.0.0", + "nmeta-glsp-webview": "1.0.0", "ts-loader": "^9.4.4", "webpack": "^5.88.2", "webpack-cli": "^5.1.4", - "webpack-merge": "^5.9.0", - "nmeta-glsp-webview": "1.0.0" + "webpack-merge": "^5.9.0" }, "engines": { "vscode": "^1.54.0" diff --git a/packages/nmeta-vscode/src/nmeta-editor-provider.ts b/packages/nmeta-vscode/src/nmeta-editor-provider.ts index ef8b12a..845b083 100644 --- a/packages/nmeta-vscode/src/nmeta-editor-provider.ts +++ b/packages/nmeta-vscode/src/nmeta-editor-provider.ts @@ -31,7 +31,7 @@ export default class NMetaEditorProvider extends GlspEditorProvider { - diff --git a/packages/nmeta-vscode/src/nmeta-extension.ts b/packages/nmeta-vscode/src/nmeta-extension.ts index e122d21..a49b070 100644 --- a/packages/nmeta-vscode/src/nmeta-extension.ts +++ b/packages/nmeta-vscode/src/nmeta-extension.ts @@ -17,39 +17,40 @@ import 'reflect-metadata'; import { GlspVscodeConnector, + SelectAction, SocketGlspVscodeServer, configureDefaultCommands } from '@eclipse-glsp/vscode-integration/node'; import * as process from 'process'; import * as vscode from 'vscode'; import NMetaEditorProvider from './nmeta-editor-provider'; -import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; +// import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; import path = require('path'); import { PropertyViewProvider } from './property-view-provider'; -const DEFAULT_SERVER_PORT = '0'; +const DEFAULT_SERVER_PORT = '5052'; const DOTNET_EXECUTABLE = path.join(__dirname, '..', 'dist', 'NMetaGlspEditor.Server.exe'); export async function activate(context: vscode.ExtensionContext): Promise { - const serverProcess = new DotnetGlspSocketServerLauncher({ - executable: DOTNET_EXECUTABLE, - socketConnectionOptions: { host: 'localhost', port: JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT) }, - logging: true - }); + // const serverProcess = new DotnetGlspSocketServerLauncher({ + // executable: DOTNET_EXECUTABLE, + // socketConnectionOptions: { host: 'localhost', port: JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT) }, + // logging: true + // }); - context.subscriptions.push(serverProcess); + // context.subscriptions.push(serverProcess); - await serverProcess.start(); + // await serverProcess.start(); // Wrap server with quickstart component const nmetaServer = new SocketGlspVscodeServer({ - clientId: 'vscode', - clientName: 'vscode', - connectionOptions: { - port: serverProcess?.getPort() || JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT), - path: process.env.GLSP_WEBSOCKET_PATH - } - }); + clientId: 'vscode', + clientName: 'vscode', + connectionOptions: { + port: JSON.parse( process.env.GLSP_SERVER_PORT || DOTNET_EXECUTABLE || DEFAULT_SERVER_PORT), + path: process.env.GLSP_WEBSOCKET_PATH + } + }); // Initialize GLSP-VSCode connector with server wrapper const glspVscodeConnector = new GlspVscodeConnector({ @@ -57,16 +58,24 @@ export async function activate(context: vscode.ExtensionContext): Promise logging: true }); + + glspVscodeConnector.onSelectionUpdate(e => { + nmetaServer.glspClient.then(client => { + var action = SelectAction.create(e); + client.sendActionMessage({ clientId: 'nmeta_0', action }); + }); + }); + const customEditorProvider = vscode.window.registerCustomEditorProvider( 'nmeta.glspDiagram', new NMetaEditorProvider(context, glspVscodeConnector), { webviewOptions: { retainContextWhenHidden: true }, - supportsMultipleEditorsPerDocument: false + supportsMultipleEditorsPerDocument: true } ); - vscode.window.registerWebviewViewProvider( + const propertyProvider = vscode.window.registerWebviewViewProvider( 'nmeta.propertyView', new PropertyViewProvider(context), { @@ -76,7 +85,7 @@ export async function activate(context: vscode.ExtensionContext): Promise } ); - context.subscriptions.push(nmetaServer, glspVscodeConnector, customEditorProvider); + context.subscriptions.push(nmetaServer, glspVscodeConnector, customEditorProvider, propertyProvider); nmetaServer.start(); configureDefaultCommands({ extensionContext: context, connector: glspVscodeConnector, diagramPrefix: 'nmeta' }); diff --git a/packages/nmeta-vscode/src/property-view-provider.ts b/packages/nmeta-vscode/src/property-view-provider.ts index 7a34441..05b1cd4 100644 --- a/packages/nmeta-vscode/src/property-view-provider.ts +++ b/packages/nmeta-vscode/src/property-view-provider.ts @@ -6,7 +6,8 @@ export class PropertyViewProvider implements WebviewViewProvider private view?: WebviewView; - constructor(protected readonly extensionContext: ExtensionContext) + constructor(protected readonly extensionContext: ExtensionContext, + ) { } @@ -25,8 +26,8 @@ export class PropertyViewProvider implements WebviewViewProvider const webview = this.view.webview; const extensionUri = this.extensionContext.extensionUri; - const webviewScriptSourceUri = webview.asWebviewUri(Uri.joinPath(extensionUri, 'dist', 'index-BFzZPLoV.js')); - const webviewCssSourceUri = webview.asWebviewUri(Uri.joinPath(extensionUri, 'dist', 'index-BYtM6D31.css')); + const webviewScriptSourceUri = webview.asWebviewUri(Uri.joinPath(extensionUri, 'dist', 'property.js')); + const webviewCssSourceUri = webview.asWebviewUri(Uri.joinPath(extensionUri, 'dist', 'property.css')); webview.options = { enableScripts: true, @@ -36,21 +37,21 @@ export class PropertyViewProvider implements WebviewViewProvider webview.html = ` - - - - - - - Properties - - - - -
- + + + + + + + Properties + + + + +
+ `; } } diff --git a/packages/nmeta-vscode/webpack.config.js b/packages/nmeta-vscode/webpack.config.js index 9334566..41506ec 100644 --- a/packages/nmeta-vscode/webpack.config.js +++ b/packages/nmeta-vscode/webpack.config.js @@ -40,7 +40,7 @@ const config = { new CopyPlugin({ patterns: [ { - from: path.resolve(__dirname, '..', '..', 'backend', 'NMetaGlspEditor.Server.exe') + from: path.resolve(__dirname, 'dist', 'NMetaGlspEditor.Server.exe') }, { from: path.resolve(__dirname, '..', 'nmeta-glsp-webview', 'dist', 'nmetaWebview.js') diff --git a/packages/property-view/package.json b/packages/property-view/package.json index e56eb4b..12f64d5 100644 --- a/packages/property-view/package.json +++ b/packages/property-view/package.json @@ -15,7 +15,8 @@ "property-views-client": "^0.0.1-beta", "react": "^18.3.1", "react-dom": "^18.3.1", - "vscode-jsonrpc": "^8.2.1" + "vscode-jsonrpc": "^8.2.1", + "yarn": "^1.22.22" }, "devDependencies": { "@testing-library/react": "^16.0.0", diff --git a/packages/property-view/src/App.css b/packages/property-view/src/App.css index a40c9c0..3f6cf84 100644 --- a/packages/property-view/src/App.css +++ b/packages/property-view/src/App.css @@ -1,8 +1,10 @@ -html { +html,header, body.vscode-dark { font-size: 16px; + background-color: var(--vscode-editor-background); } .App { + text-align: center; margin-bottom: 0.5em; } @@ -26,11 +28,3 @@ html { font-size: large; } -@keyframes App-logo-spin { - from { - transform: rotate(0deg); - } - to { - transform: rotate(360deg); - } -} diff --git a/packages/property-view/src/App.tsx b/packages/property-view/src/App.tsx index 2d3a4d7..b2c72ad 100644 --- a/packages/property-view/src/App.tsx +++ b/packages/property-view/src/App.tsx @@ -1,94 +1,134 @@ import './App.css'; -import type { PropertyViewObject, PropViewClient} from 'property-views-client'; -import { BaseJsonrpcPropViewClient, PropViewWebSocketProvider } from 'property-views-client'; -import { useState } from 'react'; +import { PropertyViewObject, PropViewClient } from 'property-views-client'; +import { BaseJsonrpcPropViewClient, PropViewWebSocketProvider, MultiTransportConnection } from 'property-views-client'; +import { useEffect, useRef, useState } from 'react'; import { JsonForms } from '@jsonforms/react'; -import { - materialCells, - materialRenderers, -} from '@jsonforms/material-renderers'; +import { materialCells, materialRenderers } from '@jsonforms/material-renderers'; import type { MessageConnection } from 'vscode-jsonrpc'; import { Grid, Typography } from '@mui/material'; import deepEqual from 'deep-equal'; const port = 5052; const id = 'prop'; - const webSocketUrl = `ws://localhost:${port}/${id}`; const classes = { + container: { padding: '1em', width: '100%', - backgroundColor: '#cecece', + backgroundColor: 'var(--vscode-editor-background)', }, dataContent: { display: 'flex', justifyContent: 'center', borderRadius: '0.25em', marginBottom: '1rem', - backgroundColor: '#ffffff', + backgroundColor: 'white', } }; -let handler: (data: PropertyViewObject[]) => void; -let propViewClient: PropViewClient; -let updating: boolean = false; - -const wsProvider = new PropViewWebSocketProvider(webSocketUrl); -wsProvider.listen({ onConnection: initialize, onReconnect: reconnect, logger: console }); - -function setDataWrapper(dat: unknown) { - updating = true; - handler(dat as PropertyViewObject[]); - updating = false; -} - -async function initialize(connectionProvider: MessageConnection, isReconnecting = false): Promise { - propViewClient = new BaseJsonrpcPropViewClient(setDataWrapper, { id, connectionProvider }); - await propViewClient.start(); +const App = () => { + const [data, setData] = useState([]); + const updating = useRef(false); + const propViewClient = useRef(null); + + // MultiTransportConnection erstellen + const multiConnRef = useRef(new MultiTransportConnection(console)); + + useEffect(() => { + const wsProvider = new PropViewWebSocketProvider(webSocketUrl); + console.warn("Provider initialized"); + + // WebSocket mit MultiTransportConnection verbinden + wsProvider.listen({ + onConnection: initialize, + onReconnect: reconnect, + logger: console + }, multiConnRef.current); + + }, []); + + useEffect(() => { + console.log("data updated:", data, "isArray:", Array.isArray(data)); + }, [data]); + + function setDataWrapper(dat: Promise | PropertyViewObject[] | PropertyViewObject | null): void { + updating.current = true; + + if (dat instanceof Promise) { + dat.then(resolved => { + setDataWrapper(resolved); + }).catch(err => { + console.error("Failed to resolve Promise in setDataWrapper:", err); + setData([]); + }).finally(() => { + updating.current = false; + }); + return; + } - setDataWrapper(propViewClient.selectedElements()); + if (Array.isArray(dat)) { + setData(dat as PropertyViewObject[]); + } else if (dat) { + const po = dat as Partial; + if (po.uri && po.data && po.identifier && po.schema && po.uischema) { + setData([po as PropertyViewObject]); + } else { + console.warn("Received object is not a valid PropertyViewObject", po); + setData([]); + } + } else { + setData([]); + } - if (isReconnecting) { - const message = `Connection to the ${id} property view server got closed. Connection was successfully re-established.`; - console.log(message); - return; + updating.current = false; } -} - -async function reconnect(connectionProvider: MessageConnection): Promise { - propViewClient.stop(); - initialize(connectionProvider, true /* isReconnecting */); -} - -function sendUpdate(po: PropertyViewObject, data: unknown) { - if (propViewClient && !updating) { - if (!deepEqual(po.data, data)) { - propViewClient.update({ - uri: po.uri, - data: data - }); + + async function reconnect(connectionProvider: MessageConnection): Promise { + if (propViewClient.current) { + propViewClient.current.stop(); } + await initialize(connectionProvider, true); } -} -const App = () => { + async function initialize(connectionProvider: MessageConnection, isReconnecting = false): Promise { + propViewClient.current = new BaseJsonrpcPropViewClient(setDataWrapper, { id, connectionProvider }); + await propViewClient.current.start(); + console.log('Selecting elements'); - const [data, setData] = useState([]); - handler = setData; + setDataWrapper(propViewClient.current.selectedElements()); - console.log(data.map); + if (isReconnecting) { + console.log(`Connection to the ${id} property view server got closed. Re-established successfully.`); + } + }; + + function sendUpdate(po: PropertyViewObject, data: unknown) { + if (propViewClient.current && !updating.current) { + if (!deepEqual(po.data, data)) { + propViewClient.current.update({ + uri: po.uri, + data: data + }); + } + } + } - const forms = data.map(po => - ( + - {po.identifier} + direction="column" + > + + {po.identifier} + { onChange={(updated) => sendUpdate(po, updated.data)} /> - ); + )) : null; - return { forms }; + return {forms}; }; export default App; diff --git a/packages/property-view/src/main.tsx b/packages/property-view/src/main.tsx index 8bd5145..53ffc48 100644 --- a/packages/property-view/src/main.tsx +++ b/packages/property-view/src/main.tsx @@ -10,9 +10,7 @@ const theme = createTheme({ components: { MuiFormControl: { styleOverrides: { - root: { - margin: '0.8em 0', - }, + }, }, }, diff --git a/packages/property-view/vite.config.mts b/packages/property-view/vite.config.mts index fdbb8f3..6a67ba7 100644 --- a/packages/property-view/vite.config.mts +++ b/packages/property-view/vite.config.mts @@ -4,8 +4,15 @@ import { defineConfig } from 'vitest/config'; export default defineConfig({ plugins: [react()], build: { - outDir: 'dist', - assetsDir: 'property-view' + outDir: '../nmeta-vscode/dist', + assetsDir: 'property-view', + rollupOptions: { + output: { + entryFileNames: 'property.js', + assetFileNames: 'property.css', + } + }, + sourcemap: true, }, test: { environment: 'jsdom', diff --git a/packages/property-views-client/src/websocket-provider.ts b/packages/property-views-client/src/websocket-provider.ts index 57c945e..5eb7942 100644 --- a/packages/property-views-client/src/websocket-provider.ts +++ b/packages/property-views-client/src/websocket-provider.ts @@ -190,7 +190,6 @@ export function listen( }); } - export class PropViewWebSocketProvider { protected webSocket: WebSocket; protected reconnectTimer: NodeJS.Timer; @@ -223,7 +222,7 @@ export class PropViewWebSocketProvider { }; return new Promise(resolve => { - this.webSocket.onopen = (): void => { + this.webSocket.onopen = async (): Promise => { clearInterval(this.reconnectTimer); const wrappedSocket = wrap(this.webSocket); const wsConnection = createWebSocketConnection(wrappedSocket, handler.logger); @@ -250,7 +249,7 @@ export class PropViewWebSocketProvider { if (isReconnecting) { handler.logger?.warn('PropViewWebSocketProvider Reconnecting!'); - handler.onReconnect?.(wsConnection); + await handler.onReconnect?.(wsConnection); } else { handler.logger?.warn('PropViewWebSocketProvider Initializing!'); handler.onConnection?.(wsConnection); From 0ba64b9cd6900ca5699edf61f285b685c96126c1 Mon Sep 17 00:00:00 2001 From: flovancur Date: Thu, 28 Aug 2025 19:04:39 +0200 Subject: [PATCH 2/6] fixed server issues --- package-lock.json | 355 +++++++++++++++++-- packages/nmeta-vscode/spa.proxy.json | 10 + packages/nmeta-vscode/src/nmeta-extension.ts | 18 +- packages/property-view/package.json | 4 +- packages/property-view/src/App.tsx | 6 +- packages/property-view/vite.config.mts | 1 - 6 files changed, 357 insertions(+), 37 deletions(-) create mode 100644 packages/nmeta-vscode/spa.proxy.json diff --git a/package-lock.json b/package-lock.json index be1ce95..7663442 100644 --- a/package-lock.json +++ b/package-lock.json @@ -266,7 +266,6 @@ "node_modules/@babel/generator": { "version": "7.25.6", "license": "MIT", - "peer": true, "dependencies": { "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", @@ -280,7 +279,6 @@ "node_modules/@babel/helper-module-imports": { "version": "7.24.7", "license": "MIT", - "peer": true, "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -403,7 +401,6 @@ "node_modules/@babel/template": { "version": "7.25.0", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/parser": "^7.25.0", @@ -416,7 +413,6 @@ "node_modules/@babel/traverse": { "version": "7.25.6", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/generator": "^7.25.6", @@ -433,7 +429,6 @@ "node_modules/@babel/traverse/node_modules/globals": { "version": "11.12.0", "license": "MIT", - "peer": true, "engines": { "node": ">=4" } @@ -666,13 +661,11 @@ }, "node_modules/@emotion/hash": { "version": "0.9.2", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/is-prop-valid": { "version": "1.3.0", "license": "MIT", - "peer": true, "dependencies": { "@emotion/memoize": "^0.9.0" } @@ -744,8 +737,7 @@ }, "node_modules/@emotion/unitless": { "version": "0.10.0", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@emotion/use-insertion-effect-with-fallbacks": { "version": "1.1.0", @@ -1224,6 +1216,7 @@ "node_modules/@mui/core-downloads-tracker": { "version": "5.16.7", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/mui-org" @@ -1295,6 +1288,7 @@ "node_modules/@mui/material": { "version": "5.16.7", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.23.9", "@mui/core-downloads-tracker": "^5.16.7", @@ -2523,8 +2517,7 @@ }, "node_modules/@types/parse-json": { "version": "4.0.2", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/@types/prop-types": { "version": "15.7.12", @@ -3947,7 +3940,6 @@ "node_modules/babel-plugin-macros": { "version": "3.1.0", "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.12.5", "cosmiconfig": "^7.0.0", @@ -5203,7 +5195,6 @@ "node_modules/cosmiconfig": { "version": "7.1.0", "license": "MIT", - "peer": true, "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -5218,7 +5209,6 @@ "node_modules/cosmiconfig/node_modules/parse-json": { "version": "5.2.0", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -6932,8 +6922,7 @@ }, "node_modules/find-root": { "version": "1.1.0", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", @@ -7706,15 +7695,13 @@ "node_modules/hoist-non-react-statics": { "version": "3.3.2", "license": "BSD-3-Clause", - "peer": true, "dependencies": { "react-is": "^16.7.0" } }, "node_modules/hoist-non-react-statics/node_modules/react-is": { "version": "16.13.1", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/hosted-git-info": { "version": "7.0.2", @@ -8896,7 +8883,6 @@ "node_modules/jsesc": { "version": "2.5.2", "license": "MIT", - "peer": true, "bin": { "jsesc": "bin/jsesc" }, @@ -16064,7 +16050,6 @@ "node_modules/yaml": { "version": "1.10.2", "license": "ISC", - "peer": true, "engines": { "node": ">= 6" } @@ -17777,12 +17762,14 @@ "packages/property-view": { "version": "0.1.1", "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", "@jsonforms/core": "3.3.0", "@jsonforms/material-renderers": "3.3.0", "@jsonforms/react": "3.3.0", "@mui/icons-material": "^5.15.19", "@mui/lab": "5.0.0-alpha.170", - "@mui/material": "^5.15.19", + "@mui/material": "^5.18.0", "@mui/x-date-pickers": "^6.x", "deep-equal": "^2.2.3", "property-view": "file:", @@ -17814,6 +17801,307 @@ "vitest": "^1.6.0" } }, + "packages/property-view/node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "packages/property-view/node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "packages/property-view/node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/property-view/node_modules/@emotion/react/node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "packages/property-view/node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "packages/property-view/node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/property-view/node_modules/@emotion/styled/node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "packages/property-view/node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "packages/property-view/node_modules/@mui/core-downloads-tracker": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz", + "integrity": "sha512-jbhwoQ1AY200PSSOrNXmrFCaSDSJWP7qk6urkTmIirvRXDROkqe+QwcLlUiw/PrREwsIF/vm3/dAXvjlMHF0RA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + } + }, + "packages/property-view/node_modules/@mui/material": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.18.0.tgz", + "integrity": "sha512-bbH/HaJZpFtXGvWg3TsBWG4eyt3gah3E7nCNU8GLyRjVoWcA91Vm/T+sjHfUcwgJSw9iLtucfHBoq+qW/T30aA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/core-downloads-tracker": "^5.18.0", + "@mui/system": "^5.18.0", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "@popperjs/core": "^2.11.8", + "@types/react-transition-group": "^4.4.10", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1", + "react-is": "^19.0.0", + "react-transition-group": "^4.4.5" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "packages/property-view/node_modules/@mui/material/node_modules/@mui/system": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/system/-/system-5.18.0.tgz", + "integrity": "sha512-ojZGVcRWqWhu557cdO3pWHloIGJdzVtxs3rk0F9L+x55LsUjcMUVkEhiF7E4TMxZoF9MmIHGGs0ZX3FDLAf0Xw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/private-theming": "^5.17.1", + "@mui/styled-engine": "^5.18.0", + "@mui/types": "~7.2.15", + "@mui/utils": "^5.17.1", + "clsx": "^2.1.0", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.5.0", + "@emotion/styled": "^11.3.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, + "packages/property-view/node_modules/@mui/material/node_modules/@mui/system/node_modules/@mui/private-theming": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/private-theming/-/private-theming-5.17.1.tgz", + "integrity": "sha512-XMxU0NTYcKqdsG8LRmSoxERPXwMbp16sIXPcLVgLGII/bVNagX0xaheWAwFv8+zDK7tI3ajllkuD3GZZE++ICQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/utils": "^5.17.1", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "packages/property-view/node_modules/@mui/material/node_modules/@mui/system/node_modules/@mui/styled-engine": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@mui/styled-engine/-/styled-engine-5.18.0.tgz", + "integrity": "sha512-BN/vKV/O6uaQh2z5rXV+MBlVrEkwoS/TK75rFQ2mjxA7+NBo8qtTAOA4UaM0XeJfn7kh2wZ+xQw2HAx0u+TiBg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@emotion/cache": "^11.13.5", + "@emotion/serialize": "^1.3.3", + "csstype": "^3.1.3", + "prop-types": "^15.8.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/react": "^11.4.1", + "@emotion/styled": "^11.3.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/react": { + "optional": true + }, + "@emotion/styled": { + "optional": true + } + } + }, + "packages/property-view/node_modules/@mui/material/node_modules/@mui/utils": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/@mui/utils/-/utils-5.17.1.tgz", + "integrity": "sha512-jEZ8FTqInt2WzxDV8bhImWBqeQRD99c/id/fq83H0ER9tFl+sfZlaAoCdznGvbSQQ9ividMxqSV2c7cC1vBcQg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.9", + "@mui/types": "~7.2.15", + "@types/prop-types": "^15.7.12", + "clsx": "^2.1.1", + "prop-types": "^15.8.1", + "react-is": "^19.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "packages/property-view/node_modules/@types/node": { "version": "20.16.3", "dev": true, @@ -18147,6 +18435,12 @@ "node": "*" } }, + "packages/property-view/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, "packages/property-view/node_modules/deep-eql": { "version": "4.1.4", "dev": true, @@ -18207,6 +18501,21 @@ "node": "*" } }, + "packages/property-view/node_modules/react-is": { + "version": "19.1.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", + "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", + "license": "MIT" + }, + "packages/property-view/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "packages/property-view/node_modules/type-detect": { "version": "4.1.0", "dev": true, diff --git a/packages/nmeta-vscode/spa.proxy.json b/packages/nmeta-vscode/spa.proxy.json new file mode 100644 index 0000000..3142ee7 --- /dev/null +++ b/packages/nmeta-vscode/spa.proxy.json @@ -0,0 +1,10 @@ +{ +"SpaProxyServer": { +"ServerUrl": "", +"RedirectUrl": "", +"LaunchCommand": "", +"WorkingDirectory": "C:\\Users\\Florian\\Documents\\Portfolio\\NMFCode.github.io\\src\\Glsp\\NMetaGlspEditor\\NMetaGlspEditor.Server", +"MaxTimeoutInSeconds": "120", +"KeepRunning": "false" +} +} diff --git a/packages/nmeta-vscode/src/nmeta-extension.ts b/packages/nmeta-vscode/src/nmeta-extension.ts index a49b070..e96c862 100644 --- a/packages/nmeta-vscode/src/nmeta-extension.ts +++ b/packages/nmeta-vscode/src/nmeta-extension.ts @@ -24,7 +24,7 @@ import { import * as process from 'process'; import * as vscode from 'vscode'; import NMetaEditorProvider from './nmeta-editor-provider'; -// import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; +import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; import path = require('path'); import { PropertyViewProvider } from './property-view-provider'; @@ -32,22 +32,22 @@ const DEFAULT_SERVER_PORT = '5052'; const DOTNET_EXECUTABLE = path.join(__dirname, '..', 'dist', 'NMetaGlspEditor.Server.exe'); export async function activate(context: vscode.ExtensionContext): Promise { - // const serverProcess = new DotnetGlspSocketServerLauncher({ - // executable: DOTNET_EXECUTABLE, - // socketConnectionOptions: { host: 'localhost', port: JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT) }, - // logging: true - // }); + const serverProcess = new DotnetGlspSocketServerLauncher({ + executable: DOTNET_EXECUTABLE, + socketConnectionOptions: { host: 'localhost', port: JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT) }, + logging: true + }); - // context.subscriptions.push(serverProcess); + context.subscriptions.push(serverProcess); - // await serverProcess.start(); + await serverProcess.start(); // Wrap server with quickstart component const nmetaServer = new SocketGlspVscodeServer({ clientId: 'vscode', clientName: 'vscode', connectionOptions: { - port: JSON.parse( process.env.GLSP_SERVER_PORT || DOTNET_EXECUTABLE || DEFAULT_SERVER_PORT), + port: JSON.parse( process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT), path: process.env.GLSP_WEBSOCKET_PATH } }); diff --git a/packages/property-view/package.json b/packages/property-view/package.json index 12f64d5..5bd764a 100644 --- a/packages/property-view/package.json +++ b/packages/property-view/package.json @@ -3,12 +3,14 @@ "version": "0.1.1", "private": true, "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.1", "@jsonforms/core": "3.3.0", "@jsonforms/material-renderers": "3.3.0", "@jsonforms/react": "3.3.0", "@mui/icons-material": "^5.15.19", "@mui/lab": "5.0.0-alpha.170", - "@mui/material": "^5.15.19", + "@mui/material": "^5.18.0", "@mui/x-date-pickers": "^6.x", "deep-equal": "^2.2.3", "property-view": "file:", diff --git a/packages/property-view/src/App.tsx b/packages/property-view/src/App.tsx index b2c72ad..eede285 100644 --- a/packages/property-view/src/App.tsx +++ b/packages/property-view/src/App.tsx @@ -1,6 +1,6 @@ import './App.css'; import { PropertyViewObject, PropViewClient } from 'property-views-client'; -import { BaseJsonrpcPropViewClient, PropViewWebSocketProvider, MultiTransportConnection } from 'property-views-client'; +import { BaseJsonrpcPropViewClient, PropViewWebSocketProvider } from 'property-views-client'; import { useEffect, useRef, useState } from 'react'; import { JsonForms } from '@jsonforms/react'; import { materialCells, materialRenderers } from '@jsonforms/material-renderers'; @@ -34,7 +34,7 @@ const App = () => { const propViewClient = useRef(null); // MultiTransportConnection erstellen - const multiConnRef = useRef(new MultiTransportConnection(console)); + // const multiConnRef = useRef(new MultiTransportConnection(console)); useEffect(() => { const wsProvider = new PropViewWebSocketProvider(webSocketUrl); @@ -45,7 +45,7 @@ const App = () => { onConnection: initialize, onReconnect: reconnect, logger: console - }, multiConnRef.current); + }); }, []); diff --git a/packages/property-view/vite.config.mts b/packages/property-view/vite.config.mts index 6a67ba7..983cda2 100644 --- a/packages/property-view/vite.config.mts +++ b/packages/property-view/vite.config.mts @@ -12,7 +12,6 @@ export default defineConfig({ assetFileNames: 'property.css', } }, - sourcemap: true, }, test: { environment: 'jsdom', From d9cdf1f4f92e4418438777dd73d18b1e42c6dbec Mon Sep 17 00:00:00 2001 From: flovancur Date: Sun, 7 Sep 2025 14:17:52 +0200 Subject: [PATCH 3/6] fixed webpack issues, changed json forms logic, changed themes, added further styles --- package-lock.json | 2911 ++++++++++++++--- packages/nmeta-vscode/package.json | 28 +- .../src/clientSelectionMapExtension.ts | 13 + .../nmeta-vscode/src/nmeta-editor-provider.ts | 4 + packages/nmeta-vscode/src/nmeta-extension.ts | 12 +- packages/nmeta-vscode/tsconfig.json | 76 +- packages/nmeta-vscode/webpack.config.js | 9 +- packages/property-view/package.json | 3 +- packages/property-view/src/App.css | 24 +- packages/property-view/src/App.tsx | 72 +- packages/property-view/src/main.tsx | 11 +- .../src/renderer/arraySelectControlTest.ts | 9 + .../src/renderer/arraySelectController.tsx | 39 + .../src/renderer/counterControl.tsx | 55 + .../src/renderer/counterControlTester.ts | 3 + .../src/renderer/selectControl.tsx | 39 + .../src/renderer/selectControlTester.ts | 8 + packages/property-view/src/renderer/tester.ts | 9 + .../src/renderer/textFieldControl.tsx | 27 + .../src/renderer/textFieldControlTester.ts | 9 + packages/property-view/src/theme.tsx | 64 + packages/property-view/vite.config.mts | 2 +- 22 files changed, 2803 insertions(+), 624 deletions(-) create mode 100644 packages/nmeta-vscode/src/clientSelectionMapExtension.ts create mode 100644 packages/property-view/src/renderer/arraySelectControlTest.ts create mode 100644 packages/property-view/src/renderer/arraySelectController.tsx create mode 100644 packages/property-view/src/renderer/counterControl.tsx create mode 100644 packages/property-view/src/renderer/counterControlTester.ts create mode 100644 packages/property-view/src/renderer/selectControl.tsx create mode 100644 packages/property-view/src/renderer/selectControlTester.ts create mode 100644 packages/property-view/src/renderer/tester.ts create mode 100644 packages/property-view/src/renderer/textFieldControl.tsx create mode 100644 packages/property-view/src/renderer/textFieldControlTester.ts create mode 100644 packages/property-view/src/theme.tsx diff --git a/package-lock.json b/package-lock.json index 7663442..4e37f26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -755,6 +755,380 @@ "version": "0.4.0", "license": "MIT" }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/win32-x64": { "version": "0.19.12", "cpu": [ @@ -2060,19 +2434,313 @@ "url": "https://opencollective.com/popperjs" } }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.18.0", + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.50.0.tgz", + "integrity": "sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==", "cpu": [ - "x64" + "arm" ], "dev": true, "license": "MIT", "optional": true, "os": [ - "win32" + "android" ] }, - "node_modules/@sideway/address": { + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.50.0.tgz", + "integrity": "sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.50.0.tgz", + "integrity": "sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.50.0.tgz", + "integrity": "sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.50.0.tgz", + "integrity": "sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.50.0.tgz", + "integrity": "sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.50.0.tgz", + "integrity": "sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.50.0.tgz", + "integrity": "sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.50.0.tgz", + "integrity": "sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.50.0.tgz", + "integrity": "sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.50.0.tgz", + "integrity": "sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.18.0.tgz", + "integrity": "sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.50.0.tgz", + "integrity": "sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.50.0.tgz", + "integrity": "sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.50.0.tgz", + "integrity": "sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.50.0.tgz", + "integrity": "sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.50.0.tgz", + "integrity": "sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.50.0.tgz", + "integrity": "sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.50.0.tgz", + "integrity": "sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.50.0.tgz", + "integrity": "sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.50.0.tgz", + "integrity": "sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.18.0", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sideway/address": { "version": "4.1.5", "dev": true, "license": "BSD-3-Clause", @@ -6354,424 +7022,798 @@ "@esbuild/win32-x64": "0.19.12" } }, - "node_modules/escalade": { - "version": "3.1.2", + "node_modules/esbuild/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/escape-goat": { - "version": "2.1.1", + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/eslint": { - "version": "8.56.0", + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/eslint-config-prettier": { - "version": "9.1.0", + "node_modules/esbuild/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/eslint-plugin-header": { - "version": "3.1.1", + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=7.7.0" + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/eslint-plugin-no-null": { - "version": "1.0.2", + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=5.0.0" - }, - "peerDependencies": { - "eslint": ">=3.0.0" + "node": ">=12" } }, - "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.2", + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=10" - }, - "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "node": ">=12" } }, - "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.11", + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "peerDependencies": { - "eslint": ">=7" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": ">=12" } }, - "node_modules/esquery": { - "version": "1.5.0", + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10" + "node": ">=12" } }, - "node_modules/esrecurse": { - "version": "4.3.0", + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/estraverse": { - "version": "5.3.0", + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4.0" + "node": ">=12" } }, - "node_modules/estree-walker": { - "version": "3.0.3", + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/esutils": { - "version": "2.0.3", + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/event-stream": { - "version": "3.3.4", + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "duplexer": "~0.1.1", - "from": "~0", - "map-stream": "~0.1.0", - "pause-stream": "0.0.11", - "split": "0.3", - "stream-combiner": "~0.0.4", - "through": "~2.3.1" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "devOptional": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/eventemitter2": { - "version": "6.4.7", + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "devOptional": true, - "license": "MIT" + "node_modules/escalade": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/events": { - "version": "3.3.0", - "devOptional": true, + "node_modules/escape-goat": { + "version": "2.1.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.x" + "node": ">=8" } }, - "node_modules/execa": { - "version": "8.0.1", + "node_modules/escape-string-regexp": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, "engines": { - "node": ">=16.17" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/execall": { - "version": "1.0.0", + "node_modules/eslint": { + "version": "8.56.0", "dev": true, "license": "MIT", "dependencies": { - "clone-regexp": "^1.0.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=0.10.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/executable": { - "version": "4.1.1", + "node_modules/eslint-config-prettier": { + "version": "9.1.0", "dev": true, "license": "MIT", - "dependencies": { - "pify": "^2.2.0" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "engines": { - "node": ">=4" + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/executable/node_modules/pify": { - "version": "2.3.0", + "node_modules/eslint-plugin-header": { + "version": "3.1.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "peerDependencies": { + "eslint": ">=7.7.0" } }, - "node_modules/exit-hook": { - "version": "1.1.1", + "node_modules/eslint-plugin-no-null": { + "version": "1.0.2", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=5.0.0" + }, + "peerDependencies": { + "eslint": ">=3.0.0" } }, - "node_modules/expand-template": { - "version": "2.0.3", + "node_modules/eslint-plugin-react-hooks": { + "version": "4.6.2", "dev": true, - "license": "(MIT OR WTFPL)", - "optional": true, + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", - "devOptional": true, - "license": "Apache-2.0" - }, - "node_modules/extend": { - "version": "3.0.2", + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.11", "dev": true, - "license": "MIT" - }, - "node_modules/external-editor": { - "version": "3.1.0", - "devOptional": true, "license": "MIT", + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=4" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "devOptional": true, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/extract-zip": { - "version": "2.0.1", + "node_modules/espree": { + "version": "9.6.1", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": ">= 10.17.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/extract-zip/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/esquery": { + "version": "1.5.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "pump": "^3.0.0" + "estraverse": "^5.1.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10" } }, - "node_modules/extsprintf": { - "version": "1.3.0", + "node_modules/esrecurse": { + "version": "4.3.0", "dev": true, - "engines": [ - "node >=0.6.0" - ], + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/event-stream": { + "version": "3.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", + "pause-stream": "0.0.11", + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter2": { + "version": "6.4.7", + "dev": true, + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "devOptional": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "8.0.1", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execall": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-regexp": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/executable": { + "version": "4.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^2.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/executable/node_modules/pify": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/exit-hook": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "dev": true, + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "devOptional": true, + "license": "Apache-2.0" + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "devOptional": true, + "license": "MIT", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "devOptional": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/extract-zip/node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -7125,6 +8167,21 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/fullname": { "version": "4.0.1", "dev": true, @@ -10157,7 +11214,9 @@ "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "devOptional": true, "license": "MIT", "engines": { @@ -11529,7 +12588,9 @@ "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "license": "ISC" }, "node_modules/picomatch": { @@ -11983,7 +13044,9 @@ } }, "node_modules/qs": { - "version": "6.12.1", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -12652,32 +13715,228 @@ "fsevents": "~2.3.2" } }, - "node_modules/root-check": { - "version": "1.0.0", + "node_modules/rollup/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.18.0.tgz", + "integrity": "sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "downgrade-root": "^1.0.0", - "sudo-block": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true, + "os": [ + "android" + ] }, - "node_modules/rrweb-cssom": { - "version": "0.7.1", + "node_modules/rollup/node_modules/@rollup/rollup-android-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.18.0.tgz", + "integrity": "sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT" - }, - "node_modules/run-async": { - "version": "3.0.0", - "devOptional": true, "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.18.0.tgz", + "integrity": "sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.18.0.tgz", + "integrity": "sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.18.0.tgz", + "integrity": "sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.18.0.tgz", + "integrity": "sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.18.0.tgz", + "integrity": "sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.18.0.tgz", + "integrity": "sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.18.0.tgz", + "integrity": "sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.18.0.tgz", + "integrity": "sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.18.0.tgz", + "integrity": "sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.18.0.tgz", + "integrity": "sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.18.0.tgz", + "integrity": "sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.18.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.18.0.tgz", + "integrity": "sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/root-check": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "downgrade-root": "^1.0.0", + "sudo-block": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/run-async": { + "version": "3.0.0", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { "version": "1.2.0", "funding": [ { @@ -12926,9 +14185,14 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -13822,6 +15086,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "dev": true, @@ -14927,306 +16200,680 @@ "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" + } + }, + "node_modules/update-notifier/node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/update-notifier/node_modules/normalize-url": { + "version": "4.5.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/p-cancelable": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/update-notifier/node_modules/package-json": { + "version": "6.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/package-json/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/update-notifier/node_modules/registry-auth-token": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/update-notifier/node_modules/registry-url": { + "version": "5.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/responselike": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "4.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/user-home": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "os-homedir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/utf-8-validate": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.5.tgz", + "integrity": "sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "devOptional": true, + "license": "MIT" + }, + "node_modules/uuid": { + "version": "7.0.3", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "devOptional": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/vinyl": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-file": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "@types/vinyl": "^2.0.7", + "strip-bom-buf": "^3.0.1", + "strip-bom-stream": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/vite": { + "version": "5.2.12", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.20.1", + "postcss": "^8.4.38", + "rollup": "^4.13.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/mimic-response": { - "version": "1.0.1", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/normalize-url": { - "version": "4.5.1", + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/p-cancelable": { - "version": "1.1.0", + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/package-json": { - "version": "6.5.0", + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/package-json/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/registry-auth-token": { - "version": "4.2.2", + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], "dev": true, "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/registry-url": { - "version": "5.1.0", + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/update-notifier/node_modules/responselike": { - "version": "1.0.2", + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-join": { - "version": "4.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/url-parse": { - "version": "1.5.10", + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], "dev": true, "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], "dev": true, "license": "MIT", - "dependencies": { - "prepend-http": "^2.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/user-home": { - "version": "2.0.0", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], "dev": true, "license": "MIT", - "dependencies": { - "os-homedir": "^1.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/utf-8-validate": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-6.0.5.tgz", - "integrity": "sha512-EYZR+OpIXp9Y1eG1iueg8KRsY8TuT8VNgnanZ0uA3STqhHQTLwbl+WX76/9X5OY12yQubymBpaBSmMPkSTQcKA==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], "dev": true, - "hasInstallScript": true, "license": "MIT", "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, + "os": [ + "linux" + ], "engines": { - "node": ">=6.14.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/uuid": { - "version": "7.0.3", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "node": ">=12" } }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node": ">=12" } }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "devOptional": true, - "license": "ISC", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/verror/node_modules/core-util-is": { - "version": "1.0.2", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], "dev": true, - "license": "MIT" - }, - "node_modules/vinyl": { - "version": "3.0.0", "license": "MIT", - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=10.13.0" + "node": ">=12" } }, - "node_modules/vinyl-file": { - "version": "5.0.0", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, "license": "MIT", - "dependencies": { - "@types/vinyl": "^2.0.7", - "strip-bom-buf": "^3.0.1", - "strip-bom-stream": "^5.0.0", - "vinyl": "^3.0.0" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.2.12", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-node": { - "version": "1.5.3", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], "dev": true, "license": "MIT", - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=12" } }, "node_modules/vite/node_modules/@esbuild/win32-x64": { @@ -15542,6 +17189,8 @@ }, "node_modules/webpack-cli": { "version": "5.1.4", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", + "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, "license": "MIT", "dependencies": { @@ -17745,6 +19394,9 @@ "packages/nmeta-vscode": { "version": "0.1.0", "license": "BSD-3-Clause", + "dependencies": { + "symbol-observable": "^4.0.0" + }, "devDependencies": { "@eclipse-glsp/vscode-integration": "2.1.1", "@vscode/vsce": "^2.19.0", @@ -17776,6 +19428,7 @@ "property-views-client": "^0.0.1-beta", "react": "^18.3.1", "react-dom": "^18.3.1", + "symbol-observable": "^4.0.0", "vscode-jsonrpc": "^8.2.1", "yarn": "^1.22.22" }, @@ -17797,7 +19450,7 @@ "prettier": "^3.3.1", "start-server-and-test": "^2.0.4", "typescript": "~5.4.5", - "vite": "^5.1.0", + "vite": "^5.4.19", "vitest": "^1.6.0" } }, @@ -17917,6 +19570,23 @@ "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", "license": "MIT" }, + "packages/property-view/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "packages/property-view/node_modules/@mui/core-downloads-tracker": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@mui/core-downloads-tracker/-/core-downloads-tracker-5.18.0.tgz", @@ -18102,6 +19772,27 @@ } } }, + "packages/property-view/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.50.0.tgz", + "integrity": "sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "packages/property-view/node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, "packages/property-view/node_modules/@types/node": { "version": "20.16.3", "dev": true, @@ -18452,6 +20143,45 @@ "node": ">=6" } }, + "packages/property-view/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, "packages/property-view/node_modules/istanbul-lib-source-maps": { "version": "5.0.6", "dev": true, @@ -18479,6 +20209,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "packages/property-view/node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "packages/property-view/node_modules/p-limit": { "version": "5.0.0", "dev": true, @@ -18501,12 +20250,82 @@ "node": "*" } }, + "packages/property-view/node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, "packages/property-view/node_modules/react-is": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.1.1.tgz", "integrity": "sha512-tr41fA15Vn8p4X9ntI+yCyeGSf1TlYaY5vlTZfQmeLBrFo3psOPX6HhTDnFNL9uj3EhP0KAQ80cugCl4b4BERA==", "license": "MIT" }, + "packages/property-view/node_modules/rollup": { + "version": "4.50.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.50.0.tgz", + "integrity": "sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.50.0", + "@rollup/rollup-android-arm64": "4.50.0", + "@rollup/rollup-darwin-arm64": "4.50.0", + "@rollup/rollup-darwin-x64": "4.50.0", + "@rollup/rollup-freebsd-arm64": "4.50.0", + "@rollup/rollup-freebsd-x64": "4.50.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.50.0", + "@rollup/rollup-linux-arm-musleabihf": "4.50.0", + "@rollup/rollup-linux-arm64-gnu": "4.50.0", + "@rollup/rollup-linux-arm64-musl": "4.50.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.50.0", + "@rollup/rollup-linux-ppc64-gnu": "4.50.0", + "@rollup/rollup-linux-riscv64-gnu": "4.50.0", + "@rollup/rollup-linux-riscv64-musl": "4.50.0", + "@rollup/rollup-linux-s390x-gnu": "4.50.0", + "@rollup/rollup-linux-x64-gnu": "4.50.0", + "@rollup/rollup-linux-x64-musl": "4.50.0", + "@rollup/rollup-openharmony-arm64": "4.50.0", + "@rollup/rollup-win32-arm64-msvc": "4.50.0", + "@rollup/rollup-win32-ia32-msvc": "4.50.0", + "@rollup/rollup-win32-x64-msvc": "4.50.0", + "fsevents": "~2.3.2" + } + }, "packages/property-view/node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -18516,6 +20335,16 @@ "node": ">=0.10.0" } }, + "packages/property-view/node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "packages/property-view/node_modules/type-detect": { "version": "4.1.0", "dev": true, @@ -18536,6 +20365,66 @@ "node": ">=14.17" } }, + "packages/property-view/node_modules/vite": { + "version": "5.4.19", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.19.tgz", + "integrity": "sha512-qO3aKv3HoQC8QKiNSTuUM1l9o/XX3+c+VTgLHbJWHZGeTPVAg2XwazI9UWzoxjIJCGCV2zU60uqMzjeLZuULqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, "packages/property-view/node_modules/vite-node": { "version": "1.6.0", "dev": true, diff --git a/packages/nmeta-vscode/package.json b/packages/nmeta-vscode/package.json index 3c349fd..ef2e336 100644 --- a/packages/nmeta-vscode/package.json +++ b/packages/nmeta-vscode/package.json @@ -180,22 +180,23 @@ } ], "viewsContainers": { - "panel": [ + "panel": [ { - "id": "propertyPanel", - "title": "PropertyPanel", - "icon": "images/edit.min.svg" + "id": "propertyPanel", + "title": "PropertyPanel", + "icon": "images/edit.min.svg" } - ] + ] }, "views": { - "propertyPanel": [ - { - "type": "webview", - "id": "nmeta.propertyView", - "name": "Propertieeeees", - "contextualTitle": "Properties View" } - ] + "propertyPanel": [ + { + "type": "webview", + "id": "nmeta.propertyView", + "name": "Properties", + "contextualTitle": "Properties View" + } + ] } }, "activationEvents": [ @@ -226,5 +227,8 @@ "author": { "name": ".Net Modeling Framework", "url": "https://nmfcode.github.io/NMFdocs/index.html" + }, + "dependencies": { + "symbol-observable": "^4.0.0" } } diff --git a/packages/nmeta-vscode/src/clientSelectionMapExtension.ts b/packages/nmeta-vscode/src/clientSelectionMapExtension.ts new file mode 100644 index 0000000..48f76f3 --- /dev/null +++ b/packages/nmeta-vscode/src/clientSelectionMapExtension.ts @@ -0,0 +1,13 @@ +import { GlspVscodeConnector } from "@eclipse-glsp/vscode-integration"; +import { SelectionState } from "@eclipse-glsp/vscode-integration"; + +export class ExtendedGlspVsCodeConnector extends GlspVscodeConnector{ + public getClientID(state: SelectionState): string { + for (const [key, value] of this.clientSelectionMap.entries()) { + if (value === state) { + return key; + } + } + return ''; + } +} diff --git a/packages/nmeta-vscode/src/nmeta-editor-provider.ts b/packages/nmeta-vscode/src/nmeta-editor-provider.ts index 845b083..f7e1712 100644 --- a/packages/nmeta-vscode/src/nmeta-editor-provider.ts +++ b/packages/nmeta-vscode/src/nmeta-editor-provider.ts @@ -1,9 +1,13 @@ import { GlspEditorProvider, GlspVscodeConnector } from '@eclipse-glsp/vscode-integration'; import * as vscode from 'vscode'; +declare interface SymbolConstructor { + readonly observable: symbol; +} export default class NMetaEditorProvider extends GlspEditorProvider { diagramType = 'nmeta'; + constructor( protected readonly extensionContext: vscode.ExtensionContext, protected override readonly glspVscodeConnector: GlspVscodeConnector diff --git a/packages/nmeta-vscode/src/nmeta-extension.ts b/packages/nmeta-vscode/src/nmeta-extension.ts index e96c862..a97844f 100644 --- a/packages/nmeta-vscode/src/nmeta-extension.ts +++ b/packages/nmeta-vscode/src/nmeta-extension.ts @@ -14,9 +14,8 @@ * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 ********************************************************************************/ import 'reflect-metadata'; - +import 'symbol-observable'; import { - GlspVscodeConnector, SelectAction, SocketGlspVscodeServer, configureDefaultCommands @@ -27,6 +26,7 @@ import NMetaEditorProvider from './nmeta-editor-provider'; import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; import path = require('path'); import { PropertyViewProvider } from './property-view-provider'; +import { ExtendedGlspVsCodeConnector } from './clientSelectionMapExtension'; const DEFAULT_SERVER_PORT = '5052'; const DOTNET_EXECUTABLE = path.join(__dirname, '..', 'dist', 'NMetaGlspEditor.Server.exe'); @@ -47,22 +47,24 @@ export async function activate(context: vscode.ExtensionContext): Promise clientId: 'vscode', clientName: 'vscode', connectionOptions: { - port: JSON.parse( process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT), + // serverProcess.getPort() || + port: JSON.parse( process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT), path: process.env.GLSP_WEBSOCKET_PATH } }); // Initialize GLSP-VSCode connector with server wrapper - const glspVscodeConnector = new GlspVscodeConnector({ + const glspVscodeConnector = new ExtendedGlspVsCodeConnector({ server: nmetaServer, logging: true }); + glspVscodeConnector.onSelectionUpdate(e => { nmetaServer.glspClient.then(client => { var action = SelectAction.create(e); - client.sendActionMessage({ clientId: 'nmeta_0', action }); + client.sendActionMessage({ clientId: glspVscodeConnector.getClientID(e), action }); }); }); diff --git a/packages/nmeta-vscode/tsconfig.json b/packages/nmeta-vscode/tsconfig.json index b3903c7..856ab6d 100644 --- a/packages/nmeta-vscode/tsconfig.json +++ b/packages/nmeta-vscode/tsconfig.json @@ -1,38 +1,38 @@ -{ - "$schema": "https://json.schemastore.org/tsconfig", - "compilerOptions": { - "outDir": "lib", - "declaration": true, - "declarationMap": true, - "noImplicitAny": true, - "noImplicitThis": true, - "strictNullChecks": true, - "noImplicitOverride": true, - "noEmitOnError": false, - "noUnusedLocals": true, - "noImplicitReturns": true, - "strict": true, - "incremental": true, - // Needs to be disabled to support property injection - "strictPropertyInitialization": false, - "experimentalDecorators": true, - "emitDecoratorMetadata": true, - "downlevelIteration": true, - "resolveJsonModule": true, - "module": "commonjs", - "moduleResolution": "Node", - "target": "ES2017", - "jsx": "react", - "lib": ["ES2017", "DOM"], - "sourceMap": true, - "types": ["node", "reflect-metadata"] - }, - "include": [ - "src/**/*.ts", - "src/**/*.tsx" - ], - "exclude": [ - "lib/**/*", - "node_modules/**/*" - ] -} \ No newline at end of file +{ + "$schema": "https://json.schemastore.org/tsconfig", + "compilerOptions": { + "outDir": "lib", + "declaration": true, + "declarationMap": true, + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "noImplicitOverride": true, + "noEmitOnError": false, + "noUnusedLocals": true, + "noImplicitReturns": true, + "strict": true, + "incremental": true, + // Needs to be disabled to support property injection + "strictPropertyInitialization": false, + "experimentalDecorators": true, + "emitDecoratorMetadata": true, + "downlevelIteration": true, + "resolveJsonModule": true, + "module": "commonjs", + "moduleResolution": "Node", + "target": "ES2017", + "jsx": "react", + "lib": ["ES2017", "DOM"], + "sourceMap": true, + "types": ["node", "reflect-metadata"] + }, + "include": [ + "src/**/*.ts", + "src/**/*.tsx" +, "../property-view/src/classControl.ts", "../property-view/src/renderer/textFieldControlTester.ts", "../property-view/src/class.ts" ], + "exclude": [ + "lib/**/*", + "node_modules/**/*" + ] +} diff --git a/packages/nmeta-vscode/webpack.config.js b/packages/nmeta-vscode/webpack.config.js index 41506ec..03ac6aa 100644 --- a/packages/nmeta-vscode/webpack.config.js +++ b/packages/nmeta-vscode/webpack.config.js @@ -42,16 +42,11 @@ const config = { { from: path.resolve(__dirname, 'dist', 'NMetaGlspEditor.Server.exe') }, + { from: path.resolve(__dirname, 'dist','property.js')}, { from: path.resolve(__dirname, '..', 'nmeta-glsp-webview', 'dist', 'nmetaWebview.js') }, - { - from: path.resolve(__dirname, '..', 'property-view', 'dist', 'property-view') - }, - { - from: path.resolve(__dirname, '..', 'property-view', 'dist', 'index.html'), - to: path.resolve(__dirname, '..', 'dist', 'property-view') - } + ] }) ], diff --git a/packages/property-view/package.json b/packages/property-view/package.json index 5bd764a..70037c9 100644 --- a/packages/property-view/package.json +++ b/packages/property-view/package.json @@ -17,6 +17,7 @@ "property-views-client": "^0.0.1-beta", "react": "^18.3.1", "react-dom": "^18.3.1", + "symbol-observable": "^4.0.0", "vscode-jsonrpc": "^8.2.1", "yarn": "^1.22.22" }, @@ -38,7 +39,7 @@ "prettier": "^3.3.1", "start-server-and-test": "^2.0.4", "typescript": "~5.4.5", - "vite": "^5.1.0", + "vite": "^5.4.19", "vitest": "^1.6.0" }, "scripts": { diff --git a/packages/property-view/src/App.css b/packages/property-view/src/App.css index 3f6cf84..46b76b9 100644 --- a/packages/property-view/src/App.css +++ b/packages/property-view/src/App.css @@ -1,22 +1,22 @@ -html,header, body.vscode-dark { - font-size: 16px; - background-color: var(--vscode-editor-background); +html,header, body { +margin: 0; + padding: 0; + width: 100%; + height: 100%; + background-color: var(--vscode-editor-background); } .App { - - text-align: center; - margin-bottom: 0.5em; -} - -.App-logo { - animation: App-logo-spin infinite 20s linear; - height: 80px; + width: 100%; + text-align: center; + margin-bottom: 0.5em; + background-color: var(--vscode-editor-background); } .App-header { background-color: #222; - padding: 20px; + padding-top: 20px; + padding-bottom: 20px; color: white; } diff --git a/packages/property-view/src/App.tsx b/packages/property-view/src/App.tsx index eede285..57de757 100644 --- a/packages/property-view/src/App.tsx +++ b/packages/property-view/src/App.tsx @@ -7,27 +7,44 @@ import { materialCells, materialRenderers } from '@jsonforms/material-renderers' import type { MessageConnection } from 'vscode-jsonrpc'; import { Grid, Typography } from '@mui/material'; import deepEqual from 'deep-equal'; +import classControlTester from './renderer/textFieldControlTester'; +import classControl from './renderer/textFieldControl'; +import selectControlTester from './renderer/selectControlTester'; +import selectControl from './renderer/selectControl'; +import counterControlTester from './renderer/counterControlTester'; +import counterControl from './renderer/counterControl'; +import arraySelectControlTest from './renderer/arraySelectControlTest'; +import arraySelectController from './renderer/arraySelectController'; + const port = 5052; const id = 'prop'; const webSocketUrl = `ws://localhost:${port}/${id}`; -const classes = { - +const classes = { container: { - padding: '1em', width: '100%', backgroundColor: 'var(--vscode-editor-background)', + color: 'var(--vscode-editor-foreground)', }, dataContent: { + width: '100%', display: 'flex', justifyContent: 'center', - borderRadius: '0.25em', marginBottom: '1rem', - backgroundColor: 'white', + backgroundColor: 'var(--vscode-editor-background)', + color: 'var(--vscode-editor-foreground)', } }; +const renderers = [ + ...materialRenderers, + {tester: arraySelectControlTest, renderer: arraySelectController}, + {tester: classControlTester, renderer: classControl}, + {tester: selectControlTester, renderer: selectControl}, + {tester: counterControlTester, renderer: counterControl}, +] + const App = () => { const [data, setData] = useState([]); const updating = useRef(false); @@ -116,29 +133,28 @@ const App = () => { } const forms = Array.isArray(data) ? data.map((po) => ( - - - {po.identifier} - - sendUpdate(po, updated.data)} - /> - - )) : null; + + + {po.identifier} + + sendUpdate(po, updated.data)} + /> + + )) :
; return {forms}; }; diff --git a/packages/property-view/src/main.tsx b/packages/property-view/src/main.tsx index 53ffc48..f678921 100644 --- a/packages/property-view/src/main.tsx +++ b/packages/property-view/src/main.tsx @@ -1,20 +1,13 @@ import { createTheme, CssBaseline, ThemeProvider } from '@mui/material'; import { createRoot } from 'react-dom/client'; import App from './App'; +import { theme } from './theme'; import { StrictMode } from 'react'; /** * Customize form so each control has more space */ -const theme = createTheme({ - components: { - MuiFormControl: { - styleOverrides: { - - }, - }, - }, -}); + const rootEl = document.getElementById('root'); diff --git a/packages/property-view/src/renderer/arraySelectControlTest.ts b/packages/property-view/src/renderer/arraySelectControlTest.ts new file mode 100644 index 0000000..7dca27a --- /dev/null +++ b/packages/property-view/src/renderer/arraySelectControlTest.ts @@ -0,0 +1,9 @@ +import type { JsonSchema} from '@jsonforms/core'; +import { rankWith, schemaMatches } from '@jsonforms/core'; + +const isStringEnumSchema = (schema: JsonSchema) => { + return !Array.isArray(schema.enum) && Array.isArray(schema.oneOf); + +}; + +export default rankWith(9, schemaMatches(isStringEnumSchema)); diff --git a/packages/property-view/src/renderer/arraySelectController.tsx b/packages/property-view/src/renderer/arraySelectController.tsx new file mode 100644 index 0000000..e81197d --- /dev/null +++ b/packages/property-view/src/renderer/arraySelectController.tsx @@ -0,0 +1,39 @@ +import { JsonSchema } from '@jsonforms/core'; +import { withJsonFormsControlProps } from '@jsonforms/react'; +import { FormControl, InputLabel, MenuItem, Select, TextField } from '@mui/material'; + +interface ArraySelectControlProps { + data: any; + handleChange(path: string, value: any): void; + path: string; + schema: JsonSchema +} + +const ArraySelectControl = ({ data, handleChange, path, schema}: ArraySelectControlProps)=>{ + const value = data || ''; + + const enumOptions = schema?.oneOf ?? []; + + return ( + + {path} + + + ); +}; + +export default withJsonFormsControlProps(ArraySelectControl); diff --git a/packages/property-view/src/renderer/counterControl.tsx b/packages/property-view/src/renderer/counterControl.tsx new file mode 100644 index 0000000..5d8088a --- /dev/null +++ b/packages/property-view/src/renderer/counterControl.tsx @@ -0,0 +1,55 @@ +import { JsonSchema } from "@jsonforms/core"; +import { Stack, IconButton, TextField } from "@mui/material"; +import AddIcon from "@mui/icons-material/Add"; +import RemoveIcon from "@mui/icons-material/Remove"; +import { withJsonFormsControlProps } from "@jsonforms/react"; + +interface CounterControlProps { + data: any; + handleChange(path: string, value: any): void; + path: string; + schema: JsonSchema +} + + +const INT32_MIN = -2147483648; +const INT32_MAX = 2147483647; + +const clampToInt32 = (value: number) => { + return Math.max(INT32_MIN, Math.min(INT32_MAX, Math.floor(value))); +}; + +const CounterControl = ({ data, handleChange, path, schema}: CounterControlProps)=>{ + + const value = schema?.default|| 0; + + + + const increment = () => { + const newValue = value+1; + handleChange(path, clampToInt32(newValue)); + } + const decrement = () => { + const newValue = value-1; + handleChange(path, clampToInt32(newValue)); + } + + return( + + + + + + + + + + ) +} + + +export default withJsonFormsControlProps(CounterControl); diff --git a/packages/property-view/src/renderer/counterControlTester.ts b/packages/property-view/src/renderer/counterControlTester.ts new file mode 100644 index 0000000..50a274e --- /dev/null +++ b/packages/property-view/src/renderer/counterControlTester.ts @@ -0,0 +1,3 @@ +import { rankWith, schemaTypeIs } from '@jsonforms/core'; + +export default rankWith(3, schemaTypeIs('number')); diff --git a/packages/property-view/src/renderer/selectControl.tsx b/packages/property-view/src/renderer/selectControl.tsx new file mode 100644 index 0000000..1ab8585 --- /dev/null +++ b/packages/property-view/src/renderer/selectControl.tsx @@ -0,0 +1,39 @@ +import { JsonSchema } from '@jsonforms/core'; +import { withJsonFormsControlProps } from '@jsonforms/react'; +import { FormControl, InputLabel, MenuItem, Select, TextField } from '@mui/material'; + +interface SelectControlProps { + data: any; + handleChange(path: string, value: any): void; + path: string; + schema: JsonSchema +} + +const SelectControl = ({ data, handleChange, path, schema}: SelectControlProps)=>{ + const value = data || ''; + + const enumOptions = schema?.enum ?? schema?.oneOf ?? []; + + return ( + + {path} + + + ); +}; + +export default withJsonFormsControlProps(SelectControl); diff --git a/packages/property-view/src/renderer/selectControlTester.ts b/packages/property-view/src/renderer/selectControlTester.ts new file mode 100644 index 0000000..4951444 --- /dev/null +++ b/packages/property-view/src/renderer/selectControlTester.ts @@ -0,0 +1,8 @@ +import type { JsonSchema} from '@jsonforms/core'; +import { rankWith, schemaMatches } from '@jsonforms/core'; + +export const isStringEnumSchema = (schema: JsonSchema) => { + return schema.type === 'string' && (Array.isArray(schema.oneOf) || Array.isArray(schema.enum)); +}; + +export default rankWith(3, schemaMatches(isStringEnumSchema)); diff --git a/packages/property-view/src/renderer/tester.ts b/packages/property-view/src/renderer/tester.ts new file mode 100644 index 0000000..cfeee09 --- /dev/null +++ b/packages/property-view/src/renderer/tester.ts @@ -0,0 +1,9 @@ +import type { JsonSchema} from '@jsonforms/core'; +import { rankWith, schemaMatches } from '@jsonforms/core'; + +export const isStringEnumSchema = (schema: JsonSchema) => { + return schema.type === 'string' && !Array.isArray(schema.enum) && Array.isArray(schema.oneOf); + +}; + +export default rankWith(3, schemaMatches(isStringEnumSchema)); diff --git a/packages/property-view/src/renderer/textFieldControl.tsx b/packages/property-view/src/renderer/textFieldControl.tsx new file mode 100644 index 0000000..b898489 --- /dev/null +++ b/packages/property-view/src/renderer/textFieldControl.tsx @@ -0,0 +1,27 @@ +import { withJsonFormsControlProps } from '@jsonforms/react'; +import { BorderColor } from '@mui/icons-material'; +import { TextField } from '@mui/material'; +import React from 'react'; + +interface TextFieldControlProps { + data: any; + handleChange(path: string, value: any): void; + path: string; +} + +const TextFieldControl = ({ data, handleChange, path }: TextFieldControlProps)=>{ + const [value, setValue] = React.useState(data); + + return ( +
{ + e.preventDefault() + handleChange(path, value); + } + }> + handleChange(path, value) } onChange={(e) => setValue(e.target.value)} + variant="outlined"/> + +); +}; + +export default withJsonFormsControlProps(TextFieldControl); diff --git a/packages/property-view/src/renderer/textFieldControlTester.ts b/packages/property-view/src/renderer/textFieldControlTester.ts new file mode 100644 index 0000000..a4c9d05 --- /dev/null +++ b/packages/property-view/src/renderer/textFieldControlTester.ts @@ -0,0 +1,9 @@ +import type { JsonSchema} from '@jsonforms/core'; +import { rankWith, schemaMatches } from '@jsonforms/core'; + +export const isStringNotEnumSchema = (schema: JsonSchema) => { + return schema.type === 'string' && !Array.isArray(schema.enum) && !Array.isArray(schema.oneOf); +}; + +export default rankWith(10, schemaMatches(isStringNotEnumSchema)); + diff --git a/packages/property-view/src/theme.tsx b/packages/property-view/src/theme.tsx new file mode 100644 index 0000000..c86ec5c --- /dev/null +++ b/packages/property-view/src/theme.tsx @@ -0,0 +1,64 @@ +import { createTheme } from "@mui/material"; + +export const theme = createTheme({ + components: { + MuiFormControl: { + styleOverrides: { + root: { + color: 'var(--vscode-editor-foreground)', + marginTop: '0.5em', + marginBottom: '0.5em', + }, + }, + }, + MuiFormHelperText:{ + styleOverrides: { + root: { + height: '1em', + color: 'var(--vscode-editor-foreground)', + } + } + }, + MuiInputLabel: { + styleOverrides: { + root: { + color: 'var(--vscode-activityBar-border)', + } + } + }, + MuiTextField: { + defaultProps: { + variant: 'outlined', + size: 'small' + }, + + styleOverrides: { + root: { + color: 'var(--vscode-editor-foreground)', + backgroundColor: 'var(--vscode-editor-background)', + borderRadius: '4px',} + }, + }, + MuiInputBase: { + styleOverrides: { + root: { + color: 'var(--vscode-editor-foreground)', + } + } + }, + MuiOutlinedInput: { + styleOverrides: { + root: { + '& fieldset': { + borderColor: 'var(--vscode-editor-foreground)', + }, + '&.Mui-focused .MuiOutlinedInput-notchedOutline':{ + borderColor:'var(--vscode-editorWarning-foreground)' + } + + } + } + } + } + } +); diff --git a/packages/property-view/vite.config.mts b/packages/property-view/vite.config.mts index 983cda2..35d40ee 100644 --- a/packages/property-view/vite.config.mts +++ b/packages/property-view/vite.config.mts @@ -10,7 +10,7 @@ export default defineConfig({ output: { entryFileNames: 'property.js', assetFileNames: 'property.css', - } + }, }, }, test: { From b9b31335432df9209b9b7dc42f3f0a931bf71bc9 Mon Sep 17 00:00:00 2001 From: flovancur Date: Mon, 15 Sep 2025 08:47:11 +0200 Subject: [PATCH 4/6] added JsonFormsControlls and added Layout --- .vscode/launch.json | 18 -- example/workspace/bla.layout.xmi | 7 + example/workspace/bla.nmeta | 4 + example/workspace/example.nmeta | 22 +- example/workspace/test.layout.xmi | 15 ++ example/workspace/test.nmeta | 1 + packages/nmeta-glsp-client/css/diagram.css | 209 +++++++++--------- .../nmeta-glsp-client/src/diagram-module.ts | 2 - packages/nmeta-vscode/src/nmeta-extension.ts | 20 +- packages/property-view/src/App.css | 9 +- packages/property-view/src/App.tsx | 28 ++- .../src/renderer/arraySelectControlTest.ts | 2 +- .../src/renderer/arraySelectController.tsx | 8 +- .../src/renderer/baseTypeControl.tsx | 25 +++ .../src/renderer/baseTypeControlTester.ts | 3 + .../src/renderer/boolControl.tsx | 21 ++ .../src/renderer/boolControlTester.ts | 3 + .../src/renderer/counterControl.tsx | 14 +- .../src/renderer/selectControl.tsx | 9 +- .../src/renderer/selectControlTester.ts | 2 +- packages/property-view/src/renderer/tester.ts | 9 - .../src/renderer/textFieldControl.tsx | 6 +- packages/property-view/src/theme.tsx | 82 ++++--- 23 files changed, 305 insertions(+), 214 deletions(-) create mode 100644 example/workspace/bla.layout.xmi create mode 100644 example/workspace/bla.nmeta create mode 100644 example/workspace/test.layout.xmi create mode 100644 packages/property-view/src/renderer/baseTypeControl.tsx create mode 100644 packages/property-view/src/renderer/baseTypeControlTester.ts create mode 100644 packages/property-view/src/renderer/boolControl.tsx create mode 100644 packages/property-view/src/renderer/boolControlTester.ts delete mode 100644 packages/property-view/src/renderer/tester.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index e2772a2..c5a68be 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -4,24 +4,6 @@ // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ - { - "name": "Debug Vite Dev Server", - "type": "pwa-node", - "request": "launch", - "runtimeExecutable": "yarn", - "runtimeArgs": ["dev"], - "port": 9229, - "console": "integratedTerminal", - "cwd": "${workspaceFolder}/packages/property-view/src", - "sourceMaps": true - }, - { - "name": "Debug in Browser", - "type": "pwa-chrome", - "request": "launch", - "url": "http://localhost:3000", - "webRoot": "${workspaceFolder}/src" - }, { "name": "Run NMeta Extension", "type": "extensionHost", diff --git a/example/workspace/bla.layout.xmi b/example/workspace/bla.layout.xmi new file mode 100644 index 0000000..2b0f99e --- /dev/null +++ b/example/workspace/bla.layout.xmi @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/example/workspace/bla.nmeta b/example/workspace/bla.nmeta new file mode 100644 index 0000000..5b95c1e --- /dev/null +++ b/example/workspace/bla.nmeta @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/example/workspace/example.nmeta b/example/workspace/example.nmeta index 3e9ec1e..3082315 100644 --- a/example/workspace/example.nmeta +++ b/example/workspace/example.nmeta @@ -1,18 +1,22 @@  - - - - - + + + + + + + - + - + + + - - + + diff --git a/example/workspace/test.layout.xmi b/example/workspace/test.layout.xmi new file mode 100644 index 0000000..7158617 --- /dev/null +++ b/example/workspace/test.layout.xmi @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example/workspace/test.nmeta b/example/workspace/test.nmeta index 9329d76..33a2a25 100644 --- a/example/workspace/test.nmeta +++ b/example/workspace/test.nmeta @@ -1,5 +1,6 @@  + \ No newline at end of file diff --git a/packages/nmeta-glsp-client/css/diagram.css b/packages/nmeta-glsp-client/css/diagram.css index ef2eced..d5bf4ef 100644 --- a/packages/nmeta-glsp-client/css/diagram.css +++ b/packages/nmeta-glsp-client/css/diagram.css @@ -1,102 +1,107 @@ -:root { - --glsp-info-foreground: blue; -} - -.sprotty-graph { - background: rgb(179, 196, 202); -} - -.sprotty-node { - fill: white; - stroke: black; - stroke-width: 1; -} - -.sprotty-edge { - stroke: black; -} - -.sprotty-edge.arrow { - fill: black; -} - -.sprotty-edge.selected { - stroke: #844; -} - -.sprotty-edge.selected > .arrow { - fill: #844; - stroke: #844; -} - -.sprotty-node:not(.selected) { - stroke: black; - stroke-width: 1; -} - -polygon.sprotty-node { - stroke: black; -} - -.sprotty-node.selected { - stroke: rgb(87, 87, 214); -} - -.bordered-projection-bar { - border-color: #a1a1a1; -} - -.sprotty-viewport { - border-width: 1px; - border-color: #555555; -} - -.sprotty-projection-bar.horizontal.bordered-projection-bar { - height: 15px; -} - -.sprotty-projection-bar.vertical.bordered-projection-bar { - width: 15px; -} - -.projection-scroll-bar { - background-color: #555555; -} - - -.nmeta-context-menu { - background-color: #dee2e6; - display: flex; - flex-direction: column; - position: fixed; - border: 1px solid #adb5bd; - border-radius: 3px; - padding: 1px; -} - -.nmeta-context-menu-item { - background-color: #dee2e6; - padding: 2px; - padding-left: 15px; - padding-right: 15px; - min-width: 100px; - font-family: sans-serif; - cursor: default; -} - -.nmeta-context-menu-item.disabled-action { - color: darkgray; -} - -.nmeta-context-menu-item:empty { - padding: 0px; - border-bottom: 1.5px solid #adb5bd; - margin-left: 15px; - margin-right: 15px; - margin-top: 4px; - margin-bottom: 4px; -} - -.nmeta-context-menu-item:hover:not(.disabled-action) { - color: green; -} \ No newline at end of file +:root { + --glsp-info-foreground: blue; +} + +.sprotty-graph { + background: rgb(179, 196, 202); +} + +.sprotty svg{ + color:rgb(213, 233, 59); + +} + +.sprotty-node { + fill: white; + stroke: black; + stroke-width: 1; +} + +.sprotty-edge { + stroke: black; +} + +.sprotty-edge.arrow { + fill: black; +} + +.sprotty-edge.selected { + stroke: #844; +} + +.sprotty-edge.selected > .arrow { + fill: #844; + stroke: #844; +} + +.sprotty-node:not(.selected) { + stroke: black; + stroke-width: 1; +} + +polygon.sprotty-node { + stroke: black; +} + +.sprotty-node.selected { + stroke: rgb(87, 87, 214); +} + +.bordered-projection-bar { + border-color: #a1a1a1; +} + +.sprotty-viewport { + border-width: 1px; + border-color: #555555; +} + +.sprotty-projection-bar.horizontal.bordered-projection-bar { + height: 15px; +} + +.sprotty-projection-bar.vertical.bordered-projection-bar { + width: 15px; +} + +.projection-scroll-bar { + background-color: #555555; +} + + +.nmeta-context-menu { + background-color: #dee2e6; + display: flex; + flex-direction: column; + position: fixed; + border: 1px solid #adb5bd; + border-radius: 3px; + padding: 1px; +} + +.nmeta-context-menu-item { + background-color: #dee2e6; + padding: 2px; + padding-left: 15px; + padding-right: 15px; + min-width: 100px; + font-family: sans-serif; + cursor: default; +} + +.nmeta-context-menu-item.disabled-action { + color: darkgray; +} + +.nmeta-context-menu-item:empty { + padding: 0px; + border-bottom: 1.5px solid #adb5bd; + margin-left: 15px; + margin-right: 15px; + margin-top: 4px; + margin-bottom: 4px; +} + +.nmeta-context-menu-item:hover:not(.disabled-action) { + color: green; +} diff --git a/packages/nmeta-glsp-client/src/diagram-module.ts b/packages/nmeta-glsp-client/src/diagram-module.ts index 1622b75..7a9981c 100644 --- a/packages/nmeta-glsp-client/src/diagram-module.ts +++ b/packages/nmeta-glsp-client/src/diagram-module.ts @@ -18,9 +18,7 @@ import { RectangularNodeView, GLabel, } from '@eclipse-glsp/client'; -import 'balloon-css/balloon.min.css'; import { Container, ContainerModule } from 'inversify'; -import 'sprotty/css/edit-label.css'; import '../css/diagram.css'; import { DefaultNode, ElementLabel } from './model'; import { DividerView, InheritanceEdgeView, ReferenceEdgeView } from './views'; diff --git a/packages/nmeta-vscode/src/nmeta-extension.ts b/packages/nmeta-vscode/src/nmeta-extension.ts index a97844f..c0cd6d9 100644 --- a/packages/nmeta-vscode/src/nmeta-extension.ts +++ b/packages/nmeta-vscode/src/nmeta-extension.ts @@ -23,24 +23,24 @@ import { import * as process from 'process'; import * as vscode from 'vscode'; import NMetaEditorProvider from './nmeta-editor-provider'; -import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; -import path = require('path'); +// import { DotnetGlspSocketServerLauncher } from './dotnet-glsp-socket-server-launcher'; +// import path = require('path'); import { PropertyViewProvider } from './property-view-provider'; import { ExtendedGlspVsCodeConnector } from './clientSelectionMapExtension'; const DEFAULT_SERVER_PORT = '5052'; -const DOTNET_EXECUTABLE = path.join(__dirname, '..', 'dist', 'NMetaGlspEditor.Server.exe'); +// const DOTNET_EXECUTABLE = path.join(__dirname, '..', 'dist', 'NMetaGlspEditor.Server.exe'); export async function activate(context: vscode.ExtensionContext): Promise { - const serverProcess = new DotnetGlspSocketServerLauncher({ - executable: DOTNET_EXECUTABLE, - socketConnectionOptions: { host: 'localhost', port: JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT) }, - logging: true - }); + // const serverProcess = new DotnetGlspSocketServerLauncher({ + // executable: DOTNET_EXECUTABLE, + // socketConnectionOptions: { host: 'localhost', port: JSON.parse(process.env.GLSP_SERVER_PORT || DEFAULT_SERVER_PORT) }, + // logging: true + // }); - context.subscriptions.push(serverProcess); + // context.subscriptions.push(serverProcess); - await serverProcess.start(); + // await serverProcess.start(); // Wrap server with quickstart component const nmetaServer = new SocketGlspVscodeServer({ diff --git a/packages/property-view/src/App.css b/packages/property-view/src/App.css index 46b76b9..0c23813 100644 --- a/packages/property-view/src/App.css +++ b/packages/property-view/src/App.css @@ -1,9 +1,14 @@ html,header, body { -margin: 0; + margin: 0; padding: 0; width: 100%; height: 100%; - background-color: var(--vscode-editor-background); +} + +#root, #root > div { + width: 100%; + min-height: 100%; + background-color: var(--vscode-editor-background); } .App { diff --git a/packages/property-view/src/App.tsx b/packages/property-view/src/App.tsx index 57de757..1558fef 100644 --- a/packages/property-view/src/App.tsx +++ b/packages/property-view/src/App.tsx @@ -15,6 +15,10 @@ import counterControlTester from './renderer/counterControlTester'; import counterControl from './renderer/counterControl'; import arraySelectControlTest from './renderer/arraySelectControlTest'; import arraySelectController from './renderer/arraySelectController'; +import boolControl from './renderer/boolControl'; +import boolControlTester from './renderer/boolControlTester'; +import { useMediaQuery } from '@mui/material'; +import { theme } from './theme'; const port = 5052; @@ -24,11 +28,13 @@ const webSocketUrl = `ws://localhost:${port}/${id}`; const classes = { container: { width: '100%', + height: '100%', backgroundColor: 'var(--vscode-editor-background)', color: 'var(--vscode-editor-foreground)', }, dataContent: { width: '100%', + height: '100%', display: 'flex', justifyContent: 'center', marginBottom: '1rem', @@ -43,6 +49,7 @@ const renderers = [ {tester: classControlTester, renderer: classControl}, {tester: selectControlTester, renderer: selectControl}, {tester: counterControlTester, renderer: counterControl}, + {tester: boolControlTester, renderer: boolControl} ] const App = () => { @@ -50,6 +57,7 @@ const App = () => { const updating = useRef(false); const propViewClient = useRef(null); + // MultiTransportConnection erstellen // const multiConnRef = useRef(new MultiTransportConnection(console)); @@ -63,13 +71,8 @@ const App = () => { onReconnect: reconnect, logger: console }); - }, []); - useEffect(() => { - console.log("data updated:", data, "isArray:", Array.isArray(data)); - }, [data]); - function setDataWrapper(dat: Promise | PropertyViewObject[] | PropertyViewObject | null): void { updating.current = true; @@ -133,16 +136,17 @@ const App = () => { } const forms = Array.isArray(data) ? data.map((po) => ( + - + {po.identifier} { onChange={(updated) => sendUpdate(po, updated.data)} /> - )) :
; + )) : null; - return {forms}; + return data.length !== 0 ? {forms} :
; }; export default App; diff --git a/packages/property-view/src/renderer/arraySelectControlTest.ts b/packages/property-view/src/renderer/arraySelectControlTest.ts index 7dca27a..98b46dd 100644 --- a/packages/property-view/src/renderer/arraySelectControlTest.ts +++ b/packages/property-view/src/renderer/arraySelectControlTest.ts @@ -2,7 +2,7 @@ import type { JsonSchema} from '@jsonforms/core'; import { rankWith, schemaMatches } from '@jsonforms/core'; const isStringEnumSchema = (schema: JsonSchema) => { - return !Array.isArray(schema.enum) && Array.isArray(schema.oneOf); + return !Array.isArray(schema.enum) && Array.isArray(schema.oneOf) ; }; diff --git a/packages/property-view/src/renderer/arraySelectController.tsx b/packages/property-view/src/renderer/arraySelectController.tsx index e81197d..aa3d0d4 100644 --- a/packages/property-view/src/renderer/arraySelectController.tsx +++ b/packages/property-view/src/renderer/arraySelectController.tsx @@ -12,10 +12,10 @@ interface ArraySelectControlProps { const ArraySelectControl = ({ data, handleChange, path, schema}: ArraySelectControlProps)=>{ const value = data || ''; - const enumOptions = schema?.oneOf ?? []; + const arrayOptions = schema?.oneOf ?? []; return ( - + {path} diff --git a/packages/property-view/src/renderer/baseTypeControl.tsx b/packages/property-view/src/renderer/baseTypeControl.tsx new file mode 100644 index 0000000..0895553 --- /dev/null +++ b/packages/property-view/src/renderer/baseTypeControl.tsx @@ -0,0 +1,25 @@ +import { JsonSchema } from "@jsonforms/core"; +import { withJsonFormsControlProps } from "@jsonforms/react"; +import { Grid, IconButton, Typography } from "@mui/material"; + +interface BaseTypeControlProps{ + data: any; + handleChange(path: string, value: any): void; + path: string; + schema: JsonSchema +} + +const BaseTypeControl = ({data, handleChange, path, schema}: BaseTypeControlProps)=>{ + + return( +
+ + path + + + +
+ ); +} + +export default withJsonFormsControlProps(BaseTypeControl); diff --git a/packages/property-view/src/renderer/baseTypeControlTester.ts b/packages/property-view/src/renderer/baseTypeControlTester.ts new file mode 100644 index 0000000..c4b89d9 --- /dev/null +++ b/packages/property-view/src/renderer/baseTypeControlTester.ts @@ -0,0 +1,3 @@ +import { rankWith, schemaTypeIs } from '@jsonforms/core'; + +export default rankWith(3, schemaTypeIs('array')); diff --git a/packages/property-view/src/renderer/boolControl.tsx b/packages/property-view/src/renderer/boolControl.tsx new file mode 100644 index 0000000..e190c6b --- /dev/null +++ b/packages/property-view/src/renderer/boolControl.tsx @@ -0,0 +1,21 @@ +import { JsonSchema } from "@jsonforms/core" +import { withJsonFormsAllOfProps, withJsonFormsControlProps } from "@jsonforms/react" +import { Checkbox, FormControlLabel, FormGroup } from "@mui/material" + + +interface BoolControlProps{ + schema: JsonSchema, + data: any, + handleChange(path: string, value: any):void + path: string +} + +const BoolControl = ({data, schema, handleChange, path}:BoolControlProps)=>{ + return( + + handleChange(path, !data)} checked={data} sx={{color: 'var(--vscode-statusBarItem-remoteBackground)','&.Mui-checked': {color: 'var(--vscode-statusBarItem-remoteBackground)',},}}/>} label={path} /> + + ) +} + +export default withJsonFormsControlProps(BoolControl); diff --git a/packages/property-view/src/renderer/boolControlTester.ts b/packages/property-view/src/renderer/boolControlTester.ts new file mode 100644 index 0000000..d21f66a --- /dev/null +++ b/packages/property-view/src/renderer/boolControlTester.ts @@ -0,0 +1,3 @@ +import { rankWith, schemaTypeIs } from '@jsonforms/core'; + +export default rankWith(3, schemaTypeIs('boolean')); diff --git a/packages/property-view/src/renderer/counterControl.tsx b/packages/property-view/src/renderer/counterControl.tsx index 5d8088a..6739c21 100644 --- a/packages/property-view/src/renderer/counterControl.tsx +++ b/packages/property-view/src/renderer/counterControl.tsx @@ -1,8 +1,9 @@ import { JsonSchema } from "@jsonforms/core"; -import { Stack, IconButton, TextField } from "@mui/material"; +import { Stack, IconButton, TextField, colors, Typography } from "@mui/material"; import AddIcon from "@mui/icons-material/Add"; import RemoveIcon from "@mui/icons-material/Remove"; import { withJsonFormsControlProps } from "@jsonforms/react"; +import { Label } from "@mui/icons-material"; interface CounterControlProps { data: any; @@ -35,19 +36,22 @@ const CounterControl = ({ data, handleChange, path, schema}: CounterControlProps } return( + <> + {path} - + - + + ) } diff --git a/packages/property-view/src/renderer/selectControl.tsx b/packages/property-view/src/renderer/selectControl.tsx index 1ab8585..f30b40b 100644 --- a/packages/property-view/src/renderer/selectControl.tsx +++ b/packages/property-view/src/renderer/selectControl.tsx @@ -1,6 +1,7 @@ import { JsonSchema } from '@jsonforms/core'; import { withJsonFormsControlProps } from '@jsonforms/react'; -import { FormControl, InputLabel, MenuItem, Select, TextField } from '@mui/material'; +import { Height } from '@mui/icons-material'; +import { FormControl, InputLabel, MenuItem, Select } from '@mui/material'; interface SelectControlProps { data: any; @@ -12,12 +13,12 @@ interface SelectControlProps { const SelectControl = ({ data, handleChange, path, schema}: SelectControlProps)=>{ const value = data || ''; - const enumOptions = schema?.enum ?? schema?.oneOf ?? []; + const enumOptions = schema?.enum?? []; return ( - + {path} - { + const changedValue = [...selectedBaseTypes]; + changedValue[index] = e.target.value; + setFilled(true); + setSelectedBaseTypes(changedValue); + handleChange(path, changedValue); + } + } + > + { baseTypes.map((option: any) => ( + {option.title} + )) } + + + + { + const changedValue = [...selectedBaseTypes]; + if(changedValue[index].const===''){ + setFilled(true); + } + if (index > -1) { + changedValue.splice(index, 1); + } + setSelectedBaseTypes(changedValue); + handleChange(path, changedValue); + } + }> + + + + ))} +
} export default withJsonFormsControlProps(BaseTypeControl); + + diff --git a/packages/property-view/src/renderer/baseTypeControlTester.ts b/packages/property-view/src/renderer/baseTypeControlTester.ts index c4b89d9..79c7a21 100644 --- a/packages/property-view/src/renderer/baseTypeControlTester.ts +++ b/packages/property-view/src/renderer/baseTypeControlTester.ts @@ -1,3 +1,3 @@ import { rankWith, schemaTypeIs } from '@jsonforms/core'; -export default rankWith(3, schemaTypeIs('array')); +export default rankWith(10, schemaTypeIs('array')); diff --git a/packages/property-view/src/renderer/boolControl.tsx b/packages/property-view/src/renderer/boolControl.tsx index e190c6b..fe87c16 100644 --- a/packages/property-view/src/renderer/boolControl.tsx +++ b/packages/property-view/src/renderer/boolControl.tsx @@ -5,7 +5,7 @@ import { Checkbox, FormControlLabel, FormGroup } from "@mui/material" interface BoolControlProps{ schema: JsonSchema, - data: any, + data: boolean, handleChange(path: string, value: any):void path: string } diff --git a/packages/property-view/src/renderer/counterControl.tsx b/packages/property-view/src/renderer/counterControl.tsx index 6739c21..5576e41 100644 --- a/packages/property-view/src/renderer/counterControl.tsx +++ b/packages/property-view/src/renderer/counterControl.tsx @@ -3,7 +3,6 @@ import { Stack, IconButton, TextField, colors, Typography } from "@mui/material" import AddIcon from "@mui/icons-material/Add"; import RemoveIcon from "@mui/icons-material/Remove"; import { withJsonFormsControlProps } from "@jsonforms/react"; -import { Label } from "@mui/icons-material"; interface CounterControlProps { data: any; diff --git a/packages/property-view/src/renderer/selectControl.tsx b/packages/property-view/src/renderer/selectControl.tsx index f30b40b..f67534e 100644 --- a/packages/property-view/src/renderer/selectControl.tsx +++ b/packages/property-view/src/renderer/selectControl.tsx @@ -32,7 +32,7 @@ const SelectControl = ({ data, handleChange, path, schema}: SelectControlProps)= enumOptions.map((option: string) => ( {option} ))} - + ); }; From 695d49490b26f000d83e45883b0e25e4f8a5c51d Mon Sep 17 00:00:00 2001 From: flovancur Date: Thu, 18 Sep 2025 10:39:28 +0200 Subject: [PATCH 6/6] fixed css issues and changed webpack build --- example/workspace/example.nmeta | 10 +- .../templates/client/src/model.ts | 3 +- packages/nmeta-glsp-client/css/diagram.css | 10 +- .../nmeta-glsp-client/src/diagram-module.ts | 22 ++-- .../nmeta-glsp-standalone/src/di.config.ts | 2 +- packages/nmeta-glsp-webview/css/diagram.css | 110 ++++++++++++++++++ packages/nmeta-glsp-webview/src/app.ts | 8 +- packages/nmeta-glsp-webview/src/index.ts | 38 +++--- packages/nmeta-glsp-webview/webpack.config.js | 2 +- packages/nmeta-vscode/webpack.config.js | 2 +- packages/property-view/src/theme.tsx | 6 +- 11 files changed, 166 insertions(+), 47 deletions(-) create mode 100644 packages/nmeta-glsp-webview/css/diagram.css diff --git a/example/workspace/example.nmeta b/example/workspace/example.nmeta index 3082315..54cebe0 100644 --- a/example/workspace/example.nmeta +++ b/example/workspace/example.nmeta @@ -3,11 +3,11 @@ - + - + @@ -15,9 +15,11 @@ - - + + + + \ No newline at end of file diff --git a/packages/generator-nmfglsp/templates/client/src/model.ts b/packages/generator-nmfglsp/templates/client/src/model.ts index 1ebecda..a98593f 100644 --- a/packages/generator-nmfglsp/templates/client/src/model.ts +++ b/packages/generator-nmfglsp/templates/client/src/model.ts @@ -22,6 +22,7 @@ import { GLabel, editLabelFeature } from '@eclipse-glsp/client'; +import '../css/diagram.css' export class DefaultNode extends RectangularNode implements Nameable, WithEditableLabel { static override readonly DEFAULT_FEATURES = [ @@ -87,4 +88,4 @@ export class Icon extends GShapeElement implements LayoutContainer { width: 32, height: 32 }; -} \ No newline at end of file +} diff --git a/packages/nmeta-glsp-client/css/diagram.css b/packages/nmeta-glsp-client/css/diagram.css index d5bf4ef..0c6af2c 100644 --- a/packages/nmeta-glsp-client/css/diagram.css +++ b/packages/nmeta-glsp-client/css/diagram.css @@ -8,21 +8,21 @@ .sprotty svg{ color:rgb(213, 233, 59); - } - .sprotty-node { fill: white; - stroke: black; + stroke: rgb(255, 255, 255); stroke-width: 1; } +.r + .sprotty-edge { - stroke: black; + stroke: var('--vscode-editor-foreground'); } .sprotty-edge.arrow { - fill: black; + fill: rgb(18, 204, 21); } .sprotty-edge.selected { diff --git a/packages/nmeta-glsp-client/src/diagram-module.ts b/packages/nmeta-glsp-client/src/diagram-module.ts index 7a9981c..a21839c 100644 --- a/packages/nmeta-glsp-client/src/diagram-module.ts +++ b/packages/nmeta-glsp-client/src/diagram-module.ts @@ -17,17 +17,21 @@ import { initializeDiagramContainer, RectangularNodeView, GLabel, + deletableFeature, + editLabelFeature, + selectFeature, + DefaultTypes, } from '@eclipse-glsp/client'; +import 'balloon-css/balloon.min.css'; import { Container, ContainerModule } from 'inversify'; -import '../css/diagram.css'; -import { DefaultNode, ElementLabel } from './model'; +import { DefaultNode } from './model'; import { DividerView, InheritanceEdgeView, ReferenceEdgeView } from './views'; import { ContextMenuService } from './menu'; import { validatedEditor } from './validated-text'; +import '../css/diagram.css' export const nmetaDiagramModule = new ContainerModule((bind, unbind, isBound, rebind) => { const context = { bind, unbind, isBound, rebind }; - bindOrRebind(context, TYPES.ILogger).to(ConsoleLogger).inSingletonScope(); bindOrRebind(context, TYPES.LogLevel).toConstantValue(LogLevel.warn); bind(TYPES.ISnapper).to(GridSnapper); @@ -36,7 +40,7 @@ export const nmetaDiagramModule = new ContainerModule((bind, unbind, isBound, re bindOrRebind(context, TYPES.IContextMenuService).to(ContextMenuService); configureDefaultModelElements(context); - configureModelElement(context, 'label', ElementLabel, GLabelView); + configureModelElement(context, DefaultTypes.LABEL, GLabel, GLabelView, {enable: [editLabelFeature, selectFeature, deletableFeature]}); configureModelElement(context, 'label:static', GLabel, GLabelView); configureModelElement(context, 'comp:header', GCompartment, GCompartmentView); configureModelElement(context, 'comp:attributes', GCompartment, GCompartmentView); @@ -45,15 +49,15 @@ export const nmetaDiagramModule = new ContainerModule((bind, unbind, isBound, re configureModelElement(context, 'Class', DefaultNode, RectangularNodeView); configureModelElement(context, 'Enumeration', DefaultNode, RectangularNodeView); configureModelElement(context, 'Namespace', DefaultNode, RectangularNodeView); - configureModelElement(context, 'Literal', ElementLabel, GLabelView); - configureModelElement(context, 'Attribute', ElementLabel, GLabelView); - configureModelElement(context, 'Operation', ElementLabel, GLabelView); + configureModelElement(context, 'Literal', GLabel, GLabelView, {enable: [editLabelFeature, selectFeature, deletableFeature]}); + configureModelElement(context, 'Attribute', GLabel, GLabelView, {enable: [editLabelFeature, selectFeature, deletableFeature]}); + configureModelElement(context, 'Operation', GLabel, GLabelView, {enable: [editLabelFeature, selectFeature, deletableFeature]}); configureModelElement(context, 'Reference', GEdge, ReferenceEdgeView); configureModelElement(context, 'comp:divider', GCompartment, DividerView); configureModelElement(context, 'edge:inheritance', GEdge, InheritanceEdgeView); }); -export function createNMetaDiagramContainer(...containerConfiguration: ContainerConfiguration): Container { - return initializeDiagramContainer(new Container(), nmetaDiagramModule, validatedEditor, ...containerConfiguration); +export function createNMetaDiagramContainer(container: Container, ...containerConfiguration: ContainerConfiguration): Container { + return initializeDiagramContainer( container, nmetaDiagramModule, validatedEditor, ...containerConfiguration); } diff --git a/packages/nmeta-glsp-standalone/src/di.config.ts b/packages/nmeta-glsp-standalone/src/di.config.ts index a0499a3..da9c626 100644 --- a/packages/nmeta-glsp-standalone/src/di.config.ts +++ b/packages/nmeta-glsp-standalone/src/di.config.ts @@ -14,7 +14,7 @@ import { Container } from 'inversify'; import '../css/diagram.css'; export default function createContainer(options: IDiagramOptions): Container { - const container = createNMetaDiagramContainer( + const container = createNMetaDiagramContainer(new Container(), createDiagramOptionsModule(options), { add: accessibilityModule, diff --git a/packages/nmeta-glsp-webview/css/diagram.css b/packages/nmeta-glsp-webview/css/diagram.css new file mode 100644 index 0000000..f058542 --- /dev/null +++ b/packages/nmeta-glsp-webview/css/diagram.css @@ -0,0 +1,110 @@ +:root { + stroke: var(--vscode-statusBarItem-remoteBackground); +} + +.sprotty-graph { + background: var(--vscode-editor-background); +} + +.sprotty-node { + fill: var(--vscode-textBlockQuote-background); + stroke: var(--vscode-editor-foreground); + stroke-width: 1; + border-radius: '5px'; +} + +.sprotty-resize-handle.selected{ + fill: var(--vscode-statusBarItem-remoteBackground); +} + +.label.sprotty-label, .Attribute.sprotty-label{ + fill: var(--vscode-editor-foreground); +} + +.sprotty-edge { + stroke: var(--vscode-editor-foreground); +} + +.sprotty-edge.arrow { + fill: var(--vscode-editor-foreground); +} + +.sprotty-edge.selected { + stroke: var(--vscode-statusBarItem-remoteBackground); +} + +.sprotty-edge.selected > .arrow { + stroke: var(--vscode-statusBarItem-remoteBackground); +} + +.sprotty-node:not(.selected) { + stroke: var(--vscode-editor-foreground); + stroke-width: 1; +} + +polygon.sprotty-node { + stroke: var(--vscode-editor-foreground); +} + +.sprotty-node.selected { + stroke: var(--vscode-statusBarItem-remoteBackground); +} + +.bordered-projection-bar { + border-color: #a1a1a1; +} + +.sprotty-viewport { + border-width: 1px; + border-color: #555555; +} + +.sprotty-projection-bar.horizontal.bordered-projection-bar { + height: 15px; +} + +.sprotty-projection-bar.vertical.bordered-projection-bar { + width: 15px; +} + +.projection-scroll-bar { + background-color: #555555; +} + + +.nmeta-context-menu { + background-color: #dee2e6; + display: flex; + flex-direction: column; + position: fixed; + border: 1px solid #adb5bd; + border-radius: 3px; + padding: 1px; +} + +.nmeta-context-menu-item { + background-color: #dee2e6; + padding: 2px; + padding-left: 15px; + padding-right: 15px; + min-width: 100px; + font-family: sans-serif; + cursor: default; +} + +.nmeta-context-menu-item.disabled-action { + color: darkgray; +} + +.nmeta-context-menu-item:empty { + padding: 0px; + border-bottom: 1.5px solid #adb5bd; + margin-left: 15px; + margin-right: 15px; + margin-top: 4px; + margin-bottom: 4px; +} + +.nmeta-context-menu-item:hover:not(.disabled-action) { + color: green; +} diff --git a/packages/nmeta-glsp-webview/src/app.ts b/packages/nmeta-glsp-webview/src/app.ts index a4d1497..8201df8 100644 --- a/packages/nmeta-glsp-webview/src/app.ts +++ b/packages/nmeta-glsp-webview/src/app.ts @@ -3,13 +3,15 @@ import { createNMetaDiagramContainer } from 'nmeta-glsp-client'; import { ContainerConfiguration } from '@eclipse-glsp/client'; import { GLSPStarter } from '@eclipse-glsp/vscode-integration-webview'; -import '@eclipse-glsp/vscode-integration-webview/css/glsp-vscode.css'; -import '@vscode/codicons/dist/codicon.css'; import { Container } from 'inversify'; +import 'reflect-metadata'; +import '@eclipse-glsp/vscode-integration-webview/css/glsp-vscode.css'; +import '../css/diagram.css'; class NMetaGLSPStarter extends GLSPStarter { + createContainer(...containerConfiguration: ContainerConfiguration): Container { - return createNMetaDiagramContainer(...containerConfiguration); + return createNMetaDiagramContainer(new Container(),...containerConfiguration); } } diff --git a/packages/nmeta-glsp-webview/src/index.ts b/packages/nmeta-glsp-webview/src/index.ts index 67278c8..c5159c4 100644 --- a/packages/nmeta-glsp-webview/src/index.ts +++ b/packages/nmeta-glsp-webview/src/index.ts @@ -1,19 +1,19 @@ -/******************************************************************************** - * Copyright (c) 2021 EclipseSource and others. - * - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v. 2.0 which is available at - * http://www.eclipse.org/legal/epl-2.0. - * - * This Source Code may also be made available under the following Secondary - * Licenses when the conditions for such availability set forth in the Eclipse - * Public License v. 2.0 are satisfied: GNU General Public License, version 2 - * with the GNU Classpath Exception which is available at - * https://www.gnu.org/software/classpath/license.html. - * - * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 - ********************************************************************************/ -import 'reflect-metadata'; -import { launch } from './app'; - -launch(); +/******************************************************************************** + * Copyright (c) 2021 EclipseSource and others. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0 which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the Eclipse + * Public License v. 2.0 are satisfied: GNU General Public License, version 2 + * with the GNU Classpath Exception which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + ********************************************************************************/ +import 'reflect-metadata'; +import { launch } from './app'; + +launch(); diff --git a/packages/nmeta-glsp-webview/webpack.config.js b/packages/nmeta-glsp-webview/webpack.config.js index ce10cb6..6ca5f97 100644 --- a/packages/nmeta-glsp-webview/webpack.config.js +++ b/packages/nmeta-glsp-webview/webpack.config.js @@ -1,7 +1,7 @@ // @ts-check const path = require('path'); -const outputPath = path.resolve(__dirname, './dist/'); +const outputPath = path.resolve(__dirname, '../nmeta-vscode/dist'); /**@type {import('webpack').Configuration}*/ const config = { diff --git a/packages/nmeta-vscode/webpack.config.js b/packages/nmeta-vscode/webpack.config.js index 03ac6aa..ac1ad36 100644 --- a/packages/nmeta-vscode/webpack.config.js +++ b/packages/nmeta-vscode/webpack.config.js @@ -44,7 +44,7 @@ const config = { }, { from: path.resolve(__dirname, 'dist','property.js')}, { - from: path.resolve(__dirname, '..', 'nmeta-glsp-webview', 'dist', 'nmetaWebview.js') + from: path.resolve(__dirname, 'dist', 'nmetaWebview.js') }, ] diff --git a/packages/property-view/src/theme.tsx b/packages/property-view/src/theme.tsx index 24afac2..a466b05 100644 --- a/packages/property-view/src/theme.tsx +++ b/packages/property-view/src/theme.tsx @@ -33,7 +33,7 @@ export const theme = createTheme({ MuiInputLabel: { styleOverrides: { root: { - color: 'var(--vscode-textLink-foreground)', + color: 'var(--vscode-statusBarItem-remoteBackground)', '&.MuiInputLabel-shrink':{ color:'var(--vscode-statusBarItem-remoteBackground)', } @@ -55,7 +55,8 @@ export const theme = createTheme({ borderRadius: '4px',} }, }, - MuiInputBase: { + + MuiInputBase: { styleOverrides: { root: { color: 'var(--vscode-editor-foreground)', @@ -70,7 +71,6 @@ export const theme = createTheme({ }, '&.Mui-focused .MuiOutlinedInput-notchedOutline':{ borderColor:'var(--vscode-statusBarItem-remoteBackground)', - } } }