@node-projects/web-component-designer-visualization-addons 0.1.8 → 0.1.10

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.
@@ -10,6 +10,7 @@ export declare const bindingPrefixContent = "bind-content:";
10
10
  export declare const bindingsInCssRegex: RegExp;
11
11
  export type namedBinding = [name: string, binding: VisualizationBinding];
12
12
  export declare function isLit(element: Element): boolean;
13
+ export declare function getChangeEventName(element: Element, propertyName: string): string;
13
14
  export declare function parseBindingString(id: string): {
14
15
  parts: string[];
15
16
  signals: string[];
@@ -13,6 +13,11 @@ export function isLit(element) {
13
13
  //@ts-ignore
14
14
  return element.constructor?.elementProperties != null;
15
15
  }
16
+ export function getChangeEventName(element, propertyName) {
17
+ if (isLit(element))
18
+ return propertyName;
19
+ return propertyName + '-changed';
20
+ }
16
21
  export function parseBindingString(id) {
17
22
  let parts = [];
18
23
  let signals = [];
@@ -157,12 +162,7 @@ export class BindingsHelper {
157
162
  else if (element instanceof HTMLSelectElement)
158
163
  binding.events = ['change'];
159
164
  else {
160
- if (isLit(element)) {
161
- binding.events = [propname];
162
- }
163
- else {
164
- binding.events = [propname + '-changed'];
165
- }
165
+ binding.events = [getChangeEventName(element, propname)];
166
166
  }
167
167
  }
168
168
  if (bindingTarget === BindingTarget.cssvar || bindingTarget === BindingTarget.class)
@@ -393,6 +393,18 @@ export class BindingsHelper {
393
393
  return retVal;
394
394
  }
395
395
  applyBinding(element, binding, relativeSignalPath, root) {
396
+ let unsubscribeList = [];
397
+ let cleanupCalls;
398
+ const cleanUp = () => {
399
+ for (const u of unsubscribeList) {
400
+ this._visualizationHandler.unsubscribeState(u[0], u[1]);
401
+ }
402
+ if (cleanupCalls) {
403
+ for (let e of cleanupCalls) {
404
+ e();
405
+ }
406
+ }
407
+ };
396
408
  const signals = binding[1].signal.split(';');
397
409
  const signalVars = new Array(signals.length);
398
410
  for (let i = 0; i < signals.length; i++) {
@@ -412,6 +424,19 @@ export class BindingsHelper {
412
424
  }
413
425
  else {
414
426
  signals[i] = root[s];
427
+ if (s[0] === '$') {
428
+ s = s.substring(1);
429
+ signals[i] = '$' + root[s];
430
+ }
431
+ let evtCallback = () => {
432
+ cleanUp();
433
+ this.applyBinding(element, binding, relativeSignalPath, root);
434
+ };
435
+ const evtNm = getChangeEventName(element, PropertiesHelper.camelToDashCase(s));
436
+ root.addEventListener(evtNm, evtCallback);
437
+ if (!cleanupCalls)
438
+ cleanupCalls = [];
439
+ cleanupCalls.push(() => root.removeEventListener(evtNm, evtCallback));
415
440
  }
416
441
  }
417
442
  }
@@ -419,8 +444,6 @@ export class BindingsHelper {
419
444
  signals[i] = relativeSignalPath + sng;
420
445
  }
421
446
  }
422
- let unsubscribeList = [];
423
- let cleanupCalls;
424
447
  let valuesObject = new Array(signals.length);
425
448
  for (let i = 0; i < signals.length; i++) {
426
449
  const s = signals[i];
@@ -491,16 +514,7 @@ export class BindingsHelper {
491
514
  }
492
515
  }
493
516
  }
494
- return () => {
495
- for (const u of unsubscribeList) {
496
- this._visualizationHandler.unsubscribeState(u[0], u[1]);
497
- }
498
- if (cleanupCalls) {
499
- for (let e of cleanupCalls) {
500
- e();
501
- }
502
- }
503
- };
517
+ return cleanUp;
504
518
  }
505
519
  addTwoWayBinding(binding, element, setter) {
506
520
  if (binding[1].expressionTwoWay) {
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.8",
4
+ "version": "0.1.10",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "author": "jochen.kuehner@gmx.de",