@node-projects/web-component-designer-visualization-addons 0.1.44 → 0.1.46

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
File without changes
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,28 @@
1
+ import { BaseCustomWebComponentConstructorAppend } from "@node-projects/base-custom-webcomponent";
2
+ import { Script } from "../scripting/Script.js";
3
+ import { ServiceContainer } from "@node-projects/web-component-designer";
4
+ import { VisualizationHandler } from "../interfaces/VisualizationHandler";
5
+ import { VisualizationShell } from "../interfaces/VisualizationShell";
6
+ import '@node-projects/splitview.webcomponent';
7
+ export declare class SimpleScriptEditor extends BaseCustomWebComponentConstructorAppend {
8
+ static readonly style: CSSStyleSheet;
9
+ static readonly template: HTMLTemplateElement;
10
+ static readonly is = "node-projects-simple-script-editor";
11
+ serviceContainer: ServiceContainer;
12
+ visualizationHandler: VisualizationHandler;
13
+ visualizationShell: VisualizationShell;
14
+ scriptCommandsTypeInfo: any;
15
+ propertiesTypeInfo: any;
16
+ private _script;
17
+ private _commandListDiv;
18
+ private _commandListFancyTree;
19
+ private _possibleCommands;
20
+ private _propertygrid;
21
+ constructor();
22
+ ready(): Promise<void>;
23
+ private addPossibleCommands;
24
+ loadScript(script: Script): void;
25
+ private createTreeItem;
26
+ addItem(): void;
27
+ getScriptCommands(): any[];
28
+ }
@@ -0,0 +1,254 @@
1
+ import { BaseCustomWebComponentConstructorAppend, css, html } from "@node-projects/base-custom-webcomponent";
2
+ import { ContextMenu } from "@node-projects/web-component-designer";
3
+ import { typeInfoFromJsonSchema } from "@node-projects/propertygrid.webcomponent";
4
+ import { defaultOptions } from "@node-projects/web-component-designer-widgets-wunderbaum";
5
+ import { Wunderbaum } from 'wunderbaum';
6
+ //@ts-ignore
7
+ import wunderbaumStyle from 'wunderbaum/dist/wunderbaum.css' assert { type: 'css' };
8
+ import { VisualizationPropertyGrid } from "./VisualizationPropertyGrid";
9
+ import '@node-projects/splitview.webcomponent';
10
+ export class SimpleScriptEditor extends BaseCustomWebComponentConstructorAppend {
11
+ static style = css `
12
+ :host {
13
+ background: white;
14
+ }
15
+ .list{
16
+ display: grid;
17
+ grid-template-columns: 1fr 40px;
18
+ width: calc(100% - 6px);
19
+ box-sizing: border-box;
20
+ margin: 3px;
21
+ }
22
+
23
+ .list button{
24
+ padding: 5px 10px;
25
+ box-sizing: border-box;
26
+ display: flex;
27
+ justify-content: center;
28
+ margin-right: 5px;
29
+ margin-left: 5px;
30
+ }
31
+
32
+ node-projects-visualization-property-grid {
33
+ width: 100%;
34
+ height: 100%;
35
+ }
36
+ `;
37
+ static template = html `
38
+ <div style="width:100%; height:100%; overflow: hidden;">
39
+ <node-projects-split-view style="height: 100%; width: 100%; position: relative;" orientation="horizontal">
40
+ <div style="width: 40%; position: relative;">
41
+ <div style="width:calc(100% - 4px); height:calc(100% - 4px)">
42
+ <div id="commandList" style="overflow-x: hidden; overflow-y: auto; width:100%; height: calc(100% - 34px);"></div>
43
+ <div class="list">
44
+ <select id="possibleCommands" style="width: 100%"></select>
45
+ <button @click="[[this.addItem()]]">Add</button>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ <div style="width: 60%; position: relative;">
50
+ <node-projects-visualization-property-grid id="propertygrid"></node-projects-visualization-property-grid>
51
+ </div>
52
+ </node-projects-split-view>
53
+ </div>
54
+ `;
55
+ static is = 'node-projects-simple-script-editor';
56
+ serviceContainer;
57
+ visualizationHandler;
58
+ visualizationShell;
59
+ scriptCommandsTypeInfo;
60
+ propertiesTypeInfo;
61
+ _script;
62
+ _commandListDiv;
63
+ _commandListFancyTree;
64
+ _possibleCommands;
65
+ _propertygrid;
66
+ constructor() {
67
+ super();
68
+ this._restoreCachedInititalValues();
69
+ this._commandListDiv = this._getDomElement('commandList');
70
+ this._possibleCommands = this._getDomElement('possibleCommands');
71
+ this._propertygrid = this._getDomElement('propertygrid');
72
+ this.shadowRoot.adoptedStyleSheets = [wunderbaumStyle, SimpleScriptEditor.style];
73
+ }
74
+ async ready() {
75
+ this.addPossibleCommands();
76
+ this._parseAttributesToProperties();
77
+ this._bindingsParse(null, true);
78
+ this._assignEvents();
79
+ let editComplex = async (data) => {
80
+ let pg = new VisualizationPropertyGrid();
81
+ pg.visualizationHandler = this.visualizationHandler;
82
+ pg.visualizationShell = this.visualizationShell;
83
+ pg.serviceContainer = this.serviceContainer;
84
+ pg.getTypeInfo = (obj, type) => typeInfoFromJsonSchema(this.propertiesTypeInfo, obj, type);
85
+ pg.showHead = false;
86
+ pg.typeName = 'IScriptMultiplexValue';
87
+ pg.title = 'Complex for "' + data.propertyPath + '"';
88
+ if (typeof data.value === 'object')
89
+ pg.selectedObject = data.value ?? {};
90
+ else
91
+ pg.selectedObject = {};
92
+ let res = await this.visualizationShell.openConfirmation(pg, { x: 100, y: 100, width: 300, height: 300, parent: this });
93
+ if (res) {
94
+ this._propertygrid.setPropertyValue(data.propertyPath, pg.selectedObject);
95
+ this._propertygrid.refresh();
96
+ }
97
+ };
98
+ this._propertygrid.visualizationHandler = this.visualizationHandler;
99
+ this._propertygrid.visualizationShell = this.visualizationShell;
100
+ this._propertygrid.serviceContainer = this.serviceContainer;
101
+ this._propertygrid.getTypeInfo = (obj, type) => typeInfoFromJsonSchema(this.scriptCommandsTypeInfo, obj, type);
102
+ this._propertygrid.getSpecialEditorForType = async (property, currentValue, propertyPath, wbRender, additionalInfo) => {
103
+ if (typeof currentValue === 'object' && currentValue !== null) {
104
+ let rB = document.createElement('button');
105
+ rB.style.height = 'calc(100% - 6px)';
106
+ rB.style.position = 'relative';
107
+ rB.style.display = 'flex';
108
+ rB.style.justifyContent = 'center';
109
+ rB.style.width = '20px';
110
+ rB.style.boxSizing = 'content-box';
111
+ rB.innerText = 'del';
112
+ rB.onclick = () => {
113
+ this._propertygrid.setPropertyValue(propertyPath, undefined);
114
+ this._propertygrid.refresh();
115
+ };
116
+ wbRender.nodeElem.insertAdjacentElement('afterbegin', rB);
117
+ let d = document.createElement('div');
118
+ d.style.display = 'flex';
119
+ let sp = document.createElement('span');
120
+ sp.innerText = 'complex: ' + JSON.stringify(currentValue);
121
+ sp.style.overflow = 'hidden';
122
+ sp.style.whiteSpace = 'nowrap';
123
+ sp.style.textOverflow = 'ellipsis';
124
+ sp.style.flexGrow = '1';
125
+ sp.title = JSON.stringify(currentValue);
126
+ d.appendChild(sp);
127
+ let b = document.createElement('button');
128
+ b.innerText = '...';
129
+ b.onclick = () => {
130
+ editComplex({ value: currentValue, propertyPath });
131
+ };
132
+ d.appendChild(b);
133
+ wbRender.nodeElem.style.display = 'flex';
134
+ return d;
135
+ }
136
+ else {
137
+ let b = document.createElement('button');
138
+ b.style.height = 'calc(100% - 6px)';
139
+ b.style.position = 'relative';
140
+ b.style.display = 'flex';
141
+ b.style.justifyContent = 'center';
142
+ b.style.width = '20px';
143
+ b.style.boxSizing = 'content-box';
144
+ b.title = 'complex';
145
+ b.style.opacity = '0.2';
146
+ b.innerText = '...';
147
+ b.onclick = () => {
148
+ editComplex({ value: currentValue, propertyPath });
149
+ };
150
+ wbRender.nodeElem.insertAdjacentElement('afterbegin', b);
151
+ wbRender.nodeElem.style.display = 'flex';
152
+ }
153
+ return null;
154
+ };
155
+ this._propertygrid.propertyNodeContextMenu.on((data) => {
156
+ ContextMenu.show([{
157
+ title: 'edit complex value',
158
+ action: async () => {
159
+ editComplex(data);
160
+ }
161
+ },
162
+ {
163
+ title: 'remove complex value',
164
+ action: async () => {
165
+ this._propertygrid.setPropertyValue(data.propertyPath, undefined);
166
+ this._propertygrid.refresh();
167
+ }
168
+ }], data.event);
169
+ });
170
+ }
171
+ //Converter from TypscriptJsonSchema to our Property list...
172
+ async addPossibleCommands() {
173
+ let commands = Object.keys(this.scriptCommandsTypeInfo.definitions);
174
+ for (let c of commands) {
175
+ if (c == 'ScriptCommands')
176
+ continue;
177
+ let option = document.createElement('option');
178
+ option.innerText = c;
179
+ this._possibleCommands.add(option);
180
+ }
181
+ }
182
+ loadScript(script) {
183
+ this._script = script;
184
+ let commandListTreeItems = [];
185
+ for (let c of this._script.commands) {
186
+ commandListTreeItems.push(this.createTreeItem(c));
187
+ }
188
+ ;
189
+ this._commandListFancyTree = new Wunderbaum({
190
+ ...defaultOptions,
191
+ element: this._commandListDiv,
192
+ icon: false,
193
+ source: commandListTreeItems,
194
+ activate: (e) => {
195
+ this._propertygrid.selectedObject = e.node.data.data.item;
196
+ },
197
+ render: (e) => {
198
+ if (e.isNew) {
199
+ let span = e.nodeElem;
200
+ span.oncontextmenu = (ev) => {
201
+ e.node.setActive();
202
+ if (e.node.data.contextMenu) {
203
+ e.node.data.contextMenu(ev, e.node.data, e.node);
204
+ }
205
+ ev.preventDefault();
206
+ return false;
207
+ };
208
+ }
209
+ },
210
+ dnd: {
211
+ guessDropEffect: true,
212
+ preventRecursion: true,
213
+ preventVoidMoves: false,
214
+ serializeClipboardData: false,
215
+ dragStart: (e) => {
216
+ e.event.dataTransfer.effectAllowed = "move";
217
+ e.event.dataTransfer.dropEffect = "move";
218
+ return true;
219
+ },
220
+ dragEnter: (e) => {
221
+ e.event.dataTransfer.dropEffect = 'move';
222
+ return true;
223
+ },
224
+ dragOver: (e) => {
225
+ e.event.dataTransfer.dropEffect = 'move';
226
+ },
227
+ drop: async (e) => {
228
+ e.sourceNode.moveTo(e.node, e.region == 'before' ? 'before' : 'after');
229
+ }
230
+ }
231
+ });
232
+ }
233
+ createTreeItem(currentItem) {
234
+ let cti = {
235
+ title: currentItem.type,
236
+ data: { item: currentItem },
237
+ contextMenu: (e, data, node) => {
238
+ ContextMenu.show([{ title: 'Remove Item', action: (e) => node.remove() }], e);
239
+ }
240
+ };
241
+ return cti;
242
+ }
243
+ addItem() {
244
+ const cmdName = this._possibleCommands.value;
245
+ const command = { type: cmdName };
246
+ const ti = this.createTreeItem(command);
247
+ this._commandListFancyTree.addChildren(ti);
248
+ }
249
+ getScriptCommands() {
250
+ let children = this._commandListFancyTree.root.children;
251
+ return children.map(x => x.data.data.item);
252
+ }
253
+ }
254
+ customElements.define(SimpleScriptEditor.is, SimpleScriptEditor);
@@ -1,4 +1,3 @@
1
- /// <reference types="wunderbaum" />
2
1
  import { IProperty, PropertyGrid } from '@node-projects/propertygrid.webcomponent';
