@node-projects/web-component-designer-visualization-addons 0.1.134 → 0.1.136
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.
- package/dist/components/BindingsEditor.js +3 -3
- package/dist/helpers/BindingsHelper.d.ts +1 -1
- package/dist/helpers/BindingsHelper.js +17 -15
- package/dist/index-min.js +26 -26
- package/dist/scripting/ScriptCommands.d.ts +24 -1
- package/dist/scripting/ScriptSystem.js +16 -6
- package/dist/scripting/ScriptUpgrader.d.ts +1 -1
- package/package.json +1 -1
|
@@ -36,10 +36,10 @@ export class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
|
|
|
36
36
|
<button css:border="[[this.historic ? 'solid lime 5px' : 'none']]" style="position: absolute; right: 1px; top: 5px; padding: 10px;" @click="showHistoric">historic</button>
|
|
37
37
|
</div>
|
|
38
38
|
<div class="row">
|
|
39
|
-
<span style="cursor: pointer;" title="javascript expression. access objects with __0, __1, ...">formula</span>
|
|
39
|
+
<span style="cursor: pointer;" title="javascript expression. access context with __ctx, result with __res, objects with __0, __1, ...">formula</span>
|
|
40
40
|
</div>
|
|
41
41
|
<div class="row">
|
|
42
|
-
<node-projects-code-view-monaco id="expression" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expression}}" @code-changed="_refresh"></
|
|
42
|
+
<node-projects-code-view-monaco id="expression" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expression}}" @code-changed="_refresh"></node-projects-code-view-monaco>
|
|
43
43
|
</div>
|
|
44
44
|
<div class="row">
|
|
45
45
|
<span style="text-wrap: nowrap" style="cursor: pointer;" title="write back the value build by a formula to a signal. maybe only usefull when a formula is used.">write back signal :</span>
|
|
@@ -49,7 +49,7 @@ export class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
|
|
|
49
49
|
<span style="cursor: pointer;" title="javascript expression. access property with 'value'">formula write back (two way)</span>
|
|
50
50
|
</div>
|
|
51
51
|
<div class="row">
|
|
52
|
-
<node-projects-code-view-monaco id="expression2way" .read-only="[[!this.twoWay]]" $readonly="[[!this.twoWay]]" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expressionTwoWay}}"></
|
|
52
|
+
<node-projects-code-view-monaco id="expression2way" .read-only="[[!this.twoWay]]" $readonly="[[!this.twoWay]]" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expressionTwoWay}}"></node-projects-code-view-monaco>
|
|
53
53
|
</div>
|
|
54
54
|
</div>
|
|
55
55
|
</div>
|
|
@@ -55,7 +55,7 @@ export declare class BindingsHelper {
|
|
|
55
55
|
applyBinding(element: Element, binding: namedBinding, relativeSignalPath: string, root: HTMLElement, specialValueHandler?: SpecialValueHandler): () => void;
|
|
56
56
|
private addTwoWayBinding;
|
|
57
57
|
private static parseValueWithType;
|
|
58
|
-
handleValueChanged(element: Element, binding: namedBinding, value: any, valuesObject: any[], index: number, signalVarNames: string[], noParse: boolean, relativeSignalPath: string): void;
|
|
58
|
+
handleValueChanged(element: Element, root: Element, binding: namedBinding, value: any, valuesObject: any[], index: number, signalVarNames: string[], noParse: boolean, relativeSignalPath: string): void;
|
|
59
59
|
static camelToDotCase(text: string): string;
|
|
60
60
|
static dotToCamelCase(text: string): string;
|
|
61
61
|
}
|
|
@@ -698,7 +698,7 @@ export class BindingsHelper {
|
|
|
698
698
|
let disableValueChanged = false;
|
|
699
699
|
if (!disableValueChanged) {
|
|
700
700
|
disableValueChanged = true;
|
|
701
|
-
this.handleValueChanged(element, binding, root[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
701
|
+
this.handleValueChanged(element, root, binding, root[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
702
702
|
disableValueChanged = false;
|
|
703
703
|
}
|
|
704
704
|
};
|
|
@@ -707,7 +707,7 @@ export class BindingsHelper {
|
|
|
707
707
|
cleanupCalls = [];
|
|
708
708
|
cleanupCalls.push(() => root.removeEventListener(PropertiesHelper.camelToDashCase(nm) + '-changed', evtCallback));
|
|
709
709
|
try {
|
|
710
|
-
this.handleValueChanged(element, binding, root[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
710
|
+
this.handleValueChanged(element, root, binding, root[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
711
711
|
}
|
|
712
712
|
catch (err) {
|
|
713
713
|
console.error(err);
|
|
@@ -723,7 +723,7 @@ export class BindingsHelper {
|
|
|
723
723
|
let disableValueChanged = false;
|
|
724
724
|
if (!disableValueChanged) {
|
|
725
725
|
disableValueChanged = true;
|
|
726
|
-
this.handleValueChanged(element, binding, element[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
726
|
+
this.handleValueChanged(element, root, binding, element[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
727
727
|
disableValueChanged = false;
|
|
728
728
|
}
|
|
729
729
|
};
|
|
@@ -732,7 +732,7 @@ export class BindingsHelper {
|
|
|
732
732
|
cleanupCalls = [];
|
|
733
733
|
cleanupCalls.push(() => element.removeEventListener(PropertiesHelper.camelToDashCase(nm) + '-changed', evtCallback));
|
|
734
734
|
try {
|
|
735
|
-
this.handleValueChanged(element, binding, element[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
735
|
+
this.handleValueChanged(element, root, binding, element[nm], valuesObject, i, signalVars, false, relativeSignalPath);
|
|
736
736
|
}
|
|
737
737
|
catch (err) {
|
|
738
738
|
console.error(err);
|
|
@@ -747,16 +747,16 @@ export class BindingsHelper {
|
|
|
747
747
|
mS = this._visualizationHandler.getNormalizedSignalName(mS, relativeSignalPath, element);
|
|
748
748
|
}
|
|
749
749
|
this._visualizationHandler.getObject(mS).then(x => {
|
|
750
|
-
this.handleValueChanged(element, binding, x, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
750
|
+
this.handleValueChanged(element, root, binding, x, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
751
751
|
});
|
|
752
752
|
}
|
|
753
753
|
else if (s[0] === '§') {
|
|
754
754
|
const mS = s.substring(1);
|
|
755
755
|
const value = specialValueHandler.valueProvider(mS, { element, binding, relativeSignalPath, root });
|
|
756
756
|
if (value instanceof Promise)
|
|
757
|
-
value.then(v => this.handleValueChanged(element, binding, v, valuesObject, i, signalVars, true, relativeSignalPath));
|
|
757
|
+
value.then(v => this.handleValueChanged(element, root, binding, v, valuesObject, i, signalVars, true, relativeSignalPath));
|
|
758
758
|
else
|
|
759
|
-
this.handleValueChanged(element, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
759
|
+
this.handleValueChanged(element, root, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
760
760
|
if (!specialValueHandler.valueChangedCallbacks)
|
|
761
761
|
specialValueHandler.valueChangedCallbacks = new Map();
|
|
762
762
|
let changeList = specialValueHandler.valueChangedCallbacks.get(mS);
|
|
@@ -767,14 +767,14 @@ export class BindingsHelper {
|
|
|
767
767
|
changeList.push(() => {
|
|
768
768
|
const value = specialValueHandler.valueProvider(mS, { element, binding, relativeSignalPath, root });
|
|
769
769
|
if (value instanceof Promise)
|
|
770
|
-
value.then(v => this.handleValueChanged(element, binding, v, valuesObject, i, signalVars, true, relativeSignalPath));
|
|
770
|
+
value.then(v => this.handleValueChanged(element, root, binding, v, valuesObject, i, signalVars, true, relativeSignalPath));
|
|
771
771
|
else
|
|
772
|
-
this.handleValueChanged(element, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
772
|
+
this.handleValueChanged(element, root, binding, value, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
773
773
|
});
|
|
774
774
|
}
|
|
775
775
|
else {
|
|
776
776
|
if (s.includes('{')) {
|
|
777
|
-
let indirectSignal = new IndirectSignal(this, this._visualizationHandler, s, (value) => this.handleValueChanged(element, binding, value.val, valuesObject, i, signalVars, false, relativeSignalPath), element, relativeSignalPath, root, specialValueHandler);
|
|
777
|
+
let indirectSignal = new IndirectSignal(this, this._visualizationHandler, s, (value) => this.handleValueChanged(element, root, binding, value.val, valuesObject, i, signalVars, false, relativeSignalPath), element, relativeSignalPath, root, specialValueHandler);
|
|
778
778
|
if (!cleanupCalls)
|
|
779
779
|
cleanupCalls = [];
|
|
780
780
|
cleanupCalls.push(() => indirectSignal.dispose());
|
|
@@ -788,7 +788,7 @@ export class BindingsHelper {
|
|
|
788
788
|
let myTimer = { timerId: -1 };
|
|
789
789
|
const loadHistoric = async () => {
|
|
790
790
|
const res = await this._visualizationHandler.getHistoricData(s, binding[1].historic);
|
|
791
|
-
this.handleValueChanged(element, binding, res?.values, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
791
|
+
this.handleValueChanged(element, root, binding, res?.values, valuesObject, i, signalVars, true, relativeSignalPath);
|
|
792
792
|
if (myTimer.timerId !== null)
|
|
793
793
|
myTimer.timerId = setTimeout(loadHistoric, binding[1].historic.reloadInterval);
|
|
794
794
|
};
|
|
@@ -802,12 +802,12 @@ export class BindingsHelper {
|
|
|
802
802
|
});
|
|
803
803
|
}
|
|
804
804
|
else
|
|
805
|
-
this._visualizationHandler.getHistoricData(s, binding[1].historic).then(x => this.handleValueChanged(element, binding, x?.values, valuesObject, i, signalVars, true, relativeSignalPath));
|
|
805
|
+
this._visualizationHandler.getHistoricData(s, binding[1].historic).then(x => this.handleValueChanged(element, root, binding, x?.values, valuesObject, i, signalVars, true, relativeSignalPath));
|
|
806
806
|
}
|
|
807
807
|
else {
|
|
808
|
-
const cb = (id, value) => this.handleValueChanged(element, binding, value.val, valuesObject, i, signalVars, false, relativeSignalPath);
|
|
808
|
+
const cb = (id, value) => this.handleValueChanged(element, root, binding, value.val, valuesObject, i, signalVars, false, relativeSignalPath);
|
|
809
809
|
unsubscribeList.push([s, cb, this._visualizationHandler.subscribeState(s, cb)]);
|
|
810
|
-
this._visualizationHandler.getState(s).then(x => this.handleValueChanged(element, binding, x?.val, valuesObject, i, signalVars, false, relativeSignalPath));
|
|
810
|
+
this._visualizationHandler.getState(s).then(x => this.handleValueChanged(element, root, binding, x?.val, valuesObject, i, signalVars, false, relativeSignalPath));
|
|
811
811
|
if (binding[1].twoWay && i == 0) {
|
|
812
812
|
this.addTwoWayBinding(binding, element, v => this._visualizationHandler.setState(s, v));
|
|
813
813
|
}
|
|
@@ -873,7 +873,7 @@ export class BindingsHelper {
|
|
|
873
873
|
}
|
|
874
874
|
return value;
|
|
875
875
|
}
|
|
876
|
-
handleValueChanged(element, binding, value, valuesObject, index, signalVarNames, noParse, relativeSignalPath) {
|
|
876
|
+
handleValueChanged(element, root, binding, value, valuesObject, index, signalVarNames, noParse, relativeSignalPath) {
|
|
877
877
|
let v = value;
|
|
878
878
|
//should this be done??
|
|
879
879
|
if (!noParse && index == 0)
|
|
@@ -882,11 +882,13 @@ export class BindingsHelper {
|
|
|
882
882
|
if (binding[1].expression) {
|
|
883
883
|
if (!binding[1].compiledExpression) {
|
|
884
884
|
signalVarNames.push('__res');
|
|
885
|
+
signalVarNames.push('__ctx');
|
|
885
886
|
if (binding[1].expression.includes('return '))
|
|
886
887
|
binding[1].compiledExpression = new Function(signalVarNames, binding[1].expression);
|
|
887
888
|
else
|
|
888
889
|
binding[1].compiledExpression = new Function(signalVarNames, 'return ' + binding[1].expression);
|
|
889
890
|
}
|
|
891
|
+
valuesObject[signalVarNames.length - 1] = { element, root, boundNames: binding[1].signal, boundTargetName: binding[0], boundTargetType: binding[1].target };
|
|
890
892
|
v = binding[1].compiledExpression(...valuesObject);
|
|
891
893
|
valuesObject[signalVarNames.length - 1] = v;
|
|
892
894
|
}
|
package/dist/index-min.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
Blockly.Blocks.console={init:function(){this.appendDummyInput().appendField("console").appendField(new Blockly.FieldDropdown([["debug","DEBUG"],["error","ERROR"],["info","INFO"],["log","LOG"],["warn","WARN"]]),"LEVEL"),this.appendValueInput("VALUE").setCheck(null).appendField("value"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.console=function(
|
|
2
|
-
`};Blockly.Blocks.debugger={init:function(){this.appendDummyInput().appendField("debugger"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.debugger=function(
|
|
3
|
-
`};Blockly.Blocks.delay={init:function(){this.appendValueInput("DELAY").setCheck("Number").appendField("delay"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.delay=function(
|
|
4
|
-
`};Blockly.Blocks.get_parameter={init:function(){this.appendValueInput("NAME").setCheck("String").appendField("get_parameter"),this.setInputsInline(!0),this.setOutput(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.get_parameter=function(
|
|
5
|
-
`:
|
|
6
|
-
`:
|
|
7
|
-
`),n};Blockly.Blocks.set_state={init:function(){this.appendValueInput("OID").setCheck("String").appendField("set_state"),this.appendValueInput("VALUE").setCheck(null).appendField("with"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.set_state=function(
|
|
8
|
-
`};Blockly.defineBlocksWithJsonArray([{type:"start_event",message0:"Event %1",nextStatement:null,style:"hat_blocks",args0:[{type:"field_variable",name:"EVENTVAR",variable:"event"}]}]);Blockly.JavaScript.forBlock.start_event=function(
|
|
1
|
+
Blockly.Blocks.console={init:function(){this.appendDummyInput().appendField("console").appendField(new Blockly.FieldDropdown([["debug","DEBUG"],["error","ERROR"],["info","INFO"],["log","LOG"],["warn","WARN"]]),"LEVEL"),this.appendValueInput("VALUE").setCheck(null).appendField("value"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.console=function(r,t){var s=r.getFieldValue("LEVEL");let e=Blockly.JavaScript.valueToCode(r,"VALUE",Blockly.JavaScript.ORDER_ATOMIC);return`console['${s.toLowerCase()}'](${e});
|
|
2
|
+
`};Blockly.Blocks.debugger={init:function(){this.appendDummyInput().appendField("debugger"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.debugger=function(r){return`debugger;
|
|
3
|
+
`};Blockly.Blocks.delay={init:function(){this.appendValueInput("DELAY").setCheck("Number").appendField("delay"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.delay=function(r){return"await delay("+Blockly.JavaScript.valueToCode(r,"DELAY",Blockly.JavaScript.ORDER_ATOMIC)+`);
|
|
4
|
+
`};Blockly.Blocks.get_parameter={init:function(){this.appendValueInput("NAME").setCheck("String").appendField("get_parameter"),this.setInputsInline(!0),this.setOutput(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.get_parameter=function(r,t){return[`context.parameters[${Blockly.JavaScript.valueToCode(r,"NAME",Blockly.JavaScript.ORDER_ATOMIC)}]`,Blockly.JavaScript.ORDER_NONE]};Blockly.Blocks.get_state={init:function(){this.appendValueInput("OID").setCheck("String").appendField("get_state"),this.setInputsInline(!0),this.setOutput(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.get_state=function(r,t){let s=Blockly.JavaScript.valueToCode(r,"OID",Blockly.JavaScript.ORDER_ATOMIC);return[`(await visualizationHandler.getState((${s}[0] === '.' ? relativeSignalsPath : '') + ${s})).val`,Blockly.JavaScript.ORDER_NONE]};Blockly.Blocks.get_sub_property={init:function(){this.appendDummyInput().appendField("getSubProperty"),this.appendValueInput("OBJECT").setCheck("Object").appendField("object"),this.appendValueInput("PROPERTYPATH").setCheck("String").appendField("propertypath"),this.setInputsInline(!0),this.setOutput(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.get_sub_property=function(r,t){let s=Blockly.JavaScript.valueToCode(r,"OBJECT",Blockly.JavaScript.ORDER_ATOMIC),e=Blockly.JavaScript.valueToCode(r,"PROPERTYPATH",Blockly.JavaScript.ORDER_ATOMIC);return[`extractPart(${s}, ${e})`,Blockly.JavaScript.ORDER_NONE]};Blockly.Blocks.open_screen={init:function(){this.appendDummyInput().appendField("open screen"),this.appendValueInput("SCREEN").setCheck("String").appendField("screen"),this.appendValueInput("RELATIVESIGNALSPATH").setCheck("String").appendField("relativeSignalsPath"),this.appendValueInput("NOHISTORY").setCheck("Boolean").appendField("noHistory"),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.open_screen=function(r){let t=Blockly.JavaScript.valueToCode(r,"SCREEN",Blockly.JavaScript.ORDER_ATOMIC),s=Blockly.JavaScript.valueToCode(r,"RELATIVESIGNALSPATH",Blockly.JavaScript.ORDER_ATOMIC),e=Blockly.JavaScript.valueToCode(r,"NOHISTORY",Blockly.JavaScript.ORDER_ATOMIC);return`RUNTIME.openScreen({screen: ${t}, relativeSignalsPath: ${s}, noHistory: ${e}})`};Blockly.Blocks.query_selector={init:function(){this.appendDummyInput().appendField("querySelector").appendField(new Blockly.FieldDropdown([["currentScreen","CURRENTSCREEN"],["parentScreen","PARENTSCREEN"]]),"SOURCE"),this.appendValueInput("SELECTOR").setCheck("String").appendField("selector"),this.setInputsInline(!0),this.setOutput(!0,"Element"),this.setColour(230)}};Blockly.JavaScript.forBlock.query_selector=function(r,t){var s=r.getFieldValue("SOURCE");let e=Blockly.JavaScript.valueToCode(r,"SELECTOR",Blockly.JavaScript.ORDER_ATOMIC),i;return s==="CURRENTSCREEN"?i=`shadowRoot.querySelector(${e})`:s==="PARENTSCREEN"&&(i=`shadowRoot.host.getRootNode().querySelector(${e})`),[i,Blockly.JavaScript.ORDER_NONE]};Blockly.Blocks.query_selector_all={init:function(){this.appendDummyInput().appendField("querySelectorAll").appendField(new Blockly.FieldDropdown([["currentScreen","CURRENTSCREEN"],["parentScreen","PARENTSCREEN"]]),"SOURCE"),this.appendValueInput("SELECTOR").setCheck("String").appendField("selector"),this.setInputsInline(!0),this.setOutput(!0,"Array"),this.setColour(230)}};Blockly.JavaScript.forBlock.query_selector_all=function(r,t){var s=r.getFieldValue("SOURCE");let e=Blockly.JavaScript.valueToCode(r,"SELECTOR",Blockly.JavaScript.ORDER_ATOMIC),i;return s==="CURRENTSCREEN"?i=`shadowRoot.querySelectorall(${e})`:s==="PARENTSCREEN"&&(i=`shadowRoot.querySelectorall(${e})`),[i,Blockly.JavaScript.ORDER_NONE]};Blockly.Blocks.set_element={init:function(){this.appendDummyInput().appendField("setElement").appendField(new Blockly.FieldDropdown([["property","PROPERTY"],["attribute","ATTRIBUTE"],["style","STYLE"]]),"TARGET"),this.appendValueInput("ELEMENT").setCheck("Element").appendField("element"),this.appendValueInput("NAME").setCheck("String").appendField("name"),this.appendValueInput("VALUE").setCheck(null).appendField("value"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.set_element=function(r){var t=r.getFieldValue("TARGET");let s=Blockly.JavaScript.valueToCode(r,"ELEMENT",Blockly.JavaScript.ORDER_ATOMIC),e=Blockly.JavaScript.valueToCode(r,"NAME",Blockly.JavaScript.ORDER_ATOMIC),i=Blockly.JavaScript.valueToCode(r,"VALUE",Blockly.JavaScript.ORDER_ATOMIC),n="";return t==="PROPERTY"?n+=s+"["+e+"] = "+i+`;
|
|
5
|
+
`:t==="ATTRIBUTE"?n+=s+".setAttribute("+e+", "+i+`);
|
|
6
|
+
`:t==="STYLE"&&(n+=s+".style["+e+"] = "+i+`;
|
|
7
|
+
`),n};Blockly.Blocks.set_state={init:function(){this.appendValueInput("OID").setCheck("String").appendField("set_state"),this.appendValueInput("VALUE").setCheck(null).appendField("with"),this.setInputsInline(!0),this.setPreviousStatement(!0,null),this.setNextStatement(!0,null),this.setColour(230)}};Blockly.JavaScript.forBlock.set_state=function(r){let t=Blockly.JavaScript.valueToCode(r,"OID",Blockly.JavaScript.ORDER_ATOMIC),s=Blockly.JavaScript.valueToCode(r,"VALUE",Blockly.JavaScript.ORDER_ATOMIC);return`await visualizationHandler.setState((${t}[0] === '.' ? relativeSignalsPath : '') + ${t}, ${s});
|
|
8
|
+
`};Blockly.defineBlocksWithJsonArray([{type:"start_event",message0:"Event %1",nextStatement:null,style:"hat_blocks",args0:[{type:"field_variable",name:"EVENTVAR",variable:"event"}]}]);Blockly.JavaScript.forBlock.start_event=function(r){return Blockly.JavaScript.getVariableName(r.getField("EVENTVAR").variable.name)+` = eventData;
|
|
9
9
|
`};var de=`function extractPart(obj, propertyPath) {
|
|
10
10
|
let retVal = obj;
|
|
11
11
|
for (let p of propertyPath.split('.')) {
|
|
@@ -21,7 +21,7 @@ function delay(ms) {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export async function run(eventData, shadowRoot, parameters, relativeSignalsPath, visualizationHandler, context) {
|
|
24
|
-
`,he="}";async function X(
|
|
24
|
+
`,he="}";async function X(r){let t=new Blockly.Workspace;Blockly.serialization.workspaces.load(r,t),Blockly.JavaScript.addReservedWords("eventData"),Blockly.JavaScript.addReservedWords("shadowRoot"),Blockly.JavaScript.addReservedWords("extractPart"),Blockly.JavaScript.addReservedWords("parameters"),Blockly.JavaScript.addReservedWords("relativeSignalsPath"),Blockly.JavaScript.addReservedWords("delay"),Blockly.JavaScript.addReservedWords("visualizationHandler"),Blockly.JavaScript.addReservedWords("context");let s=Blockly.JavaScript.workspaceToCode(t);return(await import(URL.createObjectURL(new Blob([de+s+he],{type:"application/javascript"})))).run}import{BaseCustomWebComponentConstructorAppend as me,html as ge,css as ye}from"@node-projects/base-custom-webcomponent";var C=class r extends me{static template=ge`
|
|
25
25
|
<div id="blocklyDiv" style="position: absolute; width: 100%; height: 100%;"></div>
|
|
26
26
|
`;static style=ye`
|
|
27
27
|
:host {
|
|
@@ -30,7 +30,7 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
30
30
|
height: 100%;
|
|
31
31
|
width: 100%;
|
|
32
32
|
display: block;
|
|
33
|
-
}`;static is="node-projects-blockly-script-editor";blocklyDiv;workspace;static blocklyStyle1;static blocklyStyle2;resizeObserver;_toolbox;constructor(
|
|
33
|
+
}`;static is="node-projects-blockly-script-editor";blocklyDiv;workspace;static blocklyStyle1;static blocklyStyle2;resizeObserver;_toolbox;constructor(t){super(),super._restoreCachedInititalValues(),this._toolbox=t,this.blocklyDiv=this._getDomElement("blocklyDiv"),this._assignEvents(),this.createBlockly()}createBlockly(){let t="zelos",s="webui",e=Blockly.Theme.defineTheme(s,{base:Blockly.Themes.Classic,blockStyles:{hat_blocks:{colourPrimary:"#4a148c"}},categoryStyles:{start_category:{colour:"#4a148c"},system_category:{colour:"#01579b"}}});this.workspace=Blockly.inject(this.blocklyDiv,{theme:e,toolbox:this._toolbox,renderer:t,trashcan:!0,zoom:{controls:!0,wheel:!1,startScale:.7,maxScale:3,minScale:.3,scaleSpeed:1.2,pinch:!1},move:{scrollbars:{horizontal:!0,vertical:!0},drag:!0,wheel:!0},maxInstances:{start_event:1}}),r.blocklyStyle1||(r.blocklyStyle1=new CSSStyleSheet,r.blocklyStyle1.replaceSync(document.getElementById("blockly-renderer-style-"+t+"-"+s).innerText),r.blocklyStyle2=new CSSStyleSheet,r.blocklyStyle2.replaceSync(document.getElementById("blockly-common-style").innerText)),this.shadowRoot.adoptedStyleSheets=[r.blocklyStyle1,r.blocklyStyle2,r.style],new ZoomToFitControl(this.workspace).init()}ready(){Blockly.svgResize(this.workspace),this.resizeObserver=new ResizeObserver(t=>{Blockly.svgResize(this.workspace)}),this.resizeObserver.observe(this)}save(){return Blockly.serialization.workspaces.save(this.workspace)}load(t){Blockly.serialization.workspaces.load(t,this.workspace)}};customElements.define(C.is,C);import{BaseCustomWebComponentConstructorAppend as xe,html as we,css as ke}from"@node-projects/base-custom-webcomponent";import{BindingMode as Se,BindingTarget as G}from"@node-projects/web-component-designer";import{BaseCustomWebComponentConstructorAppend as fe,html as ve,css as be}from"@node-projects/base-custom-webcomponent";var E=class extends fe{static template=ve`
|
|
34
34
|
<span style="position:absolute;left:30px;top:26px;">from</span>
|
|
35
35
|
<span style="position:absolute;left:30px;top:77px;">count</span>
|
|
36
36
|
<span style="position:absolute;left:30px;top:123px;">limit</span>
|
|
@@ -100,7 +100,7 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
100
100
|
<input type="text" value="{{?this.historic.instance}}" style="position:absolute;left:104px;top:419px;width:155px;">`;static style=be`
|
|
101
101
|
:host {
|
|
102
102
|
box-sizing: border-box;
|
|
103
|
-
}`;static is="node-projects-visualization-bindings-editor-historic";historic;static properties={historic:Object};constructor(
|
|
103
|
+
}`;static is="node-projects-visualization-bindings-editor-historic";historic;static properties={historic:Object};constructor(t){super(),this._restoreCachedInititalValues(),this.historic=t??{reloadInterval:2e3}}ready(){this._bindingsParse()}#e=!1;refresh(){this.#e||(this.#e=!0,this._bindingsRefresh(null,!0),this.#e=!1)}};customElements.define(E.is,E);var D=class extends xe{static template=we`
|
|
104
104
|
<div id="root">
|
|
105
105
|
<div class="vertical-grid">
|
|
106
106
|
<div style="grid-column: 1/3">
|
|
@@ -134,10 +134,10 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
134
134
|
<button css:border="[[this.historic ? 'solid lime 5px' : 'none']]" style="position: absolute; right: 1px; top: 5px; padding: 10px;" @click="showHistoric">historic</button>
|
|
135
135
|
</div>
|
|
136
136
|
<div class="row">
|
|
137
|
-
<span style="cursor: pointer;" title="javascript expression. access objects with __0, __1, ...">formula</span>
|
|
137
|
+
<span style="cursor: pointer;" title="javascript expression. access context with __ctx, result with __res, objects with __0, __1, ...">formula</span>
|
|
138
138
|
</div>
|
|
139
139
|
<div class="row">
|
|
140
|
-
<node-projects-code-view-monaco id="expression" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expression}}" @code-changed="_refresh"></
|
|
140
|
+
<node-projects-code-view-monaco id="expression" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expression}}" @code-changed="_refresh"></node-projects-code-view-monaco>
|
|
141
141
|
</div>
|
|
142
142
|
<div class="row">
|
|
143
143
|
<span style="text-wrap: nowrap" style="cursor: pointer;" title="write back the value build by a formula to a signal. maybe only usefull when a formula is used.">write back signal :</span>
|
|
@@ -147,7 +147,7 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
147
147
|
<span style="cursor: pointer;" title="javascript expression. access property with 'value'">formula write back (two way)</span>
|
|
148
148
|
</div>
|
|
149
149
|
<div class="row">
|
|
150
|
-
<node-projects-code-view-monaco id="expression2way" .read-only="[[!this.twoWay]]" $readonly="[[!this.twoWay]]" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expressionTwoWay}}"></
|
|
150
|
+
<node-projects-code-view-monaco id="expression2way" .read-only="[[!this.twoWay]]" $readonly="[[!this.twoWay]]" single-row language="javascript" style="width: 100%; min-height: 17px; height: 17px; position: relative; overflow: hidden; resize: vertical;" .code="{{?this.expressionTwoWay}}"></node-projects-code-view-monaco>
|
|
151
151
|
</div>
|
|
152
152
|
</div>
|
|
153
153
|
</div>
|
|
@@ -256,11 +256,11 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
256
256
|
|
|
257
257
|
node-projects-code-view-monaco[readonly] {
|
|
258
258
|
border: 1px lightgray solid;
|
|
259
|
-
}`;static is="node-projects-visualization-bindings-editor";static properties={twoWayPossible:Boolean,twoWay:Boolean,expression:String,objectNames:String,events:String,invert:Boolean,converters:Array,historic:Object};twoWayPossible=!1;twoWay=!1;expression="";writeBackSignal="";expressionTwoWay="";historic;objectNames="";events="";invert=!1;converters=[];convertersString;objectValueType;_property;_binding;_bindingTarget;_serviceContainer;_instanceServiceContainer;_shell;_activeRow=-1;_objNmInput;constructor(s,
|
|
260
|
-
`)>=0&&(
|
|
261
|
-
`)>=0&&(
|
|
259
|
+
}`;static is="node-projects-visualization-bindings-editor";static properties={twoWayPossible:Boolean,twoWay:Boolean,expression:String,objectNames:String,events:String,invert:Boolean,converters:Array,historic:Object};twoWayPossible=!1;twoWay=!1;expression="";writeBackSignal="";expressionTwoWay="";historic;objectNames="";events="";invert=!1;converters=[];convertersString;objectValueType;_property;_binding;_bindingTarget;_serviceContainer;_instanceServiceContainer;_shell;_activeRow=-1;_objNmInput;constructor(t,s,e,i,n,l,a={namedConverters:!0}){super(),super._restoreCachedInititalValues(),this._objNmInput=this._getDomElement("objectName"),this._property=t,this._binding=s,this._bindingTarget=e,this._serviceContainer=i,this._instanceServiceContainer=n,this._shell=l,a?.namedConverters||(this._getDomElement("namedConverterInput").style.display="none")}ready(){if(this._parseAttributesToProperties(),this._assignEvents(),this.twoWayPossible=!1,(this._bindingTarget==G.property||this._bindingTarget==G.attribute)&&(this.twoWayPossible=!0),this._binding){if(this.twoWay=this._binding.mode==Se.twoWay,this.expression=this._binding.expression,this.writeBackSignal=this._binding.writeBackSignal,this.expressionTwoWay=this._binding.expressionTwoWay,this.historic=this._binding.historic,this.invert=this._binding.invert,this.objectValueType=this._binding.type,this._binding.bindableObjectNames&&(this.objectNames=this._binding.bindableObjectNames.join(";")),this._binding.converter)if(typeof this._binding.converter=="string")this.convertersString=this._binding.converter;else for(let t in this._binding.converter)this.converters.push({key:t,value:this._binding.converter[t]});this._binding.changedEvents&&this._binding.changedEvents.length&&(this.events=this._binding.changedEvents.join(";"))}if(this.expression){let t=this._getDomElement("expression");this.expression.indexOf(`
|
|
260
|
+
`)>=0&&(t.style.height="51px")}if(this.expressionTwoWay){let t=this._getDomElement("expression2way");this.expressionTwoWay.indexOf(`
|
|
261
|
+
`)>=0&&(t.style.height="51px")}this._bindingsParse(),this._objNmInput.focus()}_focusRow(t){this._activeRow=t,this._updatefocusedRow()}_updatefocusedRow(){let t=this._getDomElement("converterGrid");t.querySelectorAll("div").forEach(s=>s.style.background=""),this._activeRow>=0&&(t.children[this._activeRow+1].style.background="gray")}_clear(){this.objectNames="",this._bindingsRefresh()}_refresh(){requestAnimationFrame(()=>{this._bindingsRefresh()})}async _select(){let t=this._shell.createBindableObjectBrowser();t.initialize(this._serviceContainer,this._instanceServiceContainer,"binding"),t.title="select signal...";let s=new AbortController;t.objectDoubleclicked.on(()=>{s.abort(),this.objectNames!=""&&(this.objectNames+=";"),t.selectedObject.specialType=="signalProperty"?this.objectNames+="?":t.selectedObject.bindabletype==="property"&&(this.objectNames+="??"),this.objectNames+=t.selectedObject.fullName,this._bindingsRefresh()}),await this._shell.openConfirmation(t,{x:100,y:100,width:400,height:300,parent:this,abortSignal:s.signal})&&(this.objectNames!=""&&(this.objectNames+=";"),this.objectNames+=t.selectedObject.fullName,this._bindingsRefresh())}async showHistoric(){let t=new E(this.historic),s=new AbortController;t.title="Edit historic binding to: "+this._property.name,await this._shell.openConfirmation(t,{x:100,y:100,width:420,height:510,parent:this,abortSignal:s.signal,disableResize:!0,cancelText:"Remove"})?this.historic=t.historic:this.historic=null,this._bindingsRefresh()}addConverter(){this.converters.push({key:"",value:""}),this._activeRow=this.converters.length-1,this._bindingsRefresh(),this._updatefocusedRow()}removeConverter(){this.converters.splice(this._activeRow,1),this._activeRow=-1,this._bindingsRefresh(),this._updatefocusedRow()}};customElements.define(D.is,D);import{BaseCustomWebComponentConstructorAppend as Ce,css as Ee,html as Ne}from"@node-projects/base-custom-webcomponent";import{ContextMenu as q}from"@node-projects/web-component-designer";import{typeInfoFromJsonSchema as $}from"@node-projects/propertygrid.webcomponent";import{defaultOptions as Ie}from"@node-projects/web-component-designer-widgets-wunderbaum";import{Wunderbaum as Oe}from"wunderbaum";import Be from"wunderbaum/dist/wunderbaum.css"with{type:"css"};import{PropertyGrid as _e}from"@node-projects/propertygrid.webcomponent";import{CodeViewMonaco as Te}from"@node-projects/web-component-designer-codeview-monaco";var W=class extends _e{serviceContainer;instanceServiceContainer;visualizationHandler;visualizationShell;bindableObjectsTarget="property";constructor(){super()}bindingDoubleClicked;async getEditorForType(t,s,e,i,n){if(this.getSpecialEditorForType){let l=await this.getSpecialEditorForType(t,s,e,i,n);if(l)return l}switch(t.format){case"screen":{let l=document.createElement("select");l.style.width="100%";let a=document.createElement("option");a.value=s??"",a.innerText=s??"",l.appendChild(a);for(let p of await this.visualizationHandler.getAllNames("screen")){if(p==s)continue;let o=document.createElement("option");o.value=p,o.innerText=p,l.appendChild(o)}return l.onchange=()=>{this.setPropertyValue(e,l.value)},l.value=s,l}case"signal":{let l=document.createElement("div");l.style.display="flex";let a=document.createElement("input");a.value=s??"",a.style.flexGrow="1",a.style.width="0",a.onchange=o=>this.setPropertyValue(e,a.value),a.onfocus=o=>{a.selectionStart=0,a.selectionEnd=a.value?.length},l.appendChild(a);let p=document.createElement("button");return p.textContent="...",p.onclick=async()=>{let o=this.visualizationShell.createBindableObjectBrowser();o.initialize(this.serviceContainer,this.instanceServiceContainer,this.bindableObjectsTarget),o.title="select signal...";let u=new AbortController;o.objectDoubleclicked.on(()=>{this.bindingDoubleClicked&&this.bindingDoubleClicked(o.selectedObject),u.abort(),a.value=o.selectedObject.fullName,this.setPropertyValue(e,a.value)}),await this.visualizationShell.openConfirmation(o,{x:100,y:100,width:400,height:300,parent:this,abortSignal:u.signal})&&(a.value=o.selectedObject.fullName,this.setPropertyValue(e,a.value))},l.appendChild(p),l}case"html":case"script":{let l=document.createElement("div");l.style.boxSizing="border-box",l.style.width="100%",l.style.display="flex";let a=document.createElement("textarea");a.style.boxSizing="border-box",a.value=s??"",a.style.width="100%",a.onblur=o=>{this.setPropertyValue(e,a.value)},l.appendChild(a);let p=document.createElement("button");return p.innerHTML="...",p.style.boxSizing="border-box",p.onclick=async()=>{let o=new Te;if(t.format=="html")o.language="html";else{let g={content:`declare global {
|
|
262
262
|
var context: { event: Event, element: Element };
|
|
263
|
-
}`,filePath:"global.d.ts"};monaco.languages.typescript.typescriptDefaults.setExtraLibs([g]),
|
|
263
|
+
}`,filePath:"global.d.ts"};monaco.languages.typescript.typescriptDefaults.setExtraLibs([g]),o.language="javascript"}o.code=a.value,o.style.position="relative",await this.visualizationShell.openConfirmation(o,{x:200,y:200,width:600,height:400,parent:this})&&(a.value=o.getText(),this.setPropertyValue(e,a.value))},l.appendChild(p),l}}return super.getEditorForType(t,s,e,i,n)}};customElements.define("node-projects-visualization-property-grid",W);import"@node-projects/splitview.webcomponent";var N=class r{static upgradeScriptCommand(t){return t.type==="SetElementProperty"?r.upgradeSetElementProperty(t):t}static upgradeSetElementProperty(t){return t.targetSelectorTarget==="currentScreen"?t.targetSelectorTarget="container":t.targetSelectorTarget==="parentScreen"?(t.targetSelectorTarget="container",t.parentIndex=1):t.targetSelectorTarget==="currentElement"?t.targetSelectorTarget="element":t.targetSelectorTarget==="parentElement"&&(t.targetSelectorTarget="element",t.parentIndex=1),t}};var I=class r extends Ce{static style=Ee`
|
|
264
264
|
:host {
|
|
265
265
|
background: white;
|
|
266
266
|
}
|
|
@@ -302,7 +302,7 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
302
302
|
</div>
|
|
303
303
|
</node-projects-split-view>
|
|
304
304
|
</div>
|
|
305
|
-
`;static is="node-projects-visualization-simple-script-editor";serviceContainer;instanceServiceContainer;visualizationHandler;visualizationShell;scriptCommandsTypeInfo;propertiesTypeInfo;_script;_commandListDiv;_commandListFancyTree;_possibleCommands;_propertygrid;constructor(){super(),this._restoreCachedInititalValues(),this._commandListDiv=this._getDomElement("commandList"),this._possibleCommands=this._getDomElement("possibleCommands"),this._propertygrid=this._getDomElement("propertygrid"),this.shadowRoot.adoptedStyleSheets=[Be,
|
|
305
|
+
`;static is="node-projects-visualization-simple-script-editor";serviceContainer;instanceServiceContainer;visualizationHandler;visualizationShell;scriptCommandsTypeInfo;propertiesTypeInfo;_script;_commandListDiv;_commandListFancyTree;_possibleCommands;_propertygrid;constructor(){super(),this._restoreCachedInititalValues(),this._commandListDiv=this._getDomElement("commandList"),this._possibleCommands=this._getDomElement("possibleCommands"),this._propertygrid=this._getDomElement("propertygrid"),this.shadowRoot.adoptedStyleSheets=[Be,r.style]}async ready(){this.addPossibleCommands(),this._parseAttributesToProperties(),this._bindingsParse(null,!0),this._assignEvents();let t=async s=>{let e=new W;e.visualizationHandler=this.visualizationHandler,e.visualizationShell=this.visualizationShell,e.serviceContainer=this.serviceContainer,e.instanceServiceContainer=this.instanceServiceContainer,e.bindableObjectsTarget="script",e.getTypeInfo=(n,l)=>$(this.propertiesTypeInfo,n,l),e.showHead=!1,e.typeName="IScriptMultiplexValue",e.title='Complex for "'+s.propertyPath+'"',typeof s.value=="object"?e.selectedObject=s.value??{}:e.selectedObject={},e.bindingDoubleClicked=n=>{n.bindabletype=="property"?e.setPropertyValue("source","property"):n.bindabletype=="context"?e.setPropertyValue("source","context"):e.setPropertyValue("source","signal"),e.setPropertyValue("name",n.fullName),e.refresh()},await this.visualizationShell.openConfirmation(e,{x:100,y:100,width:400,height:500,parent:this})&&(this._propertygrid.setPropertyValue(s.propertyPath,e.selectedObject),this._propertygrid.refresh())};this._propertygrid.visualizationHandler=this.visualizationHandler,this._propertygrid.visualizationShell=this.visualizationShell,this._propertygrid.serviceContainer=this.serviceContainer,this._propertygrid.instanceServiceContainer=this.instanceServiceContainer,this._propertygrid.bindableObjectsTarget="script",this._propertygrid.getTypeInfo=(s,e)=>$(this.scriptCommandsTypeInfo,s,e),this._propertygrid.getSpecialEditorForType=async(s,e,i,n,l)=>{if(!s.specialAllreadyAdded&&(s.specialAllreadyAdded=!0,s.format!=="collection"))if(typeof e=="object"&&e!==null||s.format==="complex"){let a=document.createElement("button");a.style.height="calc(100% - 6px)",a.style.position="relative",a.style.display="flex",a.style.justifyContent="center",a.style.width="20px",a.style.boxSizing="content-box",a.innerText="del",a.onclick=()=>{this._propertygrid.setPropertyValue(i,void 0),this._propertygrid.refresh()},n.nodeElem.insertAdjacentElement("afterbegin",a);let p=document.createElement("div");p.style.display="flex";let o=document.createElement("span");e?o.innerText=(e.source??"")+": "+(e.name??""):o.innerText="",o.style.overflow="hidden",o.style.whiteSpace="nowrap",o.style.textOverflow="ellipsis",o.style.flexGrow="1",o.title=JSON.stringify(e),p.appendChild(o);let u=document.createElement("button");return u.innerText="...",u.onclick=()=>{t({value:e,propertyPath:i})},p.appendChild(u),n.nodeElem.style.display="flex",p}else{let a=document.createElement("button");a.style.height="calc(100% - 6px)",a.style.position="relative",a.style.display="flex",a.style.justifyContent="center",a.style.width="20px",a.style.boxSizing="content-box",a.title="complex property value",a.style.opacity="0.2",a.innerText="...",a.onclick=()=>{t({value:e,propertyPath:i})},n.nodeElem.insertAdjacentElement("afterbegin",a),n.nodeElem.style.display="flex"}return null},this._propertygrid.propertyNodeContextMenu.on(s=>{q.show([{title:"edit complex value",action:async()=>{t(s)}},{title:"edit string",action:async()=>{let e=prompt("enter value:");e&&(this._propertygrid.setPropertyValue(s.propertyPath,e),this._propertygrid.refresh())}},{title:"remove complex value",action:async()=>{this._propertygrid.setPropertyValue(s.propertyPath,void 0),this._propertygrid.refresh()}}],s.event)})}async addPossibleCommands(){let t=Object.keys(this.scriptCommandsTypeInfo.definitions).filter(s=>this.scriptCommandsTypeInfo.definitions[s].type=="object");for(let s of t){if(s=="ScriptCommands")continue;let e=document.createElement("option");e.innerText=s,this._possibleCommands.add(e)}}loadScript(t){this._script=t;let s=[];for(let e of this._script.commands)e=N.upgradeScriptCommand(e),s.push(this.createTreeItem(e));this._commandListFancyTree=new Oe({...Ie,element:this._commandListDiv,icon:!1,source:s,activate:e=>{this._propertygrid.selectedObject=e.node.data.data.item},render:e=>{if(e.isNew){let i=e.nodeElem;i.oncontextmenu=n=>(e.node.setActive(),e.node.data.contextMenu&&e.node.data.contextMenu(n,e.node.data,e.node),n.preventDefault(),!1)}},dnd:{guessDropEffect:!0,preventRecursion:!0,preventVoidMoves:!1,serializeClipboardData:!1,dragStart:e=>(e.event.dataTransfer.effectAllowed="move",e.event.dataTransfer.dropEffect="move",!0),dragEnter:e=>(e.event.dataTransfer.dropEffect="move",!0),dragOver:e=>{e.event.dataTransfer.dropEffect="move"},drop:async e=>{e.sourceNode.moveTo(e.node,e.region=="before"?"before":"after")}}})}createTreeItem(t){return{title:t.type,data:{item:t},contextMenu:(e,i,n)=>{q.show([{title:"Remove Item",action:l=>n.remove()}],e)}}}addItem(){let s={type:this._possibleCommands.value},e=this.createTreeItem(s);this._commandListFancyTree.addChildren(e)}getScriptCommands(){return this._commandListFancyTree.root.children.map(s=>s.data.data.item)}};customElements.define(I.is,I);import{BaseCustomWebComponentConstructorAppend as Re,css as Ve,html as Ae}from"@node-projects/base-custom-webcomponent";var O=class extends Re{static style=Ve`
|
|
306
306
|
:host {
|
|
307
307
|
display: grid;
|
|
308
308
|
grid-template-columns: 80px 80px 80px auto;
|
|
@@ -335,7 +335,7 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
335
335
|
<input hidden="[[item.type !== 'boolean']]" type="checkbox" checked="{{item.value}}">
|
|
336
336
|
<div hidden="[[item.type !== 'null']]">-null-</div>
|
|
337
337
|
</template>
|
|
338
|
-
<button @click="[[this._add()]]" style="width: 40px; height: 20px; align-self: center;">add</button>`;static is="node-projects-visualization-parameter-editor";constructor(){super(),this._restoreCachedInititalValues()}ready(){this._bindingsParse()}_parameterArray;setParametersObject(
|
|
338
|
+
<button @click="[[this._add()]]" style="width: 40px; height: 20px; align-self: center;">add</button>`;static is="node-projects-visualization-parameter-editor";constructor(){super(),this._restoreCachedInititalValues()}ready(){this._bindingsParse()}_parameterArray;setParametersObject(t){t!=null?this._parameterArray=Object.keys(t).map(s=>({key:s,type:typeof t[s]=="object"?"null":typeof t[s],value:t[s]})):this._parameterArray=[],this._bindingsRefresh()}getParametersObject(){let t=!1,s={};for(let e of this._parameterArray)if(e.key)switch(t=!0,s[e.key]=null,e.type){case"string":s[e.key]=e.value.toString();break;case"number":let i=parseFloat(e.value);s[e.key]=isNaN(i)?0:i;break;case"boolean":s[e.key]=!!e.value;break}return t?s:null}_remove(t){this._parameterArray.splice(t,1),this._bindingsRefresh()}_add(){this._parameterArray.push({type:"null"}),this._bindingsRefresh()}};customElements.define(O.is,O);import{BaseCustomWebComponentConstructorAppend as je,css as We,html as Y}from"@node-projects/base-custom-webcomponent";import{ContextMenu as K,copyTextToClipboard as Q,getTextFromClipboard as Z,PropertiesHelper as ze}from"@node-projects/web-component-designer";var L=class r extends je{static style=We`
|
|
339
339
|
:host {
|
|
340
340
|
display: grid;
|
|
341
341
|
grid-template-columns: 20px 1fr auto;
|
|
@@ -381,10 +381,10 @@ export async function run(eventData, shadowRoot, parameters, relativeSignalsPath
|
|
|
381
381
|
<input value="[[this._getScriptName(item)]]" @keypress="[[this._changeScriptName(event, item)]]" hidden="[[this._getScriptType(item) !== 'js']]" placeholder="name" title="name" style="min-width: 50px; flex-basis: 30px; flex-grow: 2;" class="mth" type="text">
|
|
382
382
|
<input value="[[this._getRelativeSignalsPath(item)]]" @keypress="[[this._changeRelativeSignalsPath(event, item)]]" placeholder="relative signals path" title="relative signals path" style="min-width: 50px; flex-basis: 20px; flex-grow: 1;" class="mth" type="text">
|
|
383
383
|
<button css:background="[[this._hasParameters(item) ? 'lime' : '']]" style="display: flex; padding: 0; flex-grow: 0;" title="parameter" @click="[[this._editParameter(event, item)]]">p</button>
|
|
384
|
-
</div>`;static scriptTypeColors={js:"purple",blockly:"yellow",script:"lightgreen",empty:"pink"};static is="node-projects-visualization-event-assignment";constructor(){super(),this._restoreCachedInititalValues()}ready(){this._bindingsParse()}_blocklyToolbox;_instanceServiceContainer;_selectionChangedHandler;_selectedItems;_visualizationHandler;_visualizationShell;_scriptCommandsTypeInfo;_propertiesTypeInfo;events;initialize(s,t,e,i,n){this._visualizationHandler=s,this._visualizationShell=t,this._scriptCommandsTypeInfo=e,this._propertiesTypeInfo=i,this._blocklyToolbox=n}set instanceServiceContainer(s){this._instanceServiceContainer=s,this._selectionChangedHandler?.dispose(),this._selectionChangedHandler=this._instanceServiceContainer.selectionService.onSelectionChanged.on(t=>{this.selectedItems=t.selectedElements}),this.selectedItems=this._instanceServiceContainer.selectionService.selectedElements}_createControlsForScript(s){switch(this._getScriptType(s)){case"none":return""}return this.constructor.editRowTemplate.content.cloneNode(!0)}_getScriptName(s){if(this.selectedItems[0].hasAttribute("@"+s.name)){let t=this.selectedItems[0].getAttribute("@"+s.name);if(t[0]==="{"){if(t.includes("name"))return JSON.parse(t).name}else return t}return null}async _changeScriptName(s,t){if(s.key=="Enter"&&this.selectedItems&&this.selectedItems.length&&this.selectedItems[0].hasAttribute("@"+t.name)){let e=s.target.value,i=this.selectedItems[0].getAttribute("@"+t.name);if(i.startsWith("{")){let n=JSON.parse(i);n.name=e,this._selectedItems[0].setAttribute("@"+t.name,JSON.stringify(n))}else this._selectedItems[0].setAttribute("@"+t.name,e)}}_getRelativeSignalsPath(s){if(this.selectedItems[0].hasAttribute("@"+s.name)){let t=this.selectedItems[0].getAttribute("@"+s.name);if(t[0]==="{"&&t.includes("relativeSignalsPath"))return JSON.parse(t).relativeSignalsPath}return null}async _changeRelativeSignalsPath(s,t){if(s.key=="Enter"&&this.selectedItems&&this.selectedItems.length&&this.selectedItems[0].hasAttribute("@"+t.name)){let e=s.target.value,i=this.selectedItems[0].getAttribute("@"+t.name);if(i.startsWith("{")){let n=JSON.parse(i);n.relativeSignalsPath=e,this._selectedItems[0].setAttribute("@"+t.name,JSON.stringify(n))}else{let n={name:i,relativeSignalsPath:e};this._selectedItems[0].setAttribute("@"+t.name,JSON.stringify(n))}}}_hasParameters(s){return this.selectedItems[0].hasAttribute("@"+s.name)?this.selectedItems[0].getAttribute("@"+s.name).includes("parameters"):!1}_getScriptTypeColor(s){let t=this._getScriptType(s);return l.scriptTypeColors[t]??"white"}_getScriptType(s){if(this.selectedItems&&this.selectedItems.length&&this.selectedItems[0].hasAttribute("@"+s.name)){let t=this.selectedItems[0].getAttribute("@"+s.name);if(t.startsWith("{")){let e=JSON.parse(t);return"blocks"in e?"blockly":"commands"in e?"script":"js"}else return t==""?"empty":"js"}return"none"}_getEventMethodname(s){return this.selectedItems.length?this.selectedItems[0].getAttribute("@"+s.name):""}_inputMthName(s,t){let e=s.target;this.selectedItems[0].setAttribute("@"+t.name,e.value)}_ctxMenu(s,t){s.preventDefault();let e=this._getScriptType(t);if(e=="empty")this._showContextMenuAssignScript(s,t,!0);else if(e!="none"){let i=[{title:"remove",action:()=>{this.selectedItems[0].removeAttribute("@"+t.name),this._bindingsRefresh()}},{title:"-"},{title:"copy",action:()=>{Q(this.selectedItems[0].getAttribute("@"+t.name))}},{title:"paste",action:async()=>{this.selectedItems[0].setAttribute("@"+t.name,await Z()),this._bindingsRefresh()}}];K.show(i,s)}else this._showContextMenuAssignScript(s,t,!0)}async _addEvent(s){if(s.key=="Enter"){let t=this._getDomElement("addEventInput");this._selectedItems[0].setAttribute("@"+ze.camelToDashCase(t.value.replaceAll(" ","-")),""),t.value="",this.scrollTop=0,this.refresh()}}_createAssignScriptContextMenu(s,t){let e=[{title:"Simple Script",action:()=>{this._editEvent("script",s,t)}},{title:"Javascript",action:()=>{let n=prompt("name of function ?");n&&(this._selectedItems[0].setAttribute("@"+t.name,n),this.refresh(),this._editEvent("js",null,t))}},{title:"Blockly",action:()=>{this._editBlockly(null,t)}}],i=this._getScriptType(t);return i!="none"&&(e.push({title:"-"}),e.push({title:"remove",action:()=>{this.selectedItems[0].removeAttribute("@"+t.name),this._bindingsRefresh()}})),i!="empty"&&e.push({title:"-"},{title:"copy",action:()=>{Q(this.selectedItems[0].getAttribute("@"+t.name))}},{title:"paste",action:async()=>{this.selectedItems[0].setAttribute("@"+t.name,await Z()),this._bindingsRefresh()}}),e}async _showContextMenuAssignScript(s,t,e){s.preventDefault();let i=this._getScriptType(t);if(i!="none"&&i!="empty"&&!e)this._editEvent(i,s,t);else{let n=this._createAssignScriptContextMenu(s,t);K.show(n,s)}}async _editParameter(s,t){let e=this.selectedItems[0],i=new O,n={};i.title="ParameterEditor for '"+t.name+"' of '"+e.name+"'";let o=e.getAttribute("@"+t.name);if(o&&o[0]=="{")try{n=JSON.parse(o).parameters}catch{}if(i.setParametersObject(n),await this._visualizationShell.openConfirmation(i,{x:100,y:100,width:700,height:500})){let c=i.getParametersObject(),r={name:o,parameters:c};o&&o[0]=="{"&&(r=JSON.parse(o),r.parameters=c),c==null&&delete r.parameters;let u=JSON.stringify(r);e.setAttribute("@"+t.name,u),this._bindingsRefresh()}}async _editBlockly(s,t){let e=this.selectedItems[0],i=new C(this._blocklyToolbox);i.title="Blockly Script for '"+t.name+"' of '"+e.name+"'";let n=e.getAttribute("@"+t.name),o=null,a=null;if(n){let r=JSON.parse(n);o=r.parameters,a=r.relativeSignalsPath,i.load(r)}if(await this._visualizationShell.openConfirmation(i,{x:100,y:100,width:700,height:500})){let r=i.save();o&&(r.parameters=o),a&&(r.relativeSignalsPath=a),e.setAttribute("@"+t.name,JSON.stringify(r)),this._bindingsRefresh()}}async _editJavascript(s,t){}async _editSimpleScript(s,t){let e=this.selectedItems[0],i=e.getAttribute("@"+t.name);if(!i||i.startsWith("{")){let n={commands:[]},o=null,a=null;i&&(n=JSON.parse(i),o=n.parameters,a=n.relativeSignalsPath);let c=new I;if(c.serviceContainer=e.serviceContainer,c.instanceServiceContainer=e.instanceServiceContainer,c.scriptCommandsTypeInfo=this._scriptCommandsTypeInfo,c.propertiesTypeInfo=this._propertiesTypeInfo,c.visualizationShell=this._visualizationShell,c.visualizationHandler=this._visualizationHandler,c.loadScript(n),c.title="Script '"+t.name+"' on "+e.name,await this._visualizationShell.openConfirmation(c,{x:100,y:100,width:600,height:500})){let u=c.getScriptCommands();if(u&&u.length){let g={commands:u};o&&(g.parameters=o),a&&(g.relativeSignalsPath=a);let h=JSON.stringify(g);e.setAttribute("@"+t.name,h),this._bindingsRefresh()}}}}async _editEvent(s,t,e){s=="js"?this._editJavascript(t,e):s=="blockly"?this._editBlockly(t,e):this._editSimpleScript(t,e)}refresh(){this._selectedItems!=null&&this._selectedItems.length?this.events=this._selectedItems[0].serviceContainer.getLastServiceWhere("eventsService",s=>s.isHandledElementFromEventsService(this._selectedItems[0])).getPossibleEvents(this._selectedItems[0]):this.events=[],this._bindingsRefresh()}get selectedItems(){return this._selectedItems}set selectedItems(s){this._selectedItems!=s&&(this._selectedItems=s,this.refresh())}};customElements.define(L.is,L);import{TypedEvent as De,cssFromString as Le}from"@node-projects/base-custom-webcomponent";import{BindingTarget as y}from"@node-projects/web-component-designer/dist/elements/item/BindingTarget.js";import{PropertiesHelper as v}from"@node-projects/web-component-designer/dist/elements/services/propertiesService/services/PropertiesHelper.js";var S="bind-prop:",B="bind-attr:",R="bind-class:",V="bind-css:",A="bind-cssvar:",w="bind-content:",F="bind-visible:",Pe="bind(",Me="--tmpBinding_",Ft=/{{(.*)}}/;function z(l){return l.constructor?.elementProperties!=null}function J(l){let s=[],t=[],e="";for(let i=0;i<l.length;i++)l[i]=="{"?(s.push(e),e=""):l[i]=="}"?(t.push(e),e=""):e+=l[i];return s.push(e),{parts:s,signals:t}}function P(l,s){let t=s.split("."),e=l;for(let i of t){if(e==null||typeof e!="object")return;e=e[i]}return e}var H=class{parts;signals;values;unsubscribeTargetValue;cleanupCalls=[];combinedName;disposed;valueChangedCb;visualizationHandler;element;relativeSignalPath;constructor(s,t,e,i,n,o,a,c){this.visualizationHandler=t,this.valueChangedCb=i,this.element=n,this.relativeSignalPath=o,this.parseIndirectBinding(e),this.values=new Array(this.signals.length);for(let r=0;r<this.signals.length;r++){let u=this.signals[r];if(u[0]==="?"&&u[1]==="?"){let d=u.substring(2);if(d.includes(".")){let p=P(a,d);this.handleValueChanged(p,r)}else{this.handleValueChanged(a[d],r);let p=()=>this.handleValueChanged(a[d],r),m=s.getChangedEventName(a,d);a.addEventListener(m,p),this.cleanupCalls.push(()=>a.removeEventListener(m,p))}continue}else if(u[0]==="#"&&u[1]==="#"){let d=u.substring(2);if(d.includes(".")){let p=P(n,d);this.handleValueChanged(p,r)}else{this.handleValueChanged(n[d],r);let p=()=>this.handleValueChanged(n[d],r),m=s.getChangedEventName(n,d);n.addEventListener(m,p),this.cleanupCalls.push(()=>n.removeEventListener(m,p))}continue}else if(u[0]==="\xA7"){let d=u.substring(1),p=c.valueProvider(d,{element:n,relativeSignalPath:o,root:a});p instanceof Promise?p.then(f=>this.handleValueChanged(f,r)):this.handleValueChanged(p,r),c.valueChangedCallbacks||(c.valueChangedCallbacks=new Map);let m=c.valueChangedCallbacks.get(d);m==null&&(m=[],c.valueChangedCallbacks.set(d,m)),m.push(()=>{let f=c.valueProvider(d,{element:n,relativeSignalPath:o,root:a});f instanceof Promise?f.then(x=>this.handleValueChanged(x,r)):this.handleValueChanged(f,r)})}else(u[0]==="?"||u[0]==="#")&&(u.includes(".")?u=P(a,u.substring(1)):u=a[u.substring(1)]);let g=(d,p)=>this.handleValueChanged(p.val,r),h=this.visualizationHandler.subscribeState(u,g);this.cleanupCalls.push(()=>this.visualizationHandler.unsubscribeState(this.signals[r],g,h))}}parseIndirectBinding(s){let{parts:t,signals:e}=J(s);this.parts=t,this.signals=e;for(let i=0;i<e.length;i++)e[i][0]=="."&&(e[i]=this.visualizationHandler.getNormalizedSignalName(e[i],this.relativeSignalPath,this.element))}handleValueChanged(s,t){this.values[t]=s;let e=this.parts[0];for(let i=0;i<this.parts.length-1;i++){let n=this.values[i];if(n==null)return;e+=n+this.parts[i+1]}if(e[0]=="."&&(e=this.visualizationHandler.getNormalizedSignalName(e,this.relativeSignalPath,this.element)),this.combinedName!=e&&(this.unsubscribeTargetValue&&this.visualizationHandler.unsubscribeState(this.combinedName,this.unsubscribeTargetValue[0],this.unsubscribeTargetValue[1]),!this.disposed)){this.combinedName=e;let i=(n,o)=>this.valueChangedCb(o);this.unsubscribeTargetValue=[i,this.visualizationHandler.subscribeState(e,i)]}}dispose(){this.disposed=!0,this.unsubscribeTargetValue&&(this.visualizationHandler.unsubscribeState(this.combinedName,this.unsubscribeTargetValue[0],this.unsubscribeTargetValue[1]),this.unsubscribeTargetValue=null);for(let s=0;s<this.signals.length;s++)this.cleanupCalls[s]()}setState(s){this.disposed||this.visualizationHandler.setState(this.combinedName,s)}},ee=class l{_visualizationHandler;namedConverterCallback;constructor(s){this._visualizationHandler=s}getChangedEventName(s,t){let e=t.indexOf("::");return e>=0?t.substring(e+2):s instanceof HTMLInputElement||s instanceof HTMLSelectElement?"change":z(s)?v.camelToDashCase(t):v.camelToDashCase(t)+"-changed"}parseBinding(s,t,e,i,n){let o=t.substring(n.length);if(i===y.cssvar&&(o="--"+o),!e.startsWith("{")){let c={signal:e,target:i};if(e[0]==="="){if(e=e.substring(1),c.signal=e,e.includes("::")){let r=e.split("::");e=r[0],c.signal=e,c.events=r[1].split(",")}c.twoWay=!0,c.events||(s instanceof HTMLInputElement?c.events=[this.getChangedEventName(s,o)]:s instanceof HTMLSelectElement?c.events=[this.getChangedEventName(s,o)]:z(s)?c.events=[this.getChangedEventName(s,o)]:(c.events=[this.getChangedEventName(s,o)],c.maybeLitElement=!0,c.litEventNames=[this.getChangedEventName(s,o)]))}if(e[0]==="!"&&(c.signal=e.substring(1),c.inverted=!0),c.signal.includes(";")){let r=c.signal.split(";");c.expression=r.pop(),c.signal=r.join(";")}return i===y.cssvar||i===y.class?[l.dotToCamelCase(o),c]:i===y.attribute?[o,c]:[v.dashToCamelCase(o),c]}let a=JSON.parse(e);return a.target=i,a.twoWay&&(a.events==null||a.events.length==0)&&(s instanceof HTMLInputElement?a.events=["change"]:s instanceof HTMLSelectElement?a.events=["change"]:a.events=[this.getChangedEventName(s,o)]),i===y.cssvar||i===y.class?[l.dotToCamelCase(o),a]:i===y.attribute?[o,a]:[v.dashToCamelCase(o),a]}serializeBinding(s,t,e){let i={...e};delete i.type,e.twoWay?e.events!=null&&e.events.length==1&&(s instanceof HTMLInputElement&&e.events?.[0]=="change"||s instanceof HTMLSelectElement&&e.events?.[0]=="change"||z(s)&&e.events?.[0]==t||!z(s)&&e.events?.[0]==t+"-changed")&&delete i.events:(delete i.events,delete i.expressionTwoWay);let n=i.twoWay&&i.events?.length>0?"::"+i.events.join(","):"",o=!1;return(n&&e.expression?.includes("::")||e.expressionTwoWay?.includes("::"))&&(o=!0),e.signal.trim()[0]=="{"&&(o=!0),!o&&e.target==y.property&&!e.expression&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?t=="textContent"?[w+"text",(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:t=="innerHTML"?[w+"html",(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:[S+v.camelToDashCase(t),(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:!o&&e.target==y.property&&e.expression&&!e.expression.includes(`
|
|
385
|
-
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?
|
|
386
|
-
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[B+v.camelToDashCase(
|
|
387
|
-
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[R+v.camelToDashCase(
|
|
388
|
-
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[V+v.camelToDashCase(
|
|
389
|
-
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[A+v.camelToDashCase(t),(e.inverted?"!":"")+e.signal+";"+e.expression+n]:((e.inverted===null||e.inverted===!1)&&delete i.inverted,(e.expression===null||e.expression==="")&&delete i.expression,(e.expressionTwoWay===null||e.expressionTwoWay==="")&&delete i.expressionTwoWay,(e.twoWay===null||e.twoWay===!1)&&delete i.twoWay,delete i.target,e.historic||delete i.historic,e.target==y.content?[w+"html",JSON.stringify(i)]:e.target==y.attribute?[B+v.camelToDashCase(t),JSON.stringify(i)]:e.target==y.class?[R+l.camelToDotCase(t),JSON.stringify(i)]:e.target==y.css?[V+v.camelToDashCase(t),JSON.stringify(i)]:e.target==y.cssvar?[A+l.camelToDotCase(t.substring(2)),JSON.stringify(i)]:e.target==y.property&&t=="innerHTML"?[w+"html",JSON.stringify(i)]:e.target==y.property&&t=="textContent"?[w+"text",JSON.stringify(i)]:[S+v.camelToDashCase(t),JSON.stringify(i)])}getBindingAttributeName(s,t,e){return e==y.attribute?B+v.camelToDashCase(t):e==y.class?R+l.camelToDotCase(t):e==y.css?V+v.camelToDashCase(t):e==y.visible?F:e==y.cssvar?A+l.camelToDotCase(t):e==y.property&&t=="innerHTML"?w+"html":e==y.property&&t=="textContent"?w+"text":S+v.camelToDashCase(t)}*getBindings(s){if(s.attributes)for(let t of s.attributes)t.name.startsWith(S)?yield this.parseBinding(s,t.name,t.value,y.property,S):t.name.startsWith(w)?yield this.parseBinding(s,t.name==="bind-content:html"?"bind-prop:inner-h-t-m-l":"bind-prop:text-content",t.value,y.property,S):t.name.startsWith(B)?yield this.parseBinding(s,t.name,t.value,y.attribute,B):t.name.startsWith(R)?yield this.parseBinding(s,t.name,t.value,y.class,R):t.name.startsWith(V)?yield this.parseBinding(s,t.name,t.value,y.css,V):t.name.startsWith(A)?yield this.parseBinding(s,t.name,t.value,y.cssvar,A):t.name.startsWith(F)&&(yield this.parseBinding(s,t.name,t.value,y.visible,F))}applyAllBindings(s,t,e,i){let n=[],o=document.createTreeWalker(s,NodeFilter.SHOW_ELEMENT),a;for(;a=o.nextNode();){let c=this.getBindings(a);for(let r of c)try{let u=this.applyBinding(a,r,t,e,i);if(n.push(u),r[1].maybeLitElement&&a.localName.includes("-")&&!customElements.get(a.localName)){let g=a,h=r;customElements.whenDefined(a.localName).then(()=>{z(g)&&(u(),h[1].events=h[1].litEventNames,n.push(this.applyBinding(g,h,t,e,i)))})}}catch(u){console.warn("error applying binding",a,r,u)}}return n}static#e=0;async parseCssBindings(s,t,e,i){let n=await import("@adobe/css-tools"),o=n.parse(s),a;for(let r of o.stylesheet.rules)if(r.type===n.CssTypes.rule){for(let u of r.declarations)if(u.type===n.CssTypes.declaration&&u.value.includes(Pe)){let g=this.parseCssBinding(u.value,t,e,i);u.value=g[0],a?a.push(...g[1]):a=g[1]}}let c=n.stringify(o,{indent:"",compress:!0});return[Le(c),a]}parseCssBinding(s,t,e,i,n){s=s.trim();let o="",a="",c=!1,r="",u=!1,g=null,h=[];for(let d=0;d<s.length;d++){let p=s[d];if(c)if(u)r+=p;else if(g&&p==="\\")u=!0;else if(p===g)g=null;else if(g===null&&p===")"){let m=l.#e++,f=Me+m,x=[f,{signal:r,target:y.cssvar}];r.startsWith("{")&&(x=JSON.parse(r)),h.push(this.applyBinding(t,x,e,i,n)),o+="var("+f+")",c=!1,r=""}else r+=p;else p==="("?(a!=="bind"?(o+=a,o+=p):(c=!0,s[d+1]==="'"||s[d+1]==='"'?(d++,g=s[d]):g=null),a=""):p===" "||p===","||p==="("||p==="+"||p==="-"||p==="*"||p==="/"?(o+=a+p,a=""):a+=p}return[o+a,h]}applyBinding(s,t,e,i,n){let o=[],a,c=()=>{for(let h of o)this._visualizationHandler.unsubscribeState(h[0],h[1],h[2]);if(a)for(let h of a)h()},r=t[1].signal.split(";"),u=new Array(r.length);for(let h=0;h<r.length;h++){let d=r[h];if(u[h]="__"+h,d.includes(":")){let p=d.split(":");u[h]=p[0],d=p[1],r[h]=d}if(d[0]==="?"){if(i){let p=d.substring(1);if(p[0]=="?")r[h]=p;else{r[h]=i[p],p[0]==="$"&&(p=p.substring(1),r[h]="$"+i[p]);let m=()=>{c(),this.applyBinding(s,t,e,i,n)},f=this.getChangedEventName(i,p);i.addEventListener(f,m),a||(a=[]),a.push(()=>i.removeEventListener(f,m))}}}else if(d[0]==="#"){let p=d.substring(1);if(p[0]=="#")r[h]=p;else{r[h]=i[p],p[0]==="$"&&(p=p.substring(1),r[h]="$"+i[p]);let m=()=>{c(),this.applyBinding(s,t,e,i,n)},f=this.getChangedEventName(s,p);i.addEventListener(f,m),a||(a=[]),a.push(()=>i.removeEventListener(f,m))}}d[0]==="."&&(r[h]=this._visualizationHandler.getNormalizedSignalName(d,e,s))}let g=new Array(r.length);for(let h=0;h<r.length;h++){let d=r[h];if(d[0]==="?"){if(i){let p=d.substring(1),m=()=>{let f=!1;f||(f=!0,this.handleValueChanged(s,t,i[p],g,h,u,!1,e),f=!1)};i.addEventListener(v.camelToDashCase(p)+"-changed",m),a||(a=[]),a.push(()=>i.removeEventListener(v.camelToDashCase(p)+"-changed",m));try{this.handleValueChanged(s,t,i[p],g,h,u,!1,e)}catch(f){console.error(f)}t[1].twoWay&&h==0&&this.addTwoWayBinding(t,s,f=>i[p]=f)}}else if(d[0]==="#"){let p=d.substring(1),m=()=>{let f=!1;f||(f=!0,this.handleValueChanged(s,t,s[p],g,h,u,!1,e),f=!1)};s.addEventListener(v.camelToDashCase(p)+"-changed",m),a||(a=[]),a.push(()=>s.removeEventListener(v.camelToDashCase(p)+"-changed",m));try{this.handleValueChanged(s,t,s[p],g,h,u,!1,e)}catch(f){console.error(f)}t[1].twoWay&&h==0&&this.addTwoWayBinding(t,s,f=>s[p]=f)}else if(d[0]==="$"){let p=d.substring(1);p[0]==="."&&(p=this._visualizationHandler.getNormalizedSignalName(p,e,s)),this._visualizationHandler.getObject(p).then(m=>{this.handleValueChanged(s,t,m,g,h,u,!0,e)})}else if(d[0]==="\xA7"){let p=d.substring(1),m=n.valueProvider(p,{element:s,binding:t,relativeSignalPath:e,root:i});m instanceof Promise?m.then(x=>this.handleValueChanged(s,t,x,g,h,u,!0,e)):this.handleValueChanged(s,t,m,g,h,u,!0,e),n.valueChangedCallbacks||(n.valueChangedCallbacks=new Map);let f=n.valueChangedCallbacks.get(p);f==null&&(f=[],n.valueChangedCallbacks.set(p,f)),f.push(()=>{let x=n.valueProvider(p,{element:s,binding:t,relativeSignalPath:e,root:i});x instanceof Promise?x.then(ue=>this.handleValueChanged(s,t,ue,g,h,u,!0,e)):this.handleValueChanged(s,t,x,g,h,u,!0,e)})}else if(d.includes("{")){let p=new H(this,this._visualizationHandler,d,m=>this.handleValueChanged(s,t,m.val,g,h,u,!1,e),s,e,i,n);a||(a=[]),a.push(()=>p.dispose()),t[1].twoWay&&h==0&&this.addTwoWayBinding(t,s,m=>p.setState(m))}else if(t[1].historic)if(t[1].historic.reloadInterval){let p={timerId:-1},m=async()=>{let f=await this._visualizationHandler.getHistoricData(d,t[1].historic);this.handleValueChanged(s,t,f?.values,g,h,u,!0,e),p.timerId!==null&&(p.timerId=setTimeout(m,t[1].historic.reloadInterval))};m(),a||(a=[]),a.push(()=>{p.timerId>0&&clearTimeout(p.timerId),p.timerId=null})}else this._visualizationHandler.getHistoricData(d,t[1].historic).then(p=>this.handleValueChanged(s,t,p?.values,g,h,u,!0,e));else{let p=(m,f)=>this.handleValueChanged(s,t,f.val,g,h,u,!1,e);o.push([d,p,this._visualizationHandler.subscribeState(d,p)]),this._visualizationHandler.getState(d).then(m=>this.handleValueChanged(s,t,m?.val,g,h,u,!1,e)),t[1].twoWay&&h==0&&this.addTwoWayBinding(t,s,m=>this._visualizationHandler.setState(d,m))}}return c}addTwoWayBinding(s,t,e){s[1].expressionTwoWay&&(s[1].compiledExpressionTwoWay||(s[1].expressionTwoWay.includes("return ")?s[1].compiledExpressionTwoWay=new Function(["value"],s[1].expressionTwoWay):s[1].compiledExpressionTwoWay=new Function(["value"],"return "+s[1].expressionTwoWay)));for(let i of s[1].events){let n=t[i];n instanceof De?n.on(()=>{let o;s[1].target==y.attribute?o=t.getAttribute(s[0]):o=t[s[0]],o=l.parseValueWithType(o,s),s[1].compiledExpressionTwoWay&&(o=s[1].compiledExpressionTwoWay(o)),e(o)}):t.addEventListener(i,o=>{let a;s[1].target==y.attribute?a=t.getAttribute(s[0]):a=t[s[0]],a=l.parseValueWithType(a,s),s[1].compiledExpressionTwoWay&&(a=s[1].compiledExpressionTwoWay(a)),e(a)})}}static parseValueWithType(s,t){if(t[1].type)switch(t[1].type){case"number":return parseFloat(s);case"boolean":return s===!0||s==="true"||!!parseInt(s);case"string":return s?.toString();case"integer":return parseInt(s)}return s}handleValueChanged(s,t,e,i,n,o,a,c){let r=e;if(!a&&n==0&&(r=l.parseValueWithType(r,t)),i[n]=r,t[1].expression&&(t[1].compiledExpression||(o.push("__res"),t[1].expression.includes("return ")?t[1].compiledExpression=new Function(o,t[1].expression):t[1].compiledExpression=new Function(o,"return "+t[1].expression)),r=t[1].compiledExpression(...i),i[o.length-1]=r),t[1].converter)if(typeof t[1].converter=="string")r=this.namedConverterCallback(t[1].converter,r,s,t);else{let u=r!=null?r.toString():r;if(u in t[1].converter){let g=t[1].converter[u];typeof g=="string"?r=new Function(o,"return `"+t[1].converter[u]+"`")(...i):r=g}else{let g=!1,h=parseFloat(r);for(let d in t[1].converter)if(d.length>2&&d[0]===">"&&d[1]==="="){let p=parseFloat(d.substring(2));if(h>=p){let m=t[1].converter[d];typeof m=="string"?r=new Function(o,"return `"+t[1].converter[d]+"`")(...i):r=m,g=!0;break}}else if(d.length>2&&d[0]==="<"&&d[1]==="="){let p=parseFloat(d.substring(2));if(h<=p){let m=t[1].converter[d];typeof m=="string"?r=new Function(o,"return `"+t[1].converter[d]+"`")(...i):r=m,g=!0;break}}else if(d.length>1&&d[0]===">"){let p=parseFloat(d.substring(1));if(h>p){let m=t[1].converter[d];typeof m=="string"?r=new Function(o,"return `"+t[1].converter[d]+"`")(...i):r=m,g=!0;break}}else if(d.length>1&&d[0]==="<"){let p=parseFloat(d.substring(1));if(h<p){let m=t[1].converter[d];typeof m=="string"?r=new Function(o,"return `"+t[1].converter[d]+"`")(...i):r=m,g=!0;break}}else{let p=d.split("-");if(p.length>1&&(p[0]===""||h>=parseFloat(p[0]))&&(p[1]===""||parseFloat(p[1])>=h)){let m=t[1].converter[d];typeof m=="string"?r=new Function(o,"return `"+t[1].converter[d]+"`")(...i):r=m,g=!0;break}}!g&&t[1].converterDefault!==void 0&&(r=t[1].converterDefault)}}if(t[1].inverted&&(r=!r),t[1].writeBackSignal){let u=t[1].writeBackSignal;u[0]==="."&&(u=c+u),this._visualizationHandler.setState(u,r,!0)}t[1].target==y.property?s[t[0]]=r:t[1].target==y.attribute?s.setAttribute(t[0],r):t[1].target==y.css?s.style[t[0]]=r:t[1].target==y.cssvar?s.style.setProperty(t[0],r):t[1].target==y.class?r?s.classList.add(t[0]):s.classList.remove(t[0]):t[1].target==y.visible&&(s.style.visibility=r?"":"collapse")}static camelToDotCase(s){return s.replace(/([A-Z])/g,t=>`.${t[0].toLowerCase()}`)}static dotToCamelCase(s){return s.replace(/\.([a-z])/g,t=>t[1].toUpperCase())}};var te=class{name;relativeSignalsPath;commands;parameters};import{deepValue as _,setDeepValue as se,sleep as Fe}from"@node-projects/web-component-designer/dist/elements/helper/Helper.js";import W from"long";var ie=class{_visualizationHandler;_subscriptionCallback=()=>{};constructor(l){this._visualizationHandler=l}async execute(l,s){for(let t=0;t<l.length;t++){let e=l[t];if(e.type=="Exit")break;if(e.type=="Goto"){let i=await this.getValue(e.label,s);if(t=l.findIndex(n=>n.type=="Label"&&n.label==i),t<0)break}else if(e.type=="Condition"){let i=await this.getValue(e.value1,s),n=await this.getValue(e.value2,s),o=await this.getValue(e.comparisonType,s),a=!1;switch(o){case"==null":a=i==null;break;case"!=null":a=i!=null;break;case"==true":a=i==!0;break;case"==false":a=i==!1;break;case"==":a=i==n;break;case"!=":a=i!=n;break;case">":a=i>n;break;case"<":a=i<n;break;case">=":a=i>=n;break;case"<=":a=i<=n;break;case"&&":a=i&&n;break;case"||":a=i||n;break}if(a){await this.runExternalScript(await this.getValue(e.trueScriptName,s),await this.getValue(e.trueScriptType,s));let c=await this.getValue(e.trueGotoLabel,s);if(c&&(t=l.findIndex(r=>r.type=="Label"&&r.label==c),t<0))break}else{await this.runExternalScript(await this.getValue(e.falseScriptName,s),await this.getValue(e.falseScriptType,s));let c=await this.getValue(e.falseGotoLabel,s);if(c&&(t=l.findIndex(r=>r.type=="Label"&&r.label==c),t<0))break}}else await this.runScriptCommand(e,s)}}async getValueFromTarget(l,s,t){return l==="property"?_(t.root,s):l==="elementProperty"?_(t.element,s):(await this._visualizationHandler.getState(this.getSignalName(s,t)))?.val}async setValueOnTarget(l,s,t,e){l==="property"?se(t.root,s,e):l==="elementProperty"?se(t.element,s,e):await this._visualizationHandler.setState(this.getSignalName(s,t),e)}async runExternalScript(l,s){}async runScriptCommand(command,context){switch(command.type){case"Comment":case"Label":case"Condition":case"Goto":case"Exit":break;case"OpenUrl":{window.open(await this.getValue(command.url,context),command.target);break}case"Delay":{let l=await this.getValue(command.value??500,context);await Fe(l);break}case"Console":{let l=await this.getValue(command.target??"log",context),s=await this.getValue(command.message,context);console[l](s);break}case"ToggleSignalValue":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.target,context),t=await this.getValueFromTarget(s,l,context);await this._visualizationHandler.setState(this.getSignalName(l,context),!t);break}case"ToggleSignalValueThroughList":{let l=await this.getValue(command.valueList,context),s=await this.getValue(command.signal,context),t=await this.getValue(command.target,context),e=await this.getValueFromTarget(t,s,context),i=l.indexOf(e)+1;i>=l.length&&(i=0);let n=l[i];await this._visualizationHandler.setState(this.getSignalName(s,context),n);break}case"SetSignalValue":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.target,context);await this.setValueOnTarget(s,l,context,await this.getValue(command.value,context));break}case"IncrementSignalValue":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.target,context),e=await this.getValueFromTarget(s,l,context)+await this.getValue(command.value,context);await this.setValueOnTarget(s,l,context,e);break}case"DecrementSignalValue":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.target,context),e=await this.getValueFromTarget(s,l,context)-await this.getValue(command.value,context);await this.setValueOnTarget(s,l,context,e);break}case"CalculateSignalValue":{let formula=await this.getValue(command.formula,context),target=await this.getValue(command.target,context),targetSignal=await this.getValue(command.targetSignal,context),nm=await this.parseStringWithValues(formula,context),result=eval(nm);await this.setValueOnTarget(target,targetSignal,context,result);break}case"SetBitInSignal":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.bitNumber??0,context),t=await this.getValue(command.target,context),e=await this.getValueFromTarget(t,l,context),i=W.fromNumber(1).shiftLeft(s),n=W.fromNumber(e).or(i).toNumber();await this.setValueOnTarget(t,l,context,n);break}case"ClearBitInSignal":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.bitNumber??0,context),t=await this.getValue(command.target,context),e=await this.getValueFromTarget(t,l,context),i=W.fromNumber(1).shiftLeft(s);i.negate();let n=W.fromNumber(e).and(i).toNumber();await this.setValueOnTarget(t,l,context,n);break}case"ToggleBitInSignal":{let l=await this.getValue(command.signal,context),s=await this.getValue(command.bitNumber??0,context),t=await this.getValue(command.target,context),e=await this.getValueFromTarget(t,l,context),i=W.fromNumber(1).shiftLeft(s),n=W.fromNumber(e).xor(i).toNumber();await this.setValueOnTarget(t,l,context,n);break}case"Javascript":{let l=await this.getValue(command.script,context),s=context;s.shadowRoot=context.element.getRootNode(),s.instance=context.shadowRoot.host,command.compiledScript||(command.compiledScript=new Function("context",l)),command.compiledScript(s);break}case"SetElementProperty":{command=N.upgradeSetElementProperty(command);let l=await this.getValue(command.name,context);l===""&&(l=null);let s=await this.getValue(command.value,context),t=await this.getValue(command.parentIndex??0,context),e=await this.getValue(command.target??"property",context),i=await this.getValue(command.targetSelectorTarget??"container",context),n=await this.getValue(command.targetSelector,context),o=await this.getValue(command.mode??"toggle",context),a=this.getTargetFromTargetSelector(context,i,t,n);for(let c of a)e=="attribute"?c.setAttribute(l,s):e=="property"?c[l]=s:e=="css"?c.style[l]=s:e=="class"&&(o==="toggle"?c.classList.toggle(l??s):o==="remove"?c.classList.remove(l??s):c.classList.add(l??s));break}case"SubscribeSignal":{let l=await this.getValue(command.signal,context);if(await this.getValue(command.oneTime,context)){let t=()=>{this._visualizationHandler.unsubscribeState(l,t,null)};this._visualizationHandler.subscribeState(l,t)}else this._visualizationHandler.subscribeState(l,this._subscriptionCallback);break}case"UnsubscribeSignal":{let l=await this.getValue(command.signal,context);this._visualizationHandler.unsubscribeState(l,this._subscriptionCallback,null);break}case"WriteSignalsInGroup":{let l=await this.getValue(command.group,context);this._visualizationHandler.writeSignalsInGroup(l);break}case"ClearSignalsInGroup":{let l=await this.getValue(command.group,context);this._visualizationHandler.clearSignalsInGroup(l);break}case"RunScript":{let l=await this.getValue(command.name,context),s=await this.getValue(command.scriptType,context);this.runExternalScript(l,s);break}case"ShowMessageBox":{let l=null,s=await this.getValue(command.buttons,context);if(s=="ok"){let e=await this.getValue(command.message,context);alert(e),l=1}else if(s=="yesNo"){let e=await this.getValue(command.message,context);confirm(e)?l=1:l=2}let t=await this.getValue(command.resultSignal,context);t&&this._visualizationHandler.setState(t,l);break}case"Login":case"Logout":case"CloseDialog":case"OpenDialog":case"OpenScreen":case"SwitchLanguage":case"CopySignalValuesFromFolder":case"ExportSignalValuesAsJson":case"ImportSignalValuesFromJson":{alert('command: "'+command.type+'" is not yet implemented');break}}}getTarget(l,s,t){if(s==="container"){let e=l.element.getRootNode().host;for(let i=0;i<(t??0);i++)e=e.getRootNode().host;return e}else if(s==="element"){let e=l.element;for(let i=0;i<(t??0);i++)e=e.parentElement;return e}return null}getTargetFromTargetSelector(l,s,t,e){let i=this.getTarget(l,s,t),n=[i];return e&&(s==="container"?n=i.shadowRoot.querySelectorAll(e):n=i.querySelectorAll(e)),n}async getValue(value,outerContext){if(value==null)return null;if(typeof value=="object")switch(value.source){case"property":return _(outerContext.root,value.name);case"elementProperty":return _(outerContext.element,value.name);case"signal":return(await this._visualizationHandler.getState(this.getSignalName(value.name,outerContext)))?.val;case"signalInProperty":{let l=_(outerContext.root,value.name);return(await this._visualizationHandler.getState(this.getSignalName(l,outerContext)))?.val}case"event":{let l=outerContext.event;return value.name&&(l=_(l,value.name)),l}case"parameter":return outerContext.parameters[value.name];case"context":return _(outerContext,value.name);case"complexString":{let l=value.name;return l!=null?await this.parseStringWithValues(l,outerContext):null}case"complexSignal":{let l=value.name;if(l!=null){let s=await this.parseStringWithValues(l,outerContext);return(await this._visualizationHandler.getState(this.getSignalName(s,outerContext)))?.val}return null}case"expression":{var ctx=outerContext;return eval(value.name)}}return value}async getStateOrFieldOrParameter(name,context){if(name[0]==="\xA7"){var ctx=context;return eval("ctx."+name.substring(1))}else{if(name[0]==="?"&&name[1]==="?")return context.root[name.substring(2)];if(name[0]==="?")return await this._visualizationHandler.getState(this.getSignalName(context.root[name.substring(1)],context))}return await this._visualizationHandler.getState(this.getSignalName(name,context))}async parseStringWithValues(l,s){let t=J(l),e=await Promise.all(t.signals.map(n=>this.getStateOrFieldOrParameter(this.getSignalName(n,s),s))),i=t.parts[0];for(let n=0;n<t.parts.length-1;n++){let o=e[n];typeof o=="object"&&(o=o.val),o==null&&(o=""),i+=o+t.parts[n+1]}return i}getSignalName(l,s){return l[0]==="."?s.relativeSignalsPath+l:l}createScriptContext(l,s,t,e,i){return{root:l,event:s,element:t,parameters:e,relativeSignalsPath:i}}async assignAllScripts(l,s,t,e,i,n,o,a){let c=t.querySelectorAll("*");n??=this.createScriptContext;let r=null;if(s)try{r=await import(URL.createObjectURL(new Blob([s],{type:"application/javascript"}))),a?a(r):r.init&&r.init(e,t)}catch(u){console.error("error parsing javascript - "+l,u)}for(let u of c)for(let g of u.attributes)if(g.name[0]=="@")try{let h=g.name.substring(1),d=g.value.trim();if(d[0]=="{"){let p=JSON.parse(d);if("commands"in p)u.addEventListener(h,m=>this.execute(p.commands,n(e,m,u,p.parameters,p.relativeSignalsPath)));else if("blocks"in p){let m=null;u.addEventListener(h,async f=>{m||(m=await X(p)),m(f,t,p.parameters,p.relativeSignalsPath??"",i,n(e,f,u,p.parameters,p.relativeSignalsPath))})}else if(o)o(u,h,p);else if("name"in p){let m=p.name;u.addEventListener(h,f=>{r[m]?r[m](f,u,t,e,p.parameters):console.warn("javascript function named: "+m+' not found, maybe missing a "export" ?')})}}else u.addEventListener(h,p=>{r[d]?r[d](p,u,t,e):console.warn("javascript function named: "+d+' not found, maybe missing a "export" ?')})}catch{console.warn("error assigning script",u,g)}return r}};import{OverlayLayer as He,DesignItem as T,InsertAction as Je,BindingTarget as k,PropertyType as M}from"@node-projects/web-component-designer";var ae=class{constructor(s,t){this._bindingsHelper=s,this._visualizationHandler=t}_bindingsHelper;_visualizationHandler;rectMap=new Map;rect;dragEnter(s,t,e){let i=T.GetDesignItem(e);if(i&&!i.isRootItem){let n=s.getNormalizedElementCoordinates(e);this.rect=s.overlayLayer.drawRect("IobrokerWebuiBindableObjectDragDropService",n.x,n.y,n.width,n.height,"",null,He.Background),this.rect.style.fill="#ff0000",this.rect.style.opacity="0.3",this.rectMap.set(e,this.rect)}}dragLeave(s,t,e){let i=T.GetDesignItem(e);if(i&&!i.isRootItem){let n=this.rectMap.get(e);s.overlayLayer.removeOverlay(n),this.rectMap.delete(e)}}dragOver(s,t,e){return"copy"}async drop(s,t,e,i){for(let c of this.rectMap.values())s.overlayLayer.removeOverlay(c);this.rectMap.clear();let n=T.GetDesignItem(i),o=await this._visualizationHandler.getObject(e.fullName),a=this._visualizationHandler.getSignalInformation(o);if(n&&!n.isRootItem)if(i instanceof HTMLInputElement){let c={signal:e.fullName,target:k.property},r=this._bindingsHelper.serializeBinding(i,i.type=="checkbox"?"checked":"value",c);n.setAttribute(r[0],r[1])}else{let c={signal:e.fullName,target:k.content},r=this._bindingsHelper.serializeBinding(i,null,c);n.setAttribute(r[0],r[1])}else{let c=s.getNormalizedEventCoordinates(t),r,u,g=await this._visualizationHandler.getState(e.fullName);if(a.role==="url"&&typeof g?.val=="string")if(g.val.endsWith("jpg")||g.val.endsWith("jpeg")||g.val.endsWith("png")||g.val.endsWith("gif")||g.val.endsWith("svg")){let h=document.createElement("img");r=T.createDesignItemFromInstance(h,s.serviceContainer,s.instanceServiceContainer),u=r.openGroup("Insert");let d={signal:e.fullName,target:k.property},p=this._bindingsHelper.serializeBinding(h,"src",d);r.setAttribute(p[0],p[1]),r.element.src=g.val}else if(g.val.endsWith("mp4")){let h=document.createElement("video");r=T.createDesignItemFromInstance(h,s.serviceContainer,s.instanceServiceContainer),u=r.openGroup("Insert");let d={signal:e.fullName,target:k.property},p=this._bindingsHelper.serializeBinding(h,"src",d);r.setAttribute(p[0],p[1]),r.element.src=g.val}else{let h=document.createElement("iframe");r=T.createDesignItemFromInstance(h,s.serviceContainer,s.instanceServiceContainer),u=r.openGroup("Insert");let d={signal:e.fullName,target:k.property},p=this._bindingsHelper.serializeBinding(h,"src",d);r.setAttribute(p[0],p[1]),r.element.src=g.val}if(!r){let h=document.createElement("input");r=T.createDesignItemFromInstance(h,s.serviceContainer,s.instanceServiceContainer),u=r.openGroup("Insert");let d=a.writeable!==!1,p={signal:e.fullName,target:k.property,twoWay:d},m=this._bindingsHelper.serializeBinding(h,"value",p);a.type==="boolean"?(m=this._bindingsHelper.serializeBinding(h,"checked",p),r.setAttribute("type","checkbox")):a.role=="date"?(p.twoWay=d,m=this._bindingsHelper.serializeBinding(h,"value-as-number",p),r.setAttribute("type","date"),r.setAttribute("readonly","")):a.role=="datetime"&&(p.twoWay=d,m=this._bindingsHelper.serializeBinding(h,"value-as-number",p),r.setAttribute("type","datetime-local"),r.setAttribute("readonly","")),r.setAttribute(m[0],m[1])}r.setStyle("position","absolute"),r.setStyle("left",c.x+"px"),r.setStyle("top",c.y+"px"),s.instanceServiceContainer.undoService.execute(new Je(s.rootDesignItem,s.rootDesignItem.childCount,r)),u.commit(),requestAnimationFrame(()=>s.instanceServiceContainer.selectionService.setSelectedElements([r]))}}dragOverOnProperty(s,t,e){return"copy"}dropOnProperty(s,t,e,i){if(t.type=="signal"){t.service.setValue(i,t,e.fullName);return}let n={signal:e.fullName,target:k.property};t.propertyType==M.attribute&&(n.target=k.attribute),t.propertyType==M.cssValue&&(n.target=k.css),n.signal=e.fullName,n.twoWay=t.propertyType==M.property||t.propertyType==M.propertyAndAttribute;let o=i[0].openGroup("drop binding");for(let a of i){let c=this._bindingsHelper.serializeBinding(a.element,t.name,n);a.setAttribute(c[0],c[1])}o.commit()}};import{BindingMode as U,BindingTarget as ne,PropertiesHelper as Ue}from"@node-projects/web-component-designer";var re=class l{constructor(s){this._bindingsHelper=s}_bindingsHelper;static type="visualization-binding";getBindings(s){return Array.from(this._bindingsHelper.getBindings(s.element)).map(e=>({targetName:e[1].target===ne.css||e[1].target===ne.attribute?Ue.camelToDashCase(e[0]):e[0],target:e[1].target,mode:e[1].twoWay?U.twoWay:U.oneWay,invert:e[1].inverted,bindableObjectNames:e[1].signal.split(";"),expression:e[1].expression,expressionTwoWay:e[1].expressionTwoWay,converter:e[1].converter,type:l.type,service:this,changedEvents:e[1].events,historic:e[1].historic,writeBackSignal:e[1].writeBackSignal}))}setBinding(s,t){let e={signal:t.bindableObjectNames.join(";"),target:t.target};e.inverted=t.invert,e.twoWay=t.mode==U.twoWay,e.expression=t.expression,e.expressionTwoWay=t.expressionTwoWay,e.historic=t.historic,e.type=t.type,e.converter=t.converters,e.target=t.target,e.events=t.changedEvents;let i=this._bindingsHelper.serializeBinding(s.element,t.targetName,e),n=s.openGroup("edit_binding");return s.setAttribute(i[0],i[1]),n.commit(),!0}clearBinding(s,t,e){let i=this._bindingsHelper.getBindingAttributeName(s.element,t,e);return s.removeAttribute(i),!0}};var le=class{getRefactorings(s){let t=[];for(let e of s){let i=e.serviceContainer.bindingService.getBindings(e);if(i)for(let n of i)for(let o of n.bindableObjectNames){let a="signal",c="";if(o.includes(":")){let r=o.split(":")[0],u=o.substring(r.length+1);u.startsWith("?")&&(u=u.substring(1),c="?",a="property",u.startsWith("?")&&(u=u.substring(1),c="??")),t.push({service:this,name:u,itemType:a,designItem:e,type:"binding",sourceObject:n,display:n.target+"/"+n.targetName+" - "+r+":",shortName:r,prefix:c})}else o.startsWith("?")&&(o=o.substring(1),c="?",a="property",o.startsWith("?")&&(o=o.substring(1),c="??")),t.push({service:this,name:o,itemType:a,designItem:e,type:"binding",sourceObject:n,display:n.target+"/"+n.targetName,prefix:c})}}return t}refactor(s,t,e){let i=s.sourceObject;s.shortName?i.bindableObjectNames=i.bindableObjectNames.map(n=>n==s.shortName+":"+s.prefix+t?s.shortName+":"+s.prefix+e:n):i.bindableObjectNames=i.bindableObjectNames.map(n=>n==s.prefix+t?s.prefix+e:n),s.designItem.serviceContainer.bindingService.setBinding(s.designItem,i)}};var oe=class{dragOverOnProperty(s,t,e){return"copy"}dropOnProperty(s,t,e,i){t.service.setValue(i,t,e.text)}};import{BindingTarget as b}from"@node-projects/web-component-designer";var ce=class{getRefactorings(s){let t=[];for(let e of s)for(let i of e.attributes())if(i[0][0]=="@"){let n=i[1];if(n[0]=="{"){let o=JSON.parse(n);if("commands"in o)for(let a of o.commands){for(let c in a){let r=a[c];if(r!=null&&typeof r=="object"){let u=r;if(u.source==="signal")t.push({name:u.name,itemType:"signal",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:o,display:a.type+"/"+i[0].substring(1)+"/"+c+"[signal]",refactor:g=>u.name=g});else if(u.source==="property")t.push({name:u.name,itemType:"property",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:o,display:a.type+"/"+i[0].substring(1)+"/"+c+"[property]",refactor:g=>u.name=g});else if(u.source==="complexString")for(let g of u.name.matchAll(/\{(.*?)\}/g)){let h=g[0],d=g[1];if(d[0]==="?"){let p="?";d=d.substring(1),d[0]==="?"&&(p="??",d=d.substring(1)),t.push({name:d,itemType:"property",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:o,display:a.type+"/"+i[0].substring(1)+"/"+c+"[complexString]->property",refactor:m=>u.name=u.name.replace(h,"{"+p+m+"}")})}else t.push({name:d,itemType:"signal",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:o,display:a.type+"/"+i[0].substring(1)+"/"+c+"[complexString]->signal",refactor:p=>u.name=u.name.replace(h,"{"+p+"}")})}}}switch(a.type){case"SetSignalValue":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"ToggleSignalValue":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"IncrementSignalValue":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"DecrementSignalValue":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"SetBitInSignal":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"ClearBitInSignal":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"ToggleBitInSignal":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"OpenScreen":a.screen&&typeof a.screen=="string"&&t.push({name:a.screen,itemType:"screen",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/screen",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.screen=c});break;case"OpenDialog":a.screen&&typeof a.screen=="string"&&t.push({name:a.screen,itemType:"screen",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/screen",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.screen=c});break;case"CalculateSignalValue":a.targetSignal&&typeof a.targetSignal=="string"&&t.push({name:a.targetSignal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/targetSignal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.targetSignal=c});break;case"SubscribeSignal":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"UnsubscribeSignal":a.signal&&typeof a.signal=="string"&&t.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.signal=c});break;case"ShowMessageBox":a.resultSignal&&typeof a.resultSignal=="string"&&t.push({name:a.resultSignal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/resultSignal",service:this,designItem:e,type:"script",sourceObject:o,refactor:c=>a.resultSignal=c});break}}else"blocks"in o;if("parameters"in o)for(let a in o.parameters)typeof o.parameters[a]=="string"&&t.push({name:o.parameters[a],itemType:"parameter",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:o,display:i[0].substring(1)+"/parameters/"+a,refactor:c=>o.parameters[a]=c})}}return t}refactor(s,t,e){s.refactor(e);let i=JSON.stringify(s.sourceObject);s.designItem.setAttribute(s.targetName,i)}};import{BasePropertyEditor as Xe}from"@node-projects/web-component-designer";var pe=class extends Xe{_ip;_container;constructor(s,t){super(s),this._container=document.createElement("div"),this._container.style.display="flex",this._ip=document.createElement("input"),this._ip.onchange=i=>this._valueChanged(this._ip.value),this._ip.onfocus=i=>{this._ip.selectionStart=0,this._ip.selectionEnd=this._ip.value?.length},this._container.appendChild(this._ip);let e=document.createElement("button");e.textContent="...",e.onclick=async()=>{let i=t.createBindableObjectBrowser();i.initialize(this.designItems[0].serviceContainer,this.designItems[0].instanceServiceContainer,"property"),i.title="select signal...";let n=new AbortController;i.objectDoubleclicked.on(()=>{n.abort(),this._ip.value=i.selectedObject.fullName,this._valueChanged(this._ip.value)}),await t.openConfirmation(i,{x:100,y:100,width:400,height:300,abortSignal:n.signal})&&(this._ip.value=i.selectedObject.fullName,this._valueChanged(this._ip.value))},this._container.appendChild(e),this.element=this._container}refreshValue(s,t){t==null?this._ip.value="":this._ip.value=t}};export{ae as BindableObjectDragDropService,D as BindingsEditor,E as BindingsEditorHistoric,ee as BindingsHelper,C as BlocklyScriptEditor,L as EventAssignment,O as ParameterEditor,oe as PropertyGridDragDropService,te as Script,ce as ScriptRefactorService,ie as ScriptSystem,pe as SignalPropertyEditor,I as SimpleScriptEditor,le as VisualizationBindingsRefactorService,re as VisualizationBindingsService,j as VisualizationPropertyGrid,B as bindingPrefixAttribute,R as bindingPrefixClass,w as bindingPrefixContent,V as bindingPrefixCss,A as bindingPrefixCssVar,Pe as bindingPrefixInsideCss,Me as bindingPrefixInsideCssVarName,S as bindingPrefixProperty,F as bindingPrefixVisible,Ft as bindingsInCssRegex,X as generateEventCodeFromBlockly,P as getNestedProperty,z as isLit,J as parseBindingString};
|
|
384
|
+
</div>`;static scriptTypeColors={js:"purple",blockly:"yellow",script:"lightgreen",empty:"pink"};static is="node-projects-visualization-event-assignment";constructor(){super(),this._restoreCachedInititalValues()}ready(){this._bindingsParse()}_blocklyToolbox;_instanceServiceContainer;_selectionChangedHandler;_selectedItems;_visualizationHandler;_visualizationShell;_scriptCommandsTypeInfo;_propertiesTypeInfo;events;initialize(t,s,e,i,n){this._visualizationHandler=t,this._visualizationShell=s,this._scriptCommandsTypeInfo=e,this._propertiesTypeInfo=i,this._blocklyToolbox=n}set instanceServiceContainer(t){this._instanceServiceContainer=t,this._selectionChangedHandler?.dispose(),this._selectionChangedHandler=this._instanceServiceContainer.selectionService.onSelectionChanged.on(s=>{this.selectedItems=s.selectedElements}),this.selectedItems=this._instanceServiceContainer.selectionService.selectedElements}_createControlsForScript(t){switch(this._getScriptType(t)){case"none":return""}return this.constructor.editRowTemplate.content.cloneNode(!0)}_getScriptName(t){if(this.selectedItems[0].hasAttribute("@"+t.name)){let s=this.selectedItems[0].getAttribute("@"+t.name);if(s[0]==="{"){if(s.includes("name"))return JSON.parse(s).name}else return s}return null}async _changeScriptName(t,s){if(t.key=="Enter"&&this.selectedItems&&this.selectedItems.length&&this.selectedItems[0].hasAttribute("@"+s.name)){let e=t.target.value,i=this.selectedItems[0].getAttribute("@"+s.name);if(i.startsWith("{")){let n=JSON.parse(i);n.name=e,this._selectedItems[0].setAttribute("@"+s.name,JSON.stringify(n))}else this._selectedItems[0].setAttribute("@"+s.name,e)}}_getRelativeSignalsPath(t){if(this.selectedItems[0].hasAttribute("@"+t.name)){let s=this.selectedItems[0].getAttribute("@"+t.name);if(s[0]==="{"&&s.includes("relativeSignalsPath"))return JSON.parse(s).relativeSignalsPath}return null}async _changeRelativeSignalsPath(t,s){if(t.key=="Enter"&&this.selectedItems&&this.selectedItems.length&&this.selectedItems[0].hasAttribute("@"+s.name)){let e=t.target.value,i=this.selectedItems[0].getAttribute("@"+s.name);if(i.startsWith("{")){let n=JSON.parse(i);n.relativeSignalsPath=e,this._selectedItems[0].setAttribute("@"+s.name,JSON.stringify(n))}else{let n={name:i,relativeSignalsPath:e};this._selectedItems[0].setAttribute("@"+s.name,JSON.stringify(n))}}}_hasParameters(t){return this.selectedItems[0].hasAttribute("@"+t.name)?this.selectedItems[0].getAttribute("@"+t.name).includes("parameters"):!1}_getScriptTypeColor(t){let s=this._getScriptType(t);return r.scriptTypeColors[s]??"white"}_getScriptType(t){if(this.selectedItems&&this.selectedItems.length&&this.selectedItems[0].hasAttribute("@"+t.name)){let s=this.selectedItems[0].getAttribute("@"+t.name);if(s.startsWith("{")){let e=JSON.parse(s);return"blocks"in e?"blockly":"commands"in e?"script":"js"}else return s==""?"empty":"js"}return"none"}_getEventMethodname(t){return this.selectedItems.length?this.selectedItems[0].getAttribute("@"+t.name):""}_inputMthName(t,s){let e=t.target;this.selectedItems[0].setAttribute("@"+s.name,e.value)}_ctxMenu(t,s){t.preventDefault();let e=this._getScriptType(s);if(e=="empty")this._showContextMenuAssignScript(t,s,!0);else if(e!="none"){let i=[{title:"remove",action:()=>{this.selectedItems[0].removeAttribute("@"+s.name),this._bindingsRefresh()}},{title:"-"},{title:"copy",action:()=>{Q(this.selectedItems[0].getAttribute("@"+s.name))}},{title:"paste",action:async()=>{this.selectedItems[0].setAttribute("@"+s.name,await Z()),this._bindingsRefresh()}}];K.show(i,t)}else this._showContextMenuAssignScript(t,s,!0)}async _addEvent(t){if(t.key=="Enter"){let s=this._getDomElement("addEventInput");this._selectedItems[0].setAttribute("@"+ze.camelToDashCase(s.value.replaceAll(" ","-")),""),s.value="",this.scrollTop=0,this.refresh()}}_createAssignScriptContextMenu(t,s){let e=[{title:"Simple Script",action:()=>{this._editEvent("script",t,s)}},{title:"Javascript",action:()=>{let n=prompt("name of function ?");n&&(this._selectedItems[0].setAttribute("@"+s.name,n),this.refresh(),this._editEvent("js",null,s))}},{title:"Blockly",action:()=>{this._editBlockly(null,s)}}],i=this._getScriptType(s);return i!="none"&&(e.push({title:"-"}),e.push({title:"remove",action:()=>{this.selectedItems[0].removeAttribute("@"+s.name),this._bindingsRefresh()}})),i!="empty"&&e.push({title:"-"},{title:"copy",action:()=>{Q(this.selectedItems[0].getAttribute("@"+s.name))}},{title:"paste",action:async()=>{this.selectedItems[0].setAttribute("@"+s.name,await Z()),this._bindingsRefresh()}}),e}async _showContextMenuAssignScript(t,s,e){t.preventDefault();let i=this._getScriptType(s);if(i!="none"&&i!="empty"&&!e)this._editEvent(i,t,s);else{let n=this._createAssignScriptContextMenu(t,s);K.show(n,t)}}async _editParameter(t,s){let e=this.selectedItems[0],i=new O,n={};i.title="ParameterEditor for '"+s.name+"' of '"+e.name+"'";let l=e.getAttribute("@"+s.name);if(l&&l[0]=="{")try{n=JSON.parse(l).parameters}catch{}if(i.setParametersObject(n),await this._visualizationShell.openConfirmation(i,{x:100,y:100,width:700,height:500})){let p=i.getParametersObject(),o={name:l,parameters:p};l&&l[0]=="{"&&(o=JSON.parse(l),o.parameters=p),p==null&&delete o.parameters;let u=JSON.stringify(o);e.setAttribute("@"+s.name,u),this._bindingsRefresh()}}async _editBlockly(t,s){let e=this.selectedItems[0],i=new C(this._blocklyToolbox);i.title="Blockly Script for '"+s.name+"' of '"+e.name+"'";let n=e.getAttribute("@"+s.name),l=null,a=null;if(n){let o=JSON.parse(n);l=o.parameters,a=o.relativeSignalsPath,i.load(o)}if(await this._visualizationShell.openConfirmation(i,{x:100,y:100,width:700,height:500})){let o=i.save();l&&(o.parameters=l),a&&(o.relativeSignalsPath=a),e.setAttribute("@"+s.name,JSON.stringify(o)),this._bindingsRefresh()}}async _editJavascript(t,s){}async _editSimpleScript(t,s){let e=this.selectedItems[0],i=e.getAttribute("@"+s.name);if(!i||i.startsWith("{")){let n={commands:[]},l=null,a=null;i&&(n=JSON.parse(i),l=n.parameters,a=n.relativeSignalsPath);let p=new I;if(p.serviceContainer=e.serviceContainer,p.instanceServiceContainer=e.instanceServiceContainer,p.scriptCommandsTypeInfo=this._scriptCommandsTypeInfo,p.propertiesTypeInfo=this._propertiesTypeInfo,p.visualizationShell=this._visualizationShell,p.visualizationHandler=this._visualizationHandler,p.loadScript(n),p.title="Script '"+s.name+"' on "+e.name,await this._visualizationShell.openConfirmation(p,{x:100,y:100,width:600,height:500})){let u=p.getScriptCommands();if(u&&u.length){let g={commands:u};l&&(g.parameters=l),a&&(g.relativeSignalsPath=a);let d=JSON.stringify(g);e.setAttribute("@"+s.name,d),this._bindingsRefresh()}}}}async _editEvent(t,s,e){t=="js"?this._editJavascript(s,e):t=="blockly"?this._editBlockly(s,e):this._editSimpleScript(s,e)}refresh(){this._selectedItems!=null&&this._selectedItems.length?this.events=this._selectedItems[0].serviceContainer.getLastServiceWhere("eventsService",t=>t.isHandledElementFromEventsService(this._selectedItems[0])).getPossibleEvents(this._selectedItems[0]):this.events=[],this._bindingsRefresh()}get selectedItems(){return this._selectedItems}set selectedItems(t){this._selectedItems!=t&&(this._selectedItems=t,this.refresh())}};customElements.define(L.is,L);import{TypedEvent as De,cssFromString as Le}from"@node-projects/base-custom-webcomponent";import{BindingTarget as f}from"@node-projects/web-component-designer/dist/elements/item/BindingTarget.js";import{PropertiesHelper as v}from"@node-projects/web-component-designer/dist/elements/services/propertiesService/services/PropertiesHelper.js";var S="bind-prop:",B="bind-attr:",R="bind-class:",V="bind-css:",A="bind-cssvar:",w="bind-content:",F="bind-visible:",Pe="bind(",Me="--tmpBinding_",Ft=/{{(.*)}}/;function z(r){return r.constructor?.elementProperties!=null}function J(r){let t=[],s=[],e="";for(let i=0;i<r.length;i++)r[i]=="{"?(t.push(e),e=""):r[i]=="}"?(s.push(e),e=""):e+=r[i];return t.push(e),{parts:t,signals:s}}function P(r,t){let s=t.split("."),e=r;for(let i of s){if(e==null||typeof e!="object")return;e=e[i]}return e}var H=class{parts;signals;values;unsubscribeTargetValue;cleanupCalls=[];combinedName;disposed;valueChangedCb;visualizationHandler;element;relativeSignalPath;constructor(t,s,e,i,n,l,a,p){this.visualizationHandler=s,this.valueChangedCb=i,this.element=n,this.relativeSignalPath=l,this.parseIndirectBinding(e),this.values=new Array(this.signals.length);for(let o=0;o<this.signals.length;o++){let u=this.signals[o];if(u[0]==="?"&&u[1]==="?"){let h=u.substring(2);if(h.includes(".")){let c=P(a,h);this.handleValueChanged(c,o)}else{this.handleValueChanged(a[h],o);let c=()=>this.handleValueChanged(a[h],o),m=t.getChangedEventName(a,h);a.addEventListener(m,c),this.cleanupCalls.push(()=>a.removeEventListener(m,c))}continue}else if(u[0]==="#"&&u[1]==="#"){let h=u.substring(2);if(h.includes(".")){let c=P(n,h);this.handleValueChanged(c,o)}else{this.handleValueChanged(n[h],o);let c=()=>this.handleValueChanged(n[h],o),m=t.getChangedEventName(n,h);n.addEventListener(m,c),this.cleanupCalls.push(()=>n.removeEventListener(m,c))}continue}else if(u[0]==="\xA7"){let h=u.substring(1),c=p.valueProvider(h,{element:n,relativeSignalPath:l,root:a});c instanceof Promise?c.then(y=>this.handleValueChanged(y,o)):this.handleValueChanged(c,o),p.valueChangedCallbacks||(p.valueChangedCallbacks=new Map);let m=p.valueChangedCallbacks.get(h);m==null&&(m=[],p.valueChangedCallbacks.set(h,m)),m.push(()=>{let y=p.valueProvider(h,{element:n,relativeSignalPath:l,root:a});y instanceof Promise?y.then(x=>this.handleValueChanged(x,o)):this.handleValueChanged(y,o)})}else(u[0]==="?"||u[0]==="#")&&(u.includes(".")?u=P(a,u.substring(1)):u=a[u.substring(1)]);let g=(h,c)=>this.handleValueChanged(c.val,o),d=this.visualizationHandler.subscribeState(u,g);this.cleanupCalls.push(()=>this.visualizationHandler.unsubscribeState(this.signals[o],g,d))}}parseIndirectBinding(t){let{parts:s,signals:e}=J(t);this.parts=s,this.signals=e;for(let i=0;i<e.length;i++)e[i][0]=="."&&(e[i]=this.visualizationHandler.getNormalizedSignalName(e[i],this.relativeSignalPath,this.element))}handleValueChanged(t,s){this.values[s]=t;let e=this.parts[0];for(let i=0;i<this.parts.length-1;i++){let n=this.values[i];if(n==null)return;e+=n+this.parts[i+1]}if(e[0]=="."&&(e=this.visualizationHandler.getNormalizedSignalName(e,this.relativeSignalPath,this.element)),this.combinedName!=e&&(this.unsubscribeTargetValue&&this.visualizationHandler.unsubscribeState(this.combinedName,this.unsubscribeTargetValue[0],this.unsubscribeTargetValue[1]),!this.disposed)){this.combinedName=e;let i=(n,l)=>this.valueChangedCb(l);this.unsubscribeTargetValue=[i,this.visualizationHandler.subscribeState(e,i)]}}dispose(){this.disposed=!0,this.unsubscribeTargetValue&&(this.visualizationHandler.unsubscribeState(this.combinedName,this.unsubscribeTargetValue[0],this.unsubscribeTargetValue[1]),this.unsubscribeTargetValue=null);for(let t=0;t<this.signals.length;t++)this.cleanupCalls[t]()}setState(t){this.disposed||this.visualizationHandler.setState(this.combinedName,t)}},ee=class r{_visualizationHandler;namedConverterCallback;constructor(t){this._visualizationHandler=t}getChangedEventName(t,s){let e=s.indexOf("::");return e>=0?s.substring(e+2):t instanceof HTMLInputElement||t instanceof HTMLSelectElement?"change":z(t)?v.camelToDashCase(s):v.camelToDashCase(s)+"-changed"}parseBinding(t,s,e,i,n){let l=s.substring(n.length);if(i===f.cssvar&&(l="--"+l),!e.startsWith("{")){let p={signal:e,target:i};if(e[0]==="="){if(e=e.substring(1),p.signal=e,e.includes("::")){let o=e.split("::");e=o[0],p.signal=e,p.events=o[1].split(",")}p.twoWay=!0,p.events||(t instanceof HTMLInputElement?p.events=[this.getChangedEventName(t,l)]:t instanceof HTMLSelectElement?p.events=[this.getChangedEventName(t,l)]:z(t)?p.events=[this.getChangedEventName(t,l)]:(p.events=[this.getChangedEventName(t,l)],p.maybeLitElement=!0,p.litEventNames=[this.getChangedEventName(t,l)]))}if(e[0]==="!"&&(p.signal=e.substring(1),p.inverted=!0),p.signal.includes(";")){let o=p.signal.split(";");p.expression=o.pop(),p.signal=o.join(";")}return i===f.cssvar||i===f.class?[r.dotToCamelCase(l),p]:i===f.attribute?[l,p]:[v.dashToCamelCase(l),p]}let a=JSON.parse(e);return a.target=i,a.twoWay&&(a.events==null||a.events.length==0)&&(t instanceof HTMLInputElement?a.events=["change"]:t instanceof HTMLSelectElement?a.events=["change"]:a.events=[this.getChangedEventName(t,l)]),i===f.cssvar||i===f.class?[r.dotToCamelCase(l),a]:i===f.attribute?[l,a]:[v.dashToCamelCase(l),a]}serializeBinding(t,s,e){let i={...e};delete i.type,e.twoWay?e.events!=null&&e.events.length==1&&(t instanceof HTMLInputElement&&e.events?.[0]=="change"||t instanceof HTMLSelectElement&&e.events?.[0]=="change"||z(t)&&e.events?.[0]==s||!z(t)&&e.events?.[0]==s+"-changed")&&delete i.events:(delete i.events,delete i.expressionTwoWay);let n=i.twoWay&&i.events?.length>0?"::"+i.events.join(","):"",l=!1;return(n&&e.expression?.includes("::")||e.expressionTwoWay?.includes("::"))&&(l=!0),e.signal.trim()[0]=="{"&&(l=!0),!l&&e.target==f.property&&!e.expression&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?s=="textContent"?[w+"text",(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:s=="innerHTML"?[w+"html",(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:[S+v.camelToDashCase(s),(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:!l&&e.target==f.property&&e.expression&&!e.expression.includes(`
|
|
385
|
+
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?s=="textContent"?[w+"text",(e.inverted?"!":"")+e.signal+";"+e.expression+n]:s=="innerHTML"?[w+"html",(e.inverted?"!":"")+e.signal+";"+e.expression+n]:[S+v.camelToDashCase(s),(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+";"+e.expression+n]:!l&&e.target==f.attribute&&!e.expression&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[B+v.camelToDashCase(s),(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:!l&&e.target==f.attribute&&e.expression&&!e.expression.includes(`
|
|
386
|
+
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[B+v.camelToDashCase(s),(e.twoWay?"=":"")+(e.inverted?"!":"")+e.signal+";"+e.expression+n]:!l&&e.target==f.class&&!e.expression&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[R+v.camelToDashCase(s),(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:!l&&e.target==f.class&&e.expression&&!e.expression.includes(`
|
|
387
|
+
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[R+v.camelToDashCase(s),(e.inverted?"!":"")+e.signal+";"+e.expression+n]:!l&&e.target==f.css&&!e.expression&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[V+v.camelToDashCase(s),(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:!l&&e.target==f.css&&e.expression&&!e.expression.includes(`
|
|
388
|
+
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[V+v.camelToDashCase(s),(e.inverted?"!":"")+e.signal+";"+e.expression+n]:!l&&e.target==f.cssvar&&!e.expression&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[A+r.camelToDotCase(s.substring(2)),(e.inverted?"!":"")+e.signal+(!e.twoWay&&e.signal.includes(";")?";":"")+n]:!l&&e.target==f.cssvar&&e.expression&&!e.expression.includes(`
|
|
389
|
+
`)&&!e.expression.includes(";")&&!e.expressionTwoWay&&e.converter==null&&!e.historic&&!e.writeBackSignal?[A+v.camelToDashCase(s),(e.inverted?"!":"")+e.signal+";"+e.expression+n]:((e.inverted===null||e.inverted===!1)&&delete i.inverted,(e.expression===null||e.expression==="")&&delete i.expression,(e.expressionTwoWay===null||e.expressionTwoWay==="")&&delete i.expressionTwoWay,(e.twoWay===null||e.twoWay===!1)&&delete i.twoWay,delete i.target,e.historic||delete i.historic,e.target==f.content?[w+"html",JSON.stringify(i)]:e.target==f.attribute?[B+v.camelToDashCase(s),JSON.stringify(i)]:e.target==f.class?[R+r.camelToDotCase(s),JSON.stringify(i)]:e.target==f.css?[V+v.camelToDashCase(s),JSON.stringify(i)]:e.target==f.cssvar?[A+r.camelToDotCase(s.substring(2)),JSON.stringify(i)]:e.target==f.property&&s=="innerHTML"?[w+"html",JSON.stringify(i)]:e.target==f.property&&s=="textContent"?[w+"text",JSON.stringify(i)]:[S+v.camelToDashCase(s),JSON.stringify(i)])}getBindingAttributeName(t,s,e){return e==f.attribute?B+v.camelToDashCase(s):e==f.class?R+r.camelToDotCase(s):e==f.css?V+v.camelToDashCase(s):e==f.visible?F:e==f.cssvar?A+r.camelToDotCase(s):e==f.property&&s=="innerHTML"?w+"html":e==f.property&&s=="textContent"?w+"text":S+v.camelToDashCase(s)}*getBindings(t){if(t.attributes)for(let s of t.attributes)s.name.startsWith(S)?yield this.parseBinding(t,s.name,s.value,f.property,S):s.name.startsWith(w)?yield this.parseBinding(t,s.name==="bind-content:html"?"bind-prop:inner-h-t-m-l":"bind-prop:text-content",s.value,f.property,S):s.name.startsWith(B)?yield this.parseBinding(t,s.name,s.value,f.attribute,B):s.name.startsWith(R)?yield this.parseBinding(t,s.name,s.value,f.class,R):s.name.startsWith(V)?yield this.parseBinding(t,s.name,s.value,f.css,V):s.name.startsWith(A)?yield this.parseBinding(t,s.name,s.value,f.cssvar,A):s.name.startsWith(F)&&(yield this.parseBinding(t,s.name,s.value,f.visible,F))}applyAllBindings(t,s,e,i){let n=[],l=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT),a;for(;a=l.nextNode();){let p=this.getBindings(a);for(let o of p)try{let u=this.applyBinding(a,o,s,e,i);if(n.push(u),o[1].maybeLitElement&&a.localName.includes("-")&&!customElements.get(a.localName)){let g=a,d=o;customElements.whenDefined(a.localName).then(()=>{z(g)&&(u(),d[1].events=d[1].litEventNames,n.push(this.applyBinding(g,d,s,e,i)))})}}catch(u){console.warn("error applying binding",a,o,u)}}return n}static#e=0;async parseCssBindings(t,s,e,i){let n=await import("@adobe/css-tools"),l=n.parse(t),a;for(let o of l.stylesheet.rules)if(o.type===n.CssTypes.rule){for(let u of o.declarations)if(u.type===n.CssTypes.declaration&&u.value.includes(Pe)){let g=this.parseCssBinding(u.value,s,e,i);u.value=g[0],a?a.push(...g[1]):a=g[1]}}let p=n.stringify(l,{indent:"",compress:!0});return[Le(p),a]}parseCssBinding(t,s,e,i,n){t=t.trim();let l="",a="",p=!1,o="",u=!1,g=null,d=[];for(let h=0;h<t.length;h++){let c=t[h];if(p)if(u)o+=c;else if(g&&c==="\\")u=!0;else if(c===g)g=null;else if(g===null&&c===")"){let m=r.#e++,y=Me+m,x=[y,{signal:o,target:f.cssvar}];o.startsWith("{")&&(x=JSON.parse(o)),d.push(this.applyBinding(s,x,e,i,n)),l+="var("+y+")",p=!1,o=""}else o+=c;else c==="("?(a!=="bind"?(l+=a,l+=c):(p=!0,t[h+1]==="'"||t[h+1]==='"'?(h++,g=t[h]):g=null),a=""):c===" "||c===","||c==="("||c==="+"||c==="-"||c==="*"||c==="/"?(l+=a+c,a=""):a+=c}return[l+a,d]}applyBinding(t,s,e,i,n){let l=[],a,p=()=>{for(let d of l)this._visualizationHandler.unsubscribeState(d[0],d[1],d[2]);if(a)for(let d of a)d()},o=s[1].signal.split(";"),u=new Array(o.length);for(let d=0;d<o.length;d++){let h=o[d];if(u[d]="__"+d,h.includes(":")){let c=h.split(":");u[d]=c[0],h=c[1],o[d]=h}if(h[0]==="?"){if(i){let c=h.substring(1);if(c[0]=="?")o[d]=c;else{o[d]=i[c],c[0]==="$"&&(c=c.substring(1),o[d]="$"+i[c]);let m=()=>{p(),this.applyBinding(t,s,e,i,n)},y=this.getChangedEventName(i,c);i.addEventListener(y,m),a||(a=[]),a.push(()=>i.removeEventListener(y,m))}}}else if(h[0]==="#"){let c=h.substring(1);if(c[0]=="#")o[d]=c;else{o[d]=i[c],c[0]==="$"&&(c=c.substring(1),o[d]="$"+i[c]);let m=()=>{p(),this.applyBinding(t,s,e,i,n)},y=this.getChangedEventName(t,c);i.addEventListener(y,m),a||(a=[]),a.push(()=>i.removeEventListener(y,m))}}h[0]==="."&&(o[d]=this._visualizationHandler.getNormalizedSignalName(h,e,t))}let g=new Array(o.length);for(let d=0;d<o.length;d++){let h=o[d];if(h[0]==="?"){if(i){let c=h.substring(1),m=()=>{let y=!1;y||(y=!0,this.handleValueChanged(t,i,s,i[c],g,d,u,!1,e),y=!1)};i.addEventListener(v.camelToDashCase(c)+"-changed",m),a||(a=[]),a.push(()=>i.removeEventListener(v.camelToDashCase(c)+"-changed",m));try{this.handleValueChanged(t,i,s,i[c],g,d,u,!1,e)}catch(y){console.error(y)}s[1].twoWay&&d==0&&this.addTwoWayBinding(s,t,y=>i[c]=y)}}else if(h[0]==="#"){let c=h.substring(1),m=()=>{let y=!1;y||(y=!0,this.handleValueChanged(t,i,s,t[c],g,d,u,!1,e),y=!1)};t.addEventListener(v.camelToDashCase(c)+"-changed",m),a||(a=[]),a.push(()=>t.removeEventListener(v.camelToDashCase(c)+"-changed",m));try{this.handleValueChanged(t,i,s,t[c],g,d,u,!1,e)}catch(y){console.error(y)}s[1].twoWay&&d==0&&this.addTwoWayBinding(s,t,y=>t[c]=y)}else if(h[0]==="$"){let c=h.substring(1);c[0]==="."&&(c=this._visualizationHandler.getNormalizedSignalName(c,e,t)),this._visualizationHandler.getObject(c).then(m=>{this.handleValueChanged(t,i,s,m,g,d,u,!0,e)})}else if(h[0]==="\xA7"){let c=h.substring(1),m=n.valueProvider(c,{element:t,binding:s,relativeSignalPath:e,root:i});m instanceof Promise?m.then(x=>this.handleValueChanged(t,i,s,x,g,d,u,!0,e)):this.handleValueChanged(t,i,s,m,g,d,u,!0,e),n.valueChangedCallbacks||(n.valueChangedCallbacks=new Map);let y=n.valueChangedCallbacks.get(c);y==null&&(y=[],n.valueChangedCallbacks.set(c,y)),y.push(()=>{let x=n.valueProvider(c,{element:t,binding:s,relativeSignalPath:e,root:i});x instanceof Promise?x.then(ue=>this.handleValueChanged(t,i,s,ue,g,d,u,!0,e)):this.handleValueChanged(t,i,s,x,g,d,u,!0,e)})}else if(h.includes("{")){let c=new H(this,this._visualizationHandler,h,m=>this.handleValueChanged(t,i,s,m.val,g,d,u,!1,e),t,e,i,n);a||(a=[]),a.push(()=>c.dispose()),s[1].twoWay&&d==0&&this.addTwoWayBinding(s,t,m=>c.setState(m))}else if(s[1].historic)if(s[1].historic.reloadInterval){let c={timerId:-1},m=async()=>{let y=await this._visualizationHandler.getHistoricData(h,s[1].historic);this.handleValueChanged(t,i,s,y?.values,g,d,u,!0,e),c.timerId!==null&&(c.timerId=setTimeout(m,s[1].historic.reloadInterval))};m(),a||(a=[]),a.push(()=>{c.timerId>0&&clearTimeout(c.timerId),c.timerId=null})}else this._visualizationHandler.getHistoricData(h,s[1].historic).then(c=>this.handleValueChanged(t,i,s,c?.values,g,d,u,!0,e));else{let c=(m,y)=>this.handleValueChanged(t,i,s,y.val,g,d,u,!1,e);l.push([h,c,this._visualizationHandler.subscribeState(h,c)]),this._visualizationHandler.getState(h).then(m=>this.handleValueChanged(t,i,s,m?.val,g,d,u,!1,e)),s[1].twoWay&&d==0&&this.addTwoWayBinding(s,t,m=>this._visualizationHandler.setState(h,m))}}return p}addTwoWayBinding(t,s,e){t[1].expressionTwoWay&&(t[1].compiledExpressionTwoWay||(t[1].expressionTwoWay.includes("return ")?t[1].compiledExpressionTwoWay=new Function(["value"],t[1].expressionTwoWay):t[1].compiledExpressionTwoWay=new Function(["value"],"return "+t[1].expressionTwoWay)));for(let i of t[1].events){let n=s[i];n instanceof De?n.on(()=>{let l;t[1].target==f.attribute?l=s.getAttribute(t[0]):l=s[t[0]],l=r.parseValueWithType(l,t),t[1].compiledExpressionTwoWay&&(l=t[1].compiledExpressionTwoWay(l)),e(l)}):s.addEventListener(i,l=>{let a;t[1].target==f.attribute?a=s.getAttribute(t[0]):a=s[t[0]],a=r.parseValueWithType(a,t),t[1].compiledExpressionTwoWay&&(a=t[1].compiledExpressionTwoWay(a)),e(a)})}}static parseValueWithType(t,s){if(s[1].type)switch(s[1].type){case"number":return parseFloat(t);case"boolean":return t===!0||t==="true"||!!parseInt(t);case"string":return t?.toString();case"integer":return parseInt(t)}return t}handleValueChanged(t,s,e,i,n,l,a,p,o){let u=i;if(!p&&l==0&&(u=r.parseValueWithType(u,e)),n[l]=u,e[1].expression&&(e[1].compiledExpression||(a.push("__res"),a.push("__ctx"),e[1].expression.includes("return ")?e[1].compiledExpression=new Function(a,e[1].expression):e[1].compiledExpression=new Function(a,"return "+e[1].expression)),n[a.length-1]={element:t,root:s,boundNames:e[1].signal,boundTargetName:e[0],boundTargetType:e[1].target},u=e[1].compiledExpression(...n),n[a.length-1]=u),e[1].converter)if(typeof e[1].converter=="string")u=this.namedConverterCallback(e[1].converter,u,t,e);else{let g=u!=null?u.toString():u;if(g in e[1].converter){let d=e[1].converter[g];typeof d=="string"?u=new Function(a,"return `"+e[1].converter[g]+"`")(...n):u=d}else{let d=!1,h=parseFloat(u);for(let c in e[1].converter)if(c.length>2&&c[0]===">"&&c[1]==="="){let m=parseFloat(c.substring(2));if(h>=m){let y=e[1].converter[c];typeof y=="string"?u=new Function(a,"return `"+e[1].converter[c]+"`")(...n):u=y,d=!0;break}}else if(c.length>2&&c[0]==="<"&&c[1]==="="){let m=parseFloat(c.substring(2));if(h<=m){let y=e[1].converter[c];typeof y=="string"?u=new Function(a,"return `"+e[1].converter[c]+"`")(...n):u=y,d=!0;break}}else if(c.length>1&&c[0]===">"){let m=parseFloat(c.substring(1));if(h>m){let y=e[1].converter[c];typeof y=="string"?u=new Function(a,"return `"+e[1].converter[c]+"`")(...n):u=y,d=!0;break}}else if(c.length>1&&c[0]==="<"){let m=parseFloat(c.substring(1));if(h<m){let y=e[1].converter[c];typeof y=="string"?u=new Function(a,"return `"+e[1].converter[c]+"`")(...n):u=y,d=!0;break}}else{let m=c.split("-");if(m.length>1&&(m[0]===""||h>=parseFloat(m[0]))&&(m[1]===""||parseFloat(m[1])>=h)){let y=e[1].converter[c];typeof y=="string"?u=new Function(a,"return `"+e[1].converter[c]+"`")(...n):u=y,d=!0;break}}!d&&e[1].converterDefault!==void 0&&(u=e[1].converterDefault)}}if(e[1].inverted&&(u=!u),e[1].writeBackSignal){let g=e[1].writeBackSignal;g[0]==="."&&(g=o+g),this._visualizationHandler.setState(g,u,!0)}e[1].target==f.property?t[e[0]]=u:e[1].target==f.attribute?t.setAttribute(e[0],u):e[1].target==f.css?t.style[e[0]]=u:e[1].target==f.cssvar?t.style.setProperty(e[0],u):e[1].target==f.class?u?t.classList.add(e[0]):t.classList.remove(e[0]):e[1].target==f.visible&&(t.style.visibility=u?"":"collapse")}static camelToDotCase(t){return t.replace(/([A-Z])/g,s=>`.${s[0].toLowerCase()}`)}static dotToCamelCase(t){return t.replace(/\.([a-z])/g,s=>s[1].toUpperCase())}};var te=class{name;relativeSignalsPath;commands;parameters};import{deepValue as _,setDeepValue as se,sleep as Fe}from"@node-projects/web-component-designer/dist/elements/helper/Helper.js";import j from"long";var ie=class{_visualizationHandler;_subscriptionCallback=()=>{};constructor(r){this._visualizationHandler=r}async execute(r,t){for(let s=0;s<r.length;s++){let e=r[s];if(e.type=="Exit")break;if(e.type=="Goto"){let i=await this.getValue(e.label,t);if(s=r.findIndex(n=>n.type=="Label"&&n.label==i),s<0)break}else if(e.type=="Condition"){let i=await this.getValue(e.value1,t),n=await this.getValue(e.value2,t),l=await this.getValue(e.comparisonType,t),a=!1;switch(l){case"==null":a=i==null;break;case"!=null":a=i!=null;break;case"==true":a=i==!0;break;case"==false":a=i==!1;break;case"==":a=i==n;break;case"!=":a=i!=n;break;case">":a=i>n;break;case"<":a=i<n;break;case">=":a=i>=n;break;case"<=":a=i<=n;break;case"&&":a=i&&n;break;case"||":a=i||n;break}if(a){await this.runExternalScript(await this.getValue(e.trueScriptName,t),await this.getValue(e.trueScriptType,t));let p=await this.getValue(e.trueGotoLabel,t);if(p&&(s=r.findIndex(o=>o.type=="Label"&&o.label==p),s<0))break}else{await this.runExternalScript(await this.getValue(e.falseScriptName,t),await this.getValue(e.falseScriptType,t));let p=await this.getValue(e.falseGotoLabel,t);if(p&&(s=r.findIndex(o=>o.type=="Label"&&o.label==p),s<0))break}}else await this.runScriptCommand(e,t)}}async getValueFromTarget(r,t,s){return r==="property"?_(s.root,t):r==="elementProperty"?_(s.element,t):(await this._visualizationHandler.getState(this.getSignalName(t,s)))?.val}async setValueOnTarget(r,t,s,e){r==="property"?se(s.root,t,e):r==="elementProperty"?se(s.element,t,e):await this._visualizationHandler.setState(this.getSignalName(t,s),e)}async runExternalScript(r,t){}async runScriptCommand(command,context){switch(command.type){case"Comment":case"Label":case"Condition":case"Goto":case"Exit":break;case"OpenUrl":{window.open(await this.getValue(command.url,context),command.target);break}case"Delay":{let r=await this.getValue(command.value??500,context);await Fe(r);break}case"Console":{let r=await this.getValue(command.target??"log",context),t=await this.getValue(command.message,context);console[r](t);break}case"ToggleSignalValue":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.target,context),s=await this.getValueFromTarget(t,r,context);await this._visualizationHandler.setState(this.getSignalName(r,context),!s);break}case"ToggleSignalValueThroughList":{let r=await this.getValue(command.valueList,context),t=await this.getValue(command.signal,context),s=await this.getValue(command.target,context),e=await this.getValueFromTarget(s,t,context),i=r.indexOf(e)+1;i>=r.length&&(i=0);let n=r[i];await this._visualizationHandler.setState(this.getSignalName(t,context),n);break}case"SetSignalValue":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.target,context);await this.setValueOnTarget(t,r,context,await this.getValue(command.value,context));break}case"IncrementSignalValue":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.target,context),e=await this.getValueFromTarget(t,r,context)+await this.getValue(command.value,context);await this.setValueOnTarget(t,r,context,e);break}case"DecrementSignalValue":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.target,context),e=await this.getValueFromTarget(t,r,context)-await this.getValue(command.value,context);await this.setValueOnTarget(t,r,context,e);break}case"CalculateSignalValue":{let formula=await this.getValue(command.formula,context),target=await this.getValue(command.target,context),targetSignal=await this.getValue(command.targetSignal,context),nm=await this.parseStringWithValues(formula,context),result=eval(nm);await this.setValueOnTarget(target,targetSignal,context,result);break}case"SetBitInSignal":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.bitNumber??0,context),s=await this.getValue(command.target,context),e=await this.getValueFromTarget(s,r,context),i=j.fromNumber(1).shiftLeft(t),n=j.fromNumber(e).or(i).toNumber();await this.setValueOnTarget(s,r,context,n);break}case"ClearBitInSignal":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.bitNumber??0,context),s=await this.getValue(command.target,context),e=await this.getValueFromTarget(s,r,context),i=j.fromNumber(1).shiftLeft(t);i.negate();let n=j.fromNumber(e).and(i).toNumber();await this.setValueOnTarget(s,r,context,n);break}case"ToggleBitInSignal":{let r=await this.getValue(command.signal,context),t=await this.getValue(command.bitNumber??0,context),s=await this.getValue(command.target,context),e=await this.getValueFromTarget(s,r,context),i=j.fromNumber(1).shiftLeft(t),n=j.fromNumber(e).xor(i).toNumber();await this.setValueOnTarget(s,r,context,n);break}case"Javascript":{let r=await this.getValue(command.script,context),t=context;t.shadowRoot=context.element.getRootNode(),t.instance=context.shadowRoot.host,command.compiledScript||(command.compiledScript=new Function("context",r)),command.compiledScript(t);break}case"SetElementProperty":{command=N.upgradeSetElementProperty(command);let r=await this.getValue(command.name,context);r===""&&(r=null);let t=await this.getValue(command.value,context),s=await this.getValue(command.parentIndex??0,context),e=await this.getValue(command.target??"property",context),i=await this.getValue(command.targetSelectorTarget??"container",context),n=await this.getValue(command.targetSelector,context),l=await this.getValue(command.mode??"toggle",context),a=this.getTargetFromTargetSelector(context,i,s,n);for(let p of a)e=="attribute"?p.setAttribute(r,t):e=="property"?p[r]=t:e=="css"?p.style[r]=t:e=="class"&&(l==="toggle"?p.classList.toggle(r??t):l==="remove"?p.classList.remove(r??t):p.classList.add(r??t));break}case"SubscribeSignal":{let r=await this.getValue(command.signal,context);if(await this.getValue(command.oneTime,context)){let s=()=>{this._visualizationHandler.unsubscribeState(r,s,null)};this._visualizationHandler.subscribeState(r,s)}else this._visualizationHandler.subscribeState(r,this._subscriptionCallback);break}case"UnsubscribeSignal":{let r=await this.getValue(command.signal,context);this._visualizationHandler.unsubscribeState(r,this._subscriptionCallback,null);break}case"WriteSignalsInGroup":{let r=await this.getValue(command.group,context);this._visualizationHandler.writeSignalsInGroup(r);break}case"ClearSignalsInGroup":{let r=await this.getValue(command.group,context);this._visualizationHandler.clearSignalsInGroup(r);break}case"RunScript":{let r=await this.getValue(command.name,context),t=await this.getValue(command.scriptType,context);this.runExternalScript(r,t);break}case"ShowMessageBox":{let r=null;if(await this.getValue(command.buttons,context)=="yesNo"){let e=await this.getValue(command.message,context);confirm(e)?r=1:r=2}else{let e=await this.getValue(command.message,context);alert(e),r=1}let s=await this.getValue(command.resultSignal,context);s&&this._visualizationHandler.setState(s,r);break}case"ShowPrompt":{let r=await this.getValue(command.message,context),t=await this.getValue(command.default,context),s=prompt(r,t),e=await this.getValue(command.resultSignal,context);e&&s&&this._visualizationHandler.setState(e,s);break}case"Login":case"Logout":case"CloseDialog":case"OpenDialog":case"OpenScreen":case"SwitchLanguage":case"CopySignalValuesFromFolder":case"ExportSignalValuesAsJson":case"ImportSignalValuesFromJson":{alert('command: "'+command.type+'" is not yet implemented');break}}}getTarget(r,t,s){if(t==="container"){let e=r.element.getRootNode().host;for(let i=0;i<(s??0);i++)e=e.getRootNode().host;return e}else if(t==="element"){let e=r.element;for(let i=0;i<(s??0);i++)e=e.parentElement;return e}return null}getTargetFromTargetSelector(r,t,s,e){let i=this.getTarget(r,t,s),n=[i];return e&&(t==="container"?n=i.shadowRoot.querySelectorAll(e):n=i.querySelectorAll(e)),n}async getValue(value,outerContext){if(value==null)return null;if(typeof value=="object")switch(value.source){case"property":return _(outerContext.root,value.name);case"elementProperty":return _(outerContext.element,value.name);case"signal":return(await this._visualizationHandler.getState(this.getSignalName(value.name,outerContext)))?.val;case"signalInProperty":{let r=_(outerContext.root,value.name);return(await this._visualizationHandler.getState(this.getSignalName(r,outerContext)))?.val}case"event":{let r=outerContext.event;return value.name&&(r=_(r,value.name)),r}case"parameter":return outerContext.parameters[value.name];case"context":return _(outerContext,value.name);case"complexString":{let r=value.name;return r!=null?await this.parseStringWithValues(r,outerContext):null}case"complexSignal":{let r=value.name;if(r!=null){let t=await this.parseStringWithValues(r,outerContext);return(await this._visualizationHandler.getState(this.getSignalName(t,outerContext)))?.val}return null}case"expression":{var ctx=outerContext;return eval(value.name)}}return value}async getStateOrFieldOrParameter(name,context){if(name[0]==="\xA7"){var ctx=context;return eval("ctx."+name.substring(1))}else{if(name[0]==="?"&&name[1]==="?")return context.root[name.substring(2)];if(name[0]==="?")return await this._visualizationHandler.getState(this.getSignalName(context.root[name.substring(1)],context))}return await this._visualizationHandler.getState(this.getSignalName(name,context))}async parseStringWithValues(r,t){let s=J(r),e=await Promise.all(s.signals.map(n=>this.getStateOrFieldOrParameter(this.getSignalName(n,t),t))),i=s.parts[0];for(let n=0;n<s.parts.length-1;n++){let l=e[n];typeof l=="object"&&(l=l.val),l==null&&(l=""),i+=l+s.parts[n+1]}return i}getSignalName(r,t){return r[0]==="."?t.relativeSignalsPath+r:r}createScriptContext(r,t,s,e,i){return{root:r,event:t,element:s,parameters:e,relativeSignalsPath:i}}async assignAllScripts(r,t,s,e,i,n,l,a){let p=s.querySelectorAll("*");n??=this.createScriptContext;let o=null;if(t)try{o=await import(URL.createObjectURL(new Blob([t],{type:"application/javascript"}))),a?a(o):o.init&&o.init(e,s)}catch(u){console.error("error parsing javascript - "+r,u)}for(let u of p)for(let g of u.attributes)if(g.name[0]=="@")try{let d=g.name.substring(1),h=g.value.trim();if(h[0]=="{"){let c=JSON.parse(h);if("commands"in c)u.addEventListener(d,m=>this.execute(c.commands,n(e,m,u,c.parameters,c.relativeSignalsPath)));else if("blocks"in c){let m=null;u.addEventListener(d,async y=>{m||(m=await X(c)),m(y,s,c.parameters,c.relativeSignalsPath??"",i,n(e,y,u,c.parameters,c.relativeSignalsPath))})}else if(l)l(u,d,c);else if("name"in c){let m=c.name;u.addEventListener(d,y=>{o[m]?o[m](y,u,s,e,c.parameters):console.warn("javascript function named: "+m+' not found, maybe missing a "export" ?')})}}else u.addEventListener(d,c=>{o[h]?o[h](c,u,s,e):console.warn("javascript function named: "+h+' not found, maybe missing a "export" ?')})}catch{console.warn("error assigning script",u,g)}return o}};import{OverlayLayer as He,DesignItem as T,InsertAction as Je,BindingTarget as k,PropertyType as M}from"@node-projects/web-component-designer";var ae=class{constructor(t,s){this._bindingsHelper=t,this._visualizationHandler=s}_bindingsHelper;_visualizationHandler;rectMap=new Map;rect;dragEnter(t,s,e){let i=T.GetDesignItem(e);if(i&&!i.isRootItem){let n=t.getNormalizedElementCoordinates(e);this.rect=t.overlayLayer.drawRect("IobrokerWebuiBindableObjectDragDropService",n.x,n.y,n.width,n.height,"",null,He.Background),this.rect.style.fill="#ff0000",this.rect.style.opacity="0.3",this.rectMap.set(e,this.rect)}}dragLeave(t,s,e){let i=T.GetDesignItem(e);if(i&&!i.isRootItem){let n=this.rectMap.get(e);t.overlayLayer.removeOverlay(n),this.rectMap.delete(e)}}dragOver(t,s,e){return"copy"}async drop(t,s,e,i){for(let p of this.rectMap.values())t.overlayLayer.removeOverlay(p);this.rectMap.clear();let n=T.GetDesignItem(i),l=await this._visualizationHandler.getObject(e.fullName),a=this._visualizationHandler.getSignalInformation(l);if(n&&!n.isRootItem)if(i instanceof HTMLInputElement){let p={signal:e.fullName,target:k.property},o=this._bindingsHelper.serializeBinding(i,i.type=="checkbox"?"checked":"value",p);n.setAttribute(o[0],o[1])}else{let p={signal:e.fullName,target:k.content},o=this._bindingsHelper.serializeBinding(i,null,p);n.setAttribute(o[0],o[1])}else{let p=t.getNormalizedEventCoordinates(s),o,u,g=await this._visualizationHandler.getState(e.fullName);if(a.role==="url"&&typeof g?.val=="string")if(g.val.endsWith("jpg")||g.val.endsWith("jpeg")||g.val.endsWith("png")||g.val.endsWith("gif")||g.val.endsWith("svg")){let d=document.createElement("img");o=T.createDesignItemFromInstance(d,t.serviceContainer,t.instanceServiceContainer),u=o.openGroup("Insert");let h={signal:e.fullName,target:k.property},c=this._bindingsHelper.serializeBinding(d,"src",h);o.setAttribute(c[0],c[1]),o.element.src=g.val}else if(g.val.endsWith("mp4")){let d=document.createElement("video");o=T.createDesignItemFromInstance(d,t.serviceContainer,t.instanceServiceContainer),u=o.openGroup("Insert");let h={signal:e.fullName,target:k.property},c=this._bindingsHelper.serializeBinding(d,"src",h);o.setAttribute(c[0],c[1]),o.element.src=g.val}else{let d=document.createElement("iframe");o=T.createDesignItemFromInstance(d,t.serviceContainer,t.instanceServiceContainer),u=o.openGroup("Insert");let h={signal:e.fullName,target:k.property},c=this._bindingsHelper.serializeBinding(d,"src",h);o.setAttribute(c[0],c[1]),o.element.src=g.val}if(!o){let d=document.createElement("input");o=T.createDesignItemFromInstance(d,t.serviceContainer,t.instanceServiceContainer),u=o.openGroup("Insert");let h=a.writeable!==!1,c={signal:e.fullName,target:k.property,twoWay:h},m=this._bindingsHelper.serializeBinding(d,"value",c);a.type==="boolean"?(m=this._bindingsHelper.serializeBinding(d,"checked",c),o.setAttribute("type","checkbox")):a.role=="date"?(c.twoWay=h,m=this._bindingsHelper.serializeBinding(d,"value-as-number",c),o.setAttribute("type","date"),o.setAttribute("readonly","")):a.role=="datetime"&&(c.twoWay=h,m=this._bindingsHelper.serializeBinding(d,"value-as-number",c),o.setAttribute("type","datetime-local"),o.setAttribute("readonly","")),o.setAttribute(m[0],m[1])}o.setStyle("position","absolute"),o.setStyle("left",p.x+"px"),o.setStyle("top",p.y+"px"),t.instanceServiceContainer.undoService.execute(new Je(t.rootDesignItem,t.rootDesignItem.childCount,o)),u.commit(),requestAnimationFrame(()=>t.instanceServiceContainer.selectionService.setSelectedElements([o]))}}dragOverOnProperty(t,s,e){return"copy"}dropOnProperty(t,s,e,i){if(s.type=="signal"){s.service.setValue(i,s,e.fullName);return}let n={signal:e.fullName,target:k.property};s.propertyType==M.attribute&&(n.target=k.attribute),s.propertyType==M.cssValue&&(n.target=k.css),n.signal=e.fullName,n.twoWay=s.propertyType==M.property||s.propertyType==M.propertyAndAttribute;let l=i[0].openGroup("drop binding");for(let a of i){let p=this._bindingsHelper.serializeBinding(a.element,s.name,n);a.setAttribute(p[0],p[1])}l.commit()}};import{BindingMode as U,BindingTarget as ne,PropertiesHelper as Ue}from"@node-projects/web-component-designer";var re=class r{constructor(t){this._bindingsHelper=t}_bindingsHelper;static type="visualization-binding";getBindings(t){return Array.from(this._bindingsHelper.getBindings(t.element)).map(e=>({targetName:e[1].target===ne.css||e[1].target===ne.attribute?Ue.camelToDashCase(e[0]):e[0],target:e[1].target,mode:e[1].twoWay?U.twoWay:U.oneWay,invert:e[1].inverted,bindableObjectNames:e[1].signal.split(";"),expression:e[1].expression,expressionTwoWay:e[1].expressionTwoWay,converter:e[1].converter,type:r.type,service:this,changedEvents:e[1].events,historic:e[1].historic,writeBackSignal:e[1].writeBackSignal}))}setBinding(t,s){let e={signal:s.bindableObjectNames.join(";"),target:s.target};e.inverted=s.invert,e.twoWay=s.mode==U.twoWay,e.expression=s.expression,e.expressionTwoWay=s.expressionTwoWay,e.historic=s.historic,e.type=s.type,e.converter=s.converters,e.target=s.target,e.events=s.changedEvents;let i=this._bindingsHelper.serializeBinding(t.element,s.targetName,e),n=t.openGroup("edit_binding");return t.setAttribute(i[0],i[1]),n.commit(),!0}clearBinding(t,s,e){let i=this._bindingsHelper.getBindingAttributeName(t.element,s,e);return t.removeAttribute(i),!0}};var le=class{getRefactorings(t){let s=[];for(let e of t){let i=e.serviceContainer.bindingService.getBindings(e);if(i)for(let n of i)for(let l of n.bindableObjectNames){let a="signal",p="";if(l.includes(":")){let o=l.split(":")[0],u=l.substring(o.length+1);u.startsWith("?")&&(u=u.substring(1),p="?",a="property",u.startsWith("?")&&(u=u.substring(1),p="??")),s.push({service:this,name:u,itemType:a,designItem:e,type:"binding",sourceObject:n,display:n.target+"/"+n.targetName+" - "+o+":",shortName:o,prefix:p})}else l.startsWith("?")&&(l=l.substring(1),p="?",a="property",l.startsWith("?")&&(l=l.substring(1),p="??")),s.push({service:this,name:l,itemType:a,designItem:e,type:"binding",sourceObject:n,display:n.target+"/"+n.targetName,prefix:p})}}return s}refactor(t,s,e){let i=t.sourceObject;t.shortName?i.bindableObjectNames=i.bindableObjectNames.map(n=>n==t.shortName+":"+t.prefix+s?t.shortName+":"+t.prefix+e:n):i.bindableObjectNames=i.bindableObjectNames.map(n=>n==t.prefix+s?t.prefix+e:n),t.designItem.serviceContainer.bindingService.setBinding(t.designItem,i)}};var oe=class{dragOverOnProperty(t,s,e){return"copy"}dropOnProperty(t,s,e,i){s.service.setValue(i,s,e.text)}};import{BindingTarget as b}from"@node-projects/web-component-designer";var ce=class{getRefactorings(t){let s=[];for(let e of t)for(let i of e.attributes())if(i[0][0]=="@"){let n=i[1];if(n[0]=="{"){let l=JSON.parse(n);if("commands"in l)for(let a of l.commands){for(let p in a){let o=a[p];if(o!=null&&typeof o=="object"){let u=o;if(u.source==="signal")s.push({name:u.name,itemType:"signal",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:l,display:a.type+"/"+i[0].substring(1)+"/"+p+"[signal]",refactor:g=>u.name=g});else if(u.source==="property")s.push({name:u.name,itemType:"property",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:l,display:a.type+"/"+i[0].substring(1)+"/"+p+"[property]",refactor:g=>u.name=g});else if(u.source==="complexString")for(let g of u.name.matchAll(/\{(.*?)\}/g)){let d=g[0],h=g[1];if(h[0]==="?"){let c="?";h=h.substring(1),h[0]==="?"&&(c="??",h=h.substring(1)),s.push({name:h,itemType:"property",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:l,display:a.type+"/"+i[0].substring(1)+"/"+p+"[complexString]->property",refactor:m=>u.name=u.name.replace(d,"{"+c+m+"}")})}else s.push({name:h,itemType:"signal",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:l,display:a.type+"/"+i[0].substring(1)+"/"+p+"[complexString]->signal",refactor:c=>u.name=u.name.replace(d,"{"+c+"}")})}}}switch(a.type){case"SetSignalValue":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"ToggleSignalValue":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"IncrementSignalValue":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"DecrementSignalValue":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"SetBitInSignal":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"ClearBitInSignal":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"ToggleBitInSignal":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"OpenScreen":a.screen&&typeof a.screen=="string"&&s.push({name:a.screen,itemType:"screen",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/screen",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.screen=p});break;case"OpenDialog":a.screen&&typeof a.screen=="string"&&s.push({name:a.screen,itemType:"screen",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/screen",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.screen=p});break;case"CalculateSignalValue":a.targetSignal&&typeof a.targetSignal=="string"&&s.push({name:a.targetSignal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/targetSignal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.targetSignal=p});break;case"SubscribeSignal":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"UnsubscribeSignal":a.signal&&typeof a.signal=="string"&&s.push({name:a.signal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/signal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.signal=p});break;case"ShowMessageBox":a.resultSignal&&typeof a.resultSignal=="string"&&s.push({name:a.resultSignal,itemType:"signal",target:b.event,targetName:i[0],display:a.type+"/"+i[0].substring(1)+"/resultSignal",service:this,designItem:e,type:"script",sourceObject:l,refactor:p=>a.resultSignal=p});break}}else"blocks"in l;if("parameters"in l)for(let a in l.parameters)typeof l.parameters[a]=="string"&&s.push({name:l.parameters[a],itemType:"parameter",target:b.event,targetName:i[0],service:this,designItem:e,type:"script",sourceObject:l,display:i[0].substring(1)+"/parameters/"+a,refactor:p=>l.parameters[a]=p})}}return s}refactor(t,s,e){t.refactor(e);let i=JSON.stringify(t.sourceObject);t.designItem.setAttribute(t.targetName,i)}};import{BasePropertyEditor as Xe}from"@node-projects/web-component-designer";var pe=class extends Xe{_ip;_container;constructor(t,s){super(t),this._container=document.createElement("div"),this._container.style.display="flex",this._ip=document.createElement("input"),this._ip.onchange=i=>this._valueChanged(this._ip.value),this._ip.onfocus=i=>{this._ip.selectionStart=0,this._ip.selectionEnd=this._ip.value?.length},this._container.appendChild(this._ip);let e=document.createElement("button");e.textContent="...",e.onclick=async()=>{let i=s.createBindableObjectBrowser();i.initialize(this.designItems[0].serviceContainer,this.designItems[0].instanceServiceContainer,"property"),i.title="select signal...";let n=new AbortController;i.objectDoubleclicked.on(()=>{n.abort(),this._ip.value=i.selectedObject.fullName,this._valueChanged(this._ip.value)}),await s.openConfirmation(i,{x:100,y:100,width:400,height:300,abortSignal:n.signal})&&(this._ip.value=i.selectedObject.fullName,this._valueChanged(this._ip.value))},this._container.appendChild(e),this.element=this._container}refreshValue(t,s){s==null?this._ip.value="":this._ip.value=s}};export{ae as BindableObjectDragDropService,D as BindingsEditor,E as BindingsEditorHistoric,ee as BindingsHelper,C as BlocklyScriptEditor,L as EventAssignment,O as ParameterEditor,oe as PropertyGridDragDropService,te as Script,ce as ScriptRefactorService,ie as ScriptSystem,pe as SignalPropertyEditor,I as SimpleScriptEditor,le as VisualizationBindingsRefactorService,re as VisualizationBindingsService,W as VisualizationPropertyGrid,B as bindingPrefixAttribute,R as bindingPrefixClass,w as bindingPrefixContent,V as bindingPrefixCss,A as bindingPrefixCssVar,Pe as bindingPrefixInsideCss,Me as bindingPrefixInsideCssVarName,S as bindingPrefixProperty,F as bindingPrefixVisible,Ft as bindingsInCssRegex,X as generateEventCodeFromBlockly,P as getNestedProperty,z as isLit,J as parseBindingString};
|
|
390
390
|
//!varname => inverted
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare type ScriptCommands = RunnableScriptCommands | Comment | Condition | Exit | Label | Goto;
|
|
2
|
-
export declare type RunnableScriptCommands = OpenScreen | OpenUrl | OpenDialog | CloseDialog | ToggleSignalValue | ToggleSignalValueThroughList | SetSignalValue | IncrementSignalValue | DecrementSignalValue | SetBitInSignal | ClearBitInSignal | ToggleBitInSignal | Console | CalculateSignalValue | Javascript | SetElementProperty | Delay | SwitchLanguage | Login | Logout | SubscribeSignal | UnsubscribeSignal | WriteSignalsInGroup | ClearSignalsInGroup | RunScript | CopySignalValuesFromFolder | ShowMessageBox | ExportSignalValuesAsJson | ImportSignalValuesFromJson;
|
|
2
|
+
export declare type RunnableScriptCommands = OpenScreen | OpenUrl | OpenDialog | CloseDialog | ToggleSignalValue | ToggleSignalValueThroughList | SetSignalValue | IncrementSignalValue | DecrementSignalValue | SetBitInSignal | ClearBitInSignal | ToggleBitInSignal | Console | CalculateSignalValue | Javascript | SetElementProperty | Delay | SwitchLanguage | Login | Logout | SubscribeSignal | UnsubscribeSignal | WriteSignalsInGroup | ClearSignalsInGroup | RunScript | CopySignalValuesFromFolder | ShowMessageBox | ShowPrompt | ExportSignalValuesAsJson | ImportSignalValuesFromJson;
|
|
3
3
|
/**
|
|
4
4
|
* signal - a signal (the default)
|
|
5
5
|
* property - a property defined in the current screen/control
|
|
@@ -75,6 +75,29 @@ export interface ShowMessageBox {
|
|
|
75
75
|
height?: string;
|
|
76
76
|
additionalData?: string;
|
|
77
77
|
}
|
|
78
|
+
export interface ShowPrompt {
|
|
79
|
+
type: 'ShowPrompt';
|
|
80
|
+
/**
|
|
81
|
+
* title text
|
|
82
|
+
*/
|
|
83
|
+
title: string;
|
|
84
|
+
/**
|
|
85
|
+
* message text
|
|
86
|
+
*/
|
|
87
|
+
message: string;
|
|
88
|
+
/**
|
|
89
|
+
* default value
|
|
90
|
+
*/
|
|
91
|
+
default?: string;
|
|
92
|
+
/**
|
|
93
|
+
* number of the clicked button, starting with 1
|
|
94
|
+
* @TJS-format signal
|
|
95
|
+
*/
|
|
96
|
+
resultSignal: string;
|
|
97
|
+
width?: string;
|
|
98
|
+
height?: string;
|
|
99
|
+
additionalData?: string;
|
|
100
|
+
}
|
|
78
101
|
export interface CloseDialog {
|
|
79
102
|
type: 'CloseDialog';
|
|
80
103
|
/**
|
|
@@ -303,24 +303,34 @@ export class ScriptSystem {
|
|
|
303
303
|
case 'ShowMessageBox': {
|
|
304
304
|
let res = null;
|
|
305
305
|
const buttons = await this.getValue(command.buttons, context);
|
|
306
|
-
if (buttons == '
|
|
307
|
-
const message = await this.getValue(command.message, context);
|
|
308
|
-
alert(message);
|
|
309
|
-
res = 1;
|
|
310
|
-
}
|
|
311
|
-
else if (buttons == 'yesNo') {
|
|
306
|
+
if (buttons == 'yesNo') {
|
|
312
307
|
const message = await this.getValue(command.message, context);
|
|
313
308
|
if (confirm(message))
|
|
314
309
|
res = 1;
|
|
315
310
|
else
|
|
316
311
|
res = 2;
|
|
317
312
|
}
|
|
313
|
+
else {
|
|
314
|
+
const message = await this.getValue(command.message, context);
|
|
315
|
+
alert(message);
|
|
316
|
+
res = 1;
|
|
317
|
+
}
|
|
318
318
|
const resultSignal = await this.getValue(command.resultSignal, context);
|
|
319
319
|
if (resultSignal) {
|
|
320
320
|
this._visualizationHandler.setState(resultSignal, res);
|
|
321
321
|
}
|
|
322
322
|
break;
|
|
323
323
|
}
|
|
324
|
+
case 'ShowPrompt': {
|
|
325
|
+
const message = await this.getValue(command.message, context);
|
|
326
|
+
const defaultValue = await this.getValue(command.default, context);
|
|
327
|
+
const result = prompt(message, defaultValue);
|
|
328
|
+
const resultSignal = await this.getValue(command.resultSignal, context);
|
|
329
|
+
if (resultSignal && result) {
|
|
330
|
+
this._visualizationHandler.setState(resultSignal, result);
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
324
334
|
case 'Login':
|
|
325
335
|
case 'Logout':
|
|
326
336
|
case 'CloseDialog':
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ScriptCommands, SetElementProperty } from "./ScriptCommands";
|
|
2
2
|
export declare class ScriptUpgrades {
|
|
3
|
-
static upgradeScriptCommand(scriptCommand: ScriptCommands): SetElementProperty | import("./ScriptCommands").OpenScreen | import("./ScriptCommands").OpenUrl | import("./ScriptCommands").OpenDialog | import("./ScriptCommands").CloseDialog | import("./ScriptCommands").ToggleSignalValue | import("./ScriptCommands").ToggleSignalValueThroughList | import("./ScriptCommands").SetSignalValue | import("./ScriptCommands").IncrementSignalValue | import("./ScriptCommands").DecrementSignalValue | import("./ScriptCommands").SetBitInSignal | import("./ScriptCommands").ClearBitInSignal | import("./ScriptCommands").ToggleBitInSignal | import("./ScriptCommands").Console | import("./ScriptCommands").CalculateSignalValue | import("./ScriptCommands").Javascript | import("./ScriptCommands").Delay | import("./ScriptCommands").SwitchLanguage | import("./ScriptCommands").Login | import("./ScriptCommands").Logout | import("./ScriptCommands").SubscribeSignal | import("./ScriptCommands").UnsubscribeSignal | import("./ScriptCommands").WriteSignalsInGroup | import("./ScriptCommands").ClearSignalsInGroup | import("./ScriptCommands").RunScript | import("./ScriptCommands").CopySignalValuesFromFolder | import("./ScriptCommands").ShowMessageBox | import("./ScriptCommands").ExportSignalValuesAsJson | import("./ScriptCommands").ImportSignalValuesFromJson | import("./ScriptCommands").Comment | import("./ScriptCommands").Condition | import("./ScriptCommands").Exit | import("./ScriptCommands").Label | import("./ScriptCommands").Goto;
|
|
3
|
+
static upgradeScriptCommand(scriptCommand: ScriptCommands): SetElementProperty | import("./ScriptCommands").OpenScreen | import("./ScriptCommands").OpenUrl | import("./ScriptCommands").OpenDialog | import("./ScriptCommands").CloseDialog | import("./ScriptCommands").ToggleSignalValue | import("./ScriptCommands").ToggleSignalValueThroughList | import("./ScriptCommands").SetSignalValue | import("./ScriptCommands").IncrementSignalValue | import("./ScriptCommands").DecrementSignalValue | import("./ScriptCommands").SetBitInSignal | import("./ScriptCommands").ClearBitInSignal | import("./ScriptCommands").ToggleBitInSignal | import("./ScriptCommands").Console | import("./ScriptCommands").CalculateSignalValue | import("./ScriptCommands").Javascript | import("./ScriptCommands").Delay | import("./ScriptCommands").SwitchLanguage | import("./ScriptCommands").Login | import("./ScriptCommands").Logout | import("./ScriptCommands").SubscribeSignal | import("./ScriptCommands").UnsubscribeSignal | import("./ScriptCommands").WriteSignalsInGroup | import("./ScriptCommands").ClearSignalsInGroup | import("./ScriptCommands").RunScript | import("./ScriptCommands").CopySignalValuesFromFolder | import("./ScriptCommands").ShowMessageBox | import("./ScriptCommands").ShowPrompt | import("./ScriptCommands").ExportSignalValuesAsJson | import("./ScriptCommands").ImportSignalValuesFromJson | import("./ScriptCommands").Comment | import("./ScriptCommands").Condition | import("./ScriptCommands").Exit | import("./ScriptCommands").Label | import("./ScriptCommands").Goto;
|
|
4
4
|
static upgradeSetElementProperty(scriptCommand: SetElementProperty): SetElementProperty;
|
|
5
5
|
}
|
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.
|
|
4
|
+
"version": "0.1.136",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "jochen.kuehner@gmx.de",
|