diff --git a/package-lock.json b/package-lock.json index a31b29069..17df94c3b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.6.5", "hasInstallScript": true, "dependencies": { - "@intechstudio/grid-protocol": "1.20260302.1321", + "@intechstudio/grid-protocol": "1.20260506.533", "@intechstudio/grid-uikit": "^1.20260421.817", "@intechstudio/profile-cloud-webcomponent": "1.20251107.1414", "adm-zip": "^0.5.10", @@ -2102,9 +2102,9 @@ } }, "node_modules/@intechstudio/grid-protocol": { - "version": "1.20260302.1321", - "resolved": "https://registry.npmjs.org/@intechstudio/grid-protocol/-/grid-protocol-1.20260302.1321.tgz", - "integrity": "sha512-NOsq4uO7W9BnmF77GTOfv8CWClKCSU+cl6M/OZkdOGQEnLZ+gQrRSOWKQ4wBdGtMY+U9PfZjpCU8LHU2MwM9ng==", + "version": "1.20260506.533", + "resolved": "https://registry.npmjs.org/@intechstudio/grid-protocol/-/grid-protocol-1.20260506.533.tgz", + "integrity": "sha512-/HyVt70VoyrmKFBlWless2Ffyd0ZnidlM3o7wSm5UEhI4O4mt1Ig79SeMY3K52i2td05XeMI+COPHhfELO7Txg==", "dependencies": { "@wasm-fmt/lua_fmt": "^0.2.0" } diff --git a/package.json b/package.json index 353545943..1df7c3e29 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "vitest": "^4.0.18" }, "dependencies": { - "@intechstudio/grid-protocol": "1.20260302.1321", + "@intechstudio/grid-protocol": "1.20260506.533", "@intechstudio/grid-uikit": "^1.20260421.817", "@intechstudio/profile-cloud-webcomponent": "1.20251107.1414", "adm-zip": "^0.5.10", diff --git a/src/renderer/lib/_utils.ts b/src/renderer/lib/_utils.ts index 72fc1c854..eecda61a6 100644 --- a/src/renderer/lib/_utils.ts +++ b/src/renderer/lib/_utils.ts @@ -320,6 +320,11 @@ export namespace Grid { { value: "1", info: "Potmeter layer" }, { value: "2", info: "Unused layer" }, ]; + case ElementType.TOUCH: + return [ + { value: "1", info: "Touch layer" }, + { value: "2", info: "Unused layer" }, + ]; default: { const defaultLayerSuggestion = [ { value: "1", info: "Layer 1" }, @@ -337,6 +342,7 @@ export namespace Grid { PBF4 = "PBF4", EF44 = "EF44", VSNX = "VSNX", + XY = "XY", } const typeToArchetypeMap = { @@ -351,6 +357,7 @@ export namespace Grid { [ModuleType.VSN1L]: Module.Archetype.VSNX, [ModuleType.VSN1R]: Module.Archetype.VSNX, [ModuleType.VSN2]: Module.Archetype.VSNX, + [ModuleType.XY]: Module.Archetype.XY, }; export function toArchetype(type: ModuleType): Module.Archetype { diff --git a/src/renderer/main/grid-layout/grid-modules/Device.svelte b/src/renderer/main/grid-layout/grid-modules/Device.svelte index cf5ba7d46..26e326add 100644 --- a/src/renderer/main/grid-layout/grid-modules/Device.svelte +++ b/src/renderer/main/grid-layout/grid-modules/Device.svelte @@ -19,6 +19,7 @@ import EF44 from "./devices/EF44.svelte"; import VSNX from "./devices/VSNX.svelte"; import OCTV from "./devices/OCTV.svelte"; + import XY from "./devices/XY.svelte"; //Overlays import ControlNameOverlay from "./overlays/ControlNameOverlay.svelte"; @@ -103,6 +104,7 @@ { type: "VSN1R", component: VSNX }, { type: "VSN2", component: VSNX }, { type: "OCTV", component: OCTV }, + { type: "XY", component: XY }, ]; component = components.find((e) => e.type === device?.type).component; }); diff --git a/src/renderer/main/grid-layout/grid-modules/devices/XY.svelte b/src/renderer/main/grid-layout/grid-modules/devices/XY.svelte new file mode 100644 index 000000000..50dbb1992 --- /dev/null +++ b/src/renderer/main/grid-layout/grid-modules/devices/XY.svelte @@ -0,0 +1,113 @@ + + +
+
+ +
+ + +
+
+ +
+
+
+ + {#each [10, 30, 50, 70, 90] as pct} + {#each [0, 1, 2, 3] as seg} + + + {/each} + {/each} + + {#each ledcolor_array as color, i} + {@const col = i % 5} + {@const row = Math.floor(i / 5)} +
+ +
+ {/each} +
+
+ +
+
+ + +
+ +
+
+ +
+ +
+ +
+
diff --git a/src/renderer/main/grid-layout/grid-modules/elements/Touch.svelte b/src/renderer/main/grid-layout/grid-modules/elements/Touch.svelte new file mode 100644 index 000000000..e881a4b49 --- /dev/null +++ b/src/renderer/main/grid-layout/grid-modules/elements/Touch.svelte @@ -0,0 +1,5 @@ + + +
diff --git a/src/renderer/main/modals/AddVirtualModule.svelte b/src/renderer/main/modals/AddVirtualModule.svelte index 49c6d63d0..c11f390d9 100644 --- a/src/renderer/main/modals/AddVirtualModule.svelte +++ b/src/renderer/main/modals/AddVirtualModule.svelte @@ -4,6 +4,7 @@ import EF44 from "./../grid-layout/grid-modules/devices/EF44.svelte"; import VSNX from "./../grid-layout/grid-modules/devices/VSNX.svelte"; import OCTV from "./../grid-layout/grid-modules/devices/OCTV.svelte"; + import XY from "./../grid-layout/grid-modules/devices/XY.svelte"; import { ModuleType } from "@intechstudio/grid-protocol"; import { Analytics } from "./../../runtime/analytics.js"; @@ -77,6 +78,12 @@ unrelease: true, hwcfg: 123, }, + { + id: ModuleType.XY, + type: ModuleType.XY, + component: XY, + hwcfg: 161, + }, ]; export let dx = 0; diff --git a/src/renderer/runtime/runtime.ts b/src/renderer/runtime/runtime.ts index 6a046f6a5..7fa75a89c 100644 --- a/src/renderer/runtime/runtime.ts +++ b/src/renderer/runtime/runtime.ts @@ -2272,16 +2272,16 @@ export class GridRuntime extends RuntimeNode { create_module(header_param, heartbeat_class_param, virtual = false) { const hwcfg = Number(heartbeat_class_param.HWCFG); - const revision: string = grid - .module_hwcfgs() - .find((e) => Number(e.hwcfg) === hwcfg).revision; const moduleType = grid.module_type_from_hwcfg(hwcfg); + const hwcfgEntry = grid + .module_hwcfgs() + .find((e) => Number(e.hwcfg) === hwcfg); - // generic check, code below if works only if all parameters are provided if ( header_param === undefined || moduleType === undefined || - heartbeat_class_param === undefined + heartbeat_class_param === undefined || + hwcfgEntry === undefined ) { console.warn( hwcfg, @@ -2293,6 +2293,8 @@ export class GridRuntime extends RuntimeNode { throw "Error creating new module."; } + const revision: string = hwcfgEntry.revision; + return new GridModule( this, new ModuleData( diff --git a/src/renderer/tests/string-operations.test.js b/src/renderer/tests/string-operations.test.js index d6c63ab70..b667f4fb2 100644 --- a/src/renderer/tests/string-operations.test.js +++ b/src/renderer/tests/string-operations.test.js @@ -16,9 +16,7 @@ test("Default configuration compression/expansion", function () { const events = grid.get_element_events(element); if (typeof events !== "undefined") { events.forEach((event) => { - const defaultConfig = event.defaultConfig - .split("")[0]; + const defaultConfig = event.defaultConfig; const expanded = GridScript.expandScript(defaultConfig); const compressed = GridScript.compressScript(expanded); // Compare compressed versions since minification normalizes whitespace