3
2
  import { WbRenderEventType } from "types";
4
3
  import { VisualizationHandler } from '../interfaces/VisualizationHandler';
@@ -208,93 +208,96 @@ export class BindingsHelper {
208
208
  delete bindingCopy.events;
209
209
  }
210
210
  const eventsString = binding.twoWay && binding.events?.length > 0 ? '::' + binding.events.join(',') : '';
211
- if (binding.target == BindingTarget.property &&
211
+ let needsJson = false;
212
+ if (eventsString && binding.expression?.includes('::') || binding.expressionTwoWay?.includes('::'))
213
+ needsJson = true;
214
+ if (!needsJson && binding.target == BindingTarget.property &&
212
215
  !binding.expression && !binding.expressionTwoWay &&
213
216
  binding.converter == null &&
214
217
  !binding.type &&
215
218
  !binding.historic) {
216
219
  if (targetName == 'textContent')
217
- return [bindingPrefixContent + 'text', (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
220
+ return [bindingPrefixContent + 'text', (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
218
221
  if (targetName == 'innerHTML')
219
- return [bindingPrefixContent + 'html', (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
220
- return [bindingPrefixProperty + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
222
+ return [bindingPrefixContent + 'html', (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
223
+ return [bindingPrefixProperty + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
221
224
  }
222
225
  //Multi Var Expressions
223
- if (binding.target == BindingTarget.property &&
226
+ if (!needsJson && binding.target == BindingTarget.property &&
224
227
  binding.expression && !binding.expression.includes("\n") && !binding.expression.includes(";") &&
225
228
  !binding.expressionTwoWay &&
226
229
  binding.converter == null &&
227
230
  !binding.type &&
228
231
  !binding.historic) {
229
232
  if (targetName == 'textContent')
230
- return [bindingPrefixContent + 'text', (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
233
+ return [bindingPrefixContent + 'text', (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
231
234
  if (targetName == 'innerHTML')
232
- return [bindingPrefixContent + 'html', (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
233
- return [bindingPrefixProperty + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
235
+ return [bindingPrefixContent + 'html', (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
236
+ return [bindingPrefixProperty + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
234
237
  }
235
- if (binding.target == BindingTarget.attribute &&
238
+ if (!needsJson && binding.target == BindingTarget.attribute &&
236
239
  !binding.expression && !binding.expressionTwoWay &&
237
240
  binding.converter == null &&
238
241
  !binding.type &&
239
242
  !binding.historic) {
240
- return [bindingPrefixAttribute + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
243
+ return [bindingPrefixAttribute + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
241
244
  }
242
245
  //Multi Var Expressions
243
- if (binding.target == BindingTarget.attribute &&
246
+ if (!needsJson && binding.target == BindingTarget.attribute &&
244
247
  binding.expression && !binding.expression.includes("\n") && !binding.expression.includes(";") &&
245
248
  !binding.expressionTwoWay &&
246
249
  binding.converter == null &&
247
250
  !binding.type &&
248
251
  !binding.historic) {
249
- return [bindingPrefixAttribute + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
252
+ return [bindingPrefixAttribute + PropertiesHelper.camelToDashCase(targetName), (binding.twoWay ? '=' : '') + (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
250
253
  }
251
- if (binding.target == BindingTarget.class &&
254
+ if (!needsJson && binding.target == BindingTarget.class &&
252
255
  !binding.expression && !binding.expressionTwoWay &&
253
256
  binding.converter == null &&
254
257
  !binding.type &&
255
258
  !binding.historic) {
256
- return [bindingPrefixClass + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
259
+ return [bindingPrefixClass + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
257
260
  }
258
261
  //Multi Var Expressions
259
- if (binding.target == BindingTarget.class &&
262
+ if (!needsJson && binding.target == BindingTarget.class &&
260
263
  binding.expression && !binding.expression.includes("\n") && !binding.expression.includes(";") &&
261
264
  !binding.expressionTwoWay &&
262
265
  binding.converter == null &&
263
266
  !binding.type &&
264
267
  !binding.historic) {
265
- return [bindingPrefixClass + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
268
+ return [bindingPrefixClass + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
266
269
  }
267
- if (binding.target == BindingTarget.css &&
270
+ if (!needsJson && binding.target == BindingTarget.css &&
268
271
  !binding.expression && !binding.expressionTwoWay &&
269
272
  binding.converter == null &&
270
273
  !binding.type &&
271
274
  !binding.historic) {
272
- return [bindingPrefixCss + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
275
+ return [bindingPrefixCss + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
273
276
  }
274
277
  //Multi Var Expressions
275
- if (binding.target == BindingTarget.css &&
278
+ if (!needsJson && binding.target == BindingTarget.css &&
276
279
  binding.expression && !binding.expression.includes("\n") && !binding.expression.includes(";") &&
277
280
  !binding.expressionTwoWay &&
278
281
  binding.converter == null &&
279
282
  !binding.type &&
280
283
  !binding.historic) {
281
- return [bindingPrefixCss + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
284
+ return [bindingPrefixCss + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
282
285
  }
283
- if (binding.target == BindingTarget.cssvar &&
286
+ if (!needsJson && binding.target == BindingTarget.cssvar &&
284
287
  !binding.expression && !binding.expressionTwoWay &&
285
288
  binding.converter == null &&
286
289
  !binding.type &&
287
290
  !binding.historic) {
288
- return [bindingPrefixCssVar + BindingsHelper.camelToDotCase(targetName.substring(2)), (binding.inverted ? '!' : '') + binding.signal + eventsString + (!binding.twoWay && binding.signal.includes(';') ? ';' : '')];
291
+ return [bindingPrefixCssVar + BindingsHelper.camelToDotCase(targetName.substring(2)), (binding.inverted ? '!' : '') + binding.signal + (!binding.twoWay && binding.signal.includes(';') ? ';' : '') + eventsString];
289
292
  }
290
293
  //Multi Var Expressions
291
- if (binding.target == BindingTarget.cssvar &&
294
+ if (!needsJson && binding.target == BindingTarget.cssvar &&
292
295
  binding.expression && !binding.expression.includes("\n") && !binding.expression.includes(";") &&
293
296
  !binding.expressionTwoWay &&
294
297
  binding.converter == null &&
295
298
  !binding.type &&
296
299
  !binding.historic) {
297
- return [bindingPrefixCssVar + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + eventsString + ';' + binding.expression];
300
+ return [bindingPrefixCssVar + PropertiesHelper.camelToDashCase(targetName), (binding.inverted ? '!' : '') + binding.signal + ';' + binding.expression + eventsString];
298
301
  }
299
302
  if (binding.inverted === null || binding.inverted === false) {
300
303
  delete bindingCopy.inverted;
@@ -639,7 +642,11 @@ export class BindingsHelper {
639
642
  const evt = element[e];
640
643
  if (evt instanceof TypedEvent) {
641
644
  evt.on(() => {
642
- let v = element[binding[0]];
645
+ let v;
646
+ if (binding[1].target == BindingTarget.attribute)
647
+ v = element.getAttribute(binding[0]);
648
+ else
649
+ v = element[binding[0]];
643
650
  v = BindingsHelper.parseValueWithType(v, binding);
644
651
  if (binding[1].compiledExpressionTwoWay)
645
652
  v = binding[1].compiledExpressionTwoWay(v);
@@ -648,7 +655,11 @@ export class BindingsHelper {
648
655
  }
649
656
  else {
650
657
  element.addEventListener(e, (evt) => {
651
- let v = element[binding[0]];
658
+ let v;
659
+ if (binding[1].target == BindingTarget.attribute)
660
+ v = element.getAttribute(binding[0]);
661
+ else
662
+ v = element[binding[0]];
652
663
  v = BindingsHelper.parseValueWithType(v, binding);
653
664
  if (binding[1].compiledExpressionTwoWay)
654
665
  v = binding[1].compiledExpressionTwoWay(v);
@@ -0,0 +1,5 @@
1
+ export interface VisualizationUiHandler {
2
+ switchLanguage(language: string): any;
3
+ closeDialog(element: HTMLElement): any;
4
+ openDialog(): any;
5
+ }
@@ -0,0 +1,2 @@
1
+ //dialog:{screenName: string, title: string, moveable: boolean, closeable: boolean, width: string, height: string, left: string, top: string}
2
+ export {};
@@ -0,0 +1,11 @@
1
+ import { BindingTarget, IBinding, IBindingService, IDesignItem } from "@node-projects/web-component-designer";
2
+ import { BindingsHelper } from "../helpers/BindingsHelper.js";
3
+ export declare class BindingsService implements IBindingService {
4
+ constructor(bindingsHelper: BindingsHelper);
5
+ private _bindingsHelper;
6
+ getBindings(designItem: IDesignItem): (IBinding & {
7
+ converter: Record<string, any>;
8
+ })[];
9
+ setBinding(designItem: IDesignItem, binding: IBinding): boolean;
10
+ clearBinding(designItem: IDesignItem, propertyName: string, propertyTarget: BindingTarget): boolean;
11
+ }
@@ -0,0 +1,46 @@
1
+ import { BindingMode, PropertiesHelper } from "@node-projects/web-component-designer";
2
+ export class BindingsService {
3
+ constructor(bindingsHelper) {
4
+ this._bindingsHelper = bindingsHelper;
5
+ }
6
+ _bindingsHelper;
7
+ getBindings(designItem) {
8
+ const iobBindings = Array.from(this._bindingsHelper.getBindings(designItem.element));
9
+ return iobBindings.map(x => ({
10
+ targetName: x[1].target == 'css' ? PropertiesHelper.camelToDashCase(x[0]) : x[0],
11
+ target: x[1].target,
12
+ mode: x[1].twoWay ? BindingMode.twoWay : BindingMode.oneWay,
13
+ invert: x[1].inverted,
14
+ bindableObjectNames: x[1].signal.split(';'),
15
+ expression: x[1].expression,
16
+ expressionTwoWay: x[1].expressionTwoWay,
17
+ converter: x[1].converter,
18
+ type: x[1].type,
19
+ changedEvents: x[1].events,
20
+ historic: x[1].historic
21
+ }));
22
+ }
23
+ setBinding(designItem, binding) {
24
+ let bnd = { signal: binding.bindableObjectNames.join(';'), target: binding.target };
25
+ bnd.inverted = binding.invert;
26
+ bnd.twoWay = binding.mode == BindingMode.twoWay;
27
+ bnd.expression = binding.expression;
28
+ bnd.expressionTwoWay = binding.expressionTwoWay;
29
+ //@ts-ignore
30
+ bnd.historic = binding.historic;
31
+ bnd.type = binding.type;
32
+ bnd.converter = binding.converters;
33
+ bnd.target = binding.target;
34
+ bnd.events = binding.changedEvents;
35
+ let serializedBnd = this._bindingsHelper.serializeBinding(designItem.element, binding.targetName, bnd);
36
+ let group = designItem.openGroup('edit_binding');
37
+ designItem.setAttribute(serializedBnd[0], serializedBnd[1]);
38
+ group.commit();
39
+ return true;
40
+ }
41
+ clearBinding(designItem, propertyName, propertyTarget) {
42
+ const name = this._bindingsHelper.getBindingAttributeName(designItem.element, propertyName, propertyTarget);
43
+ designItem.removeAttribute(name);
44
+ return true;
45
+ }
46
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "description": "web-component-designer addon for visualizations",
3
3
  "name": "@node-projects/web-component-designer-visualization-addons",
4
- "version": "0.1.44",
4
+ "version": "0.1.46",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",