@node-projects/web-component-designer-visualization-addons 0.1.133 → 0.1.135
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.
|
@@ -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>
|
|
@@ -194,6 +194,9 @@ export class BindingsEditor extends BaseCustomWebComponentConstructorAppend {
|
|
|
194
194
|
constructor(property, binding, bindingTarget, serviceContainer, instanceServiceContainer, shell, config = { namedConverters: true }) {
|
|
195
195
|
super();
|
|
196
196
|
super._restoreCachedInititalValues();
|
|
197
|
+
//TODOS:
|
|
198
|
+
//typed values for converters
|
|
199
|
+
//default value for converter
|
|
197
200
|
this._objNmInput = this._getDomElement('objectName');
|
|
198
201
|
this._property = property;
|
|
199
202
|
this._binding = binding;
|
|
@@ -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 };
|
|
890
892
|
v = binding[1].compiledExpression(...valuesObject);
|
|
891
893
|
valuesObject[signalVarNames.length - 1] = v;
|
|
892
894
|
}
|
|
@@ -0,0 +1,390 @@
|
|
|
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
|
+
`};var de=`function extractPart(obj, propertyPath) {
|
|
10
|
+
let retVal = obj;
|
|
11
|
+
for (let p of propertyPath.split('.')) {
|
|
12
|
+
retVal = retVal?.[p];
|
|
13
|
+
}
|
|
14
|
+
return retVal;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function delay(ms) {
|
|
18
|
+
return new Promise(res => {
|
|
19
|
+
setTimeout(() => res(), ms);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export async function run(eventData, shadowRoot, parameters, relativeSignalsPath, visualizationHandler, context) {
|
|
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
|
+
<div id="blocklyDiv" style="position: absolute; width: 100%; height: 100%;"></div>
|
|
26
|
+
`;static style=ye`
|
|
27
|
+
:host {
|
|
28
|
+
box-sizing: border-box;
|
|
29
|
+
position: absolute;
|
|
30
|
+
height: 100%;
|
|
31
|
+
width: 100%;
|
|
32
|
+
display: block;
|
|
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
|
+
<span style="position:absolute;left:30px;top:26px;">from</span>
|
|
35
|
+
<span style="position:absolute;left:30px;top:77px;">count</span>
|
|
36
|
+
<span style="position:absolute;left:30px;top:123px;">limit</span>
|
|
37
|
+
<span style="position:absolute;left:30px;top:150px;">round</span>
|
|
38
|
+
<span style="position:absolute;left:55px;top:181px;">return newest entries</span>
|
|
39
|
+
<span style="position:absolute;left:55px;top:201px;">remove border values</span>
|
|
40
|
+
<span style="position:absolute;left:30px;top:301px;">step</span>
|
|
41
|
+
<span style="position:absolute;left:30px;top:270px;">aggregate</span>
|
|
42
|
+
<span style="position:absolute;left:30px;top:227px;">ignore null</span>
|
|
43
|
+
<input type="datetime-local" value="{{this.historic.from}}" style="position:absolute;left:75.9219px;top:26px;width:184px;">
|
|
44
|
+
<span style="position:absolute;left:31px;top:52px;">to</span>
|
|
45
|
+
<input type="datetime-local" value="{{this.historic.to}}" style="position:absolute;left:76px;top:51.4375px;width:184px;">
|
|
46
|
+
<input type="number" value="{{this.historic.count}}" style="position:absolute;left:76px;top:78.4415px;width:184px;">
|
|
47
|
+
<input type="number" value="{{this.historic.limit}}" style="position:absolute;left:76px;top:125.5px;width:184px;">
|
|
48
|
+
<input type="number" value="{{this.historic.round}}" style="position:absolute;left:76px;top:152px;width:184px;">
|
|
49
|
+
<input type="number" value="{{this.historic.step}}" style="position:absolute;left:75.921875px;top:301px;width:184px;">
|
|
50
|
+
<select value="{{?this.historic.aggregate}}" @change="[[this.refresh()]]" style="position:absolute;left:142px;top:273px;width:118px;height:21px;">
|
|
51
|
+
<option>none</option>
|
|
52
|
+
<option>minmax</option>
|
|
53
|
+
<option>max</option>
|
|
54
|
+
<option>min</option>
|
|
55
|
+
<option>average</option>
|
|
56
|
+
<option>total</option>
|
|
57
|
+
<option>count</option>
|
|
58
|
+
<option>percentile</option>
|
|
59
|
+
<option>quantile</option>
|
|
60
|
+
<option>integral</option>
|
|
61
|
+
</select>
|
|
62
|
+
<select value="{{this.historic.ignoreNull}}" style="position:absolute;left:142px;top:230px;width:119px;height:21px;">
|
|
63
|
+
<option>false</option>
|
|
64
|
+
<option>true</option>
|
|
65
|
+
<option>0</option>
|
|
66
|
+
</select>
|
|
67
|
+
<input type="checkbox" checked="{{this.historic.returnNewestEntries}}" style="position:absolute;left:35px;top:184px;">
|
|
68
|
+
<input type="checkbox" checked="{{this.historic.removeBorderValues}}" style="position:absolute;left:35px;top:204px;">
|
|
69
|
+
<div style="position:absolute;left:266px;top:26px;width:135px;height:201px;border:1px solid black;">
|
|
70
|
+
<div style="position:absolute;left:25px;top:36px;width:117px;height:154px;grid-template-columns:20px 1fr;display:grid;">
|
|
71
|
+
<input type="checkbox" checked="{{this.historic.from}}" style="grid-column:1;grid-row:1;">
|
|
72
|
+
<span>from</span>
|
|
73
|
+
<input type="checkbox" checked="{{this.historic.ack}}">
|
|
74
|
+
<span>ack</span>
|
|
75
|
+
<input type="checkbox" checked="{{this.historic.q}}">
|
|
76
|
+
<span>q</span>
|
|
77
|
+
<input type="checkbox" checked="{{this.historic.user}}">
|
|
78
|
+
<span>user</span>
|
|
79
|
+
<input type="checkbox" checked="{{this.historic.comment}}">
|
|
80
|
+
<span>comment</span>
|
|
81
|
+
<input type="checkbox" checked="{{this.historic.id}}">
|
|
82
|
+
<span>id</span>
|
|
83
|
+
</div>
|
|
84
|
+
<span style="position:absolute;left:8px;top:6px;">include fields</span>
|
|
85
|
+
</div>
|
|
86
|
+
<span style="position:absolute;left:31.8203px;top:390px;">update all (ms)</span>
|
|
87
|
+
<input value="{{this.historic.reloadInterval}}" type="number" style="position:absolute;left:142px;top:390px;width:119px;">
|
|
88
|
+
<span css:visibility="[[this.historic.aggregate == 'percentile' ? 'visible' : 'collapse']]" id="lblPercentile" style="position:absolute;left:30px;top:325px;">percentile</span>
|
|
89
|
+
<input css:visibility="[[this.historic.aggregate == 'percentile' ? 'visible' : 'collapse']]" value="{{this.historic.percentile}}" type="number" id="percentile" style="position:absolute;left:109px;top:325px;width:151px;">
|
|
90
|
+
<span css:visibility="[[this.historic.aggregate == 'integral' ? 'visible' : 'collapse']]" id="lblIntegral" style="position:absolute;left:30px;top:325px;">integral unit</span>
|
|
91
|
+
<input css:visibility="[[this.historic.aggregate == 'integral' ? 'visible' : 'collapse']]" value="{{this.historic.integralUnit}}" type="number" id="integralUnit" style="position:absolute;left:126px;top:325px;width:134px;">
|
|
92
|
+
<select css:visibility="[[this.historic.aggregate == 'integral' ? 'visible' : 'collapse']]" value="{{this.historic.integralInterpolation}}" style="position:absolute;left:178.93px;top:349px;width:81px;height:21px;">
|
|
93
|
+
<option>none</option>
|
|
94
|
+
<option>linear</option>
|
|
95
|
+
</select>
|
|
96
|
+
<span css:visibility="[[this.historic.aggregate == 'integral' ? 'visible' : 'collapse']]" style="position:absolute;left:29.9219px;top:346px;">integral interpolation</span>
|
|
97
|
+
<input css:visibility="[[this.historic.aggregate == 'quantile' ? 'visible' : 'collapse']]" value="{{this.historic.quantile}}" type="number" id="quantile" style="position:absolute;left:107px;top:325px;width:153px;">
|
|
98
|
+
<span css:visibility="[[this.historic.aggregate == 'quantile' ? 'visible' : 'collapse']]" id="lblQuantile" style="position:absolute;left:30px;top:325px;">quantile</span>
|
|
99
|
+
<span style="position:absolute;left:34px;top:417px;">instance</span>
|
|
100
|
+
<input type="text" value="{{?this.historic.instance}}" style="position:absolute;left:104px;top:419px;width:155px;">`;static style=be`
|
|
101
|
+
:host {
|
|
102
|
+
box-sizing: border-box;
|
|
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
|
+
<div id="root">
|
|
105
|
+
<div class="vertical-grid">
|
|
106
|
+
<div style="grid-column: 1/3">
|
|
107
|
+
<div style="display: flex; flex-direction: column;">
|
|
108
|
+
<div class="row">
|
|
109
|
+
<span style="cursor: pointer;" title="to use multiple objects, seprate them with semicolon (;).
Access signal objects in properties via ?propertyName, access the propertyValue via ??propertyName.
Access signal objects in properties of the target via #propertyName, access a propertyValue of the target via ##propertyName.
Bind to signal configurations via $objectId.
Bind to special values via §name (if supported by your framework).
You could also use signals inside of a Signal Name via {name}">objects</span>
|
|
110
|
+
</div>
|
|
111
|
+
<div id="groupObjectName" style="display:flex;align-items: flex-end;">
|
|
112
|
+
<input id="objectName" class="row" value="{{?this.objectNames::change}}" style="flex-grow: 1;">
|
|
113
|
+
<button @click="_clear" style="height: 22px">X</button>
|
|
114
|
+
<button @click="_select" style="height: 22px">...</button>
|
|
115
|
+
</div>
|
|
116
|
+
<div id="groupObjectType" class="row">
|
|
117
|
+
<label style="white-space: nowrap; margin-right: 4px;" title="if set, the value is converted to the type before binding is applied">type :</label>
|
|
118
|
+
<select class="row" value="{{?this.objectValueType}}">
|
|
119
|
+
<option selected value="">ignore</option>
|
|
120
|
+
<option value="number">number</option>
|
|
121
|
+
<option value="boolean">boolean</option>
|
|
122
|
+
<option value="string">string</string>
|
|
123
|
+
</select>
|
|
124
|
+
</div>
|
|
125
|
+
<div id="groupBindingMode" class="row">
|
|
126
|
+
<input type="checkbox" disabled="[[!this.twoWayPossible]]" checked="{{this.twoWay::change}}" @change="_refresh">
|
|
127
|
+
<span>two way binding</span>
|
|
128
|
+
<span css:display="[[this.twoWay ? 'inline' : 'none']]" style="margin-left: 15px">events: </span>
|
|
129
|
+
<input css:display="[[this.twoWay ? 'inline-block' : 'none']]" title="to use multiple events, seprate them with semicolon (;)" class="row" value="{{?this.events::change}}" style="flex-grow: 1;">
|
|
130
|
+
</div>
|
|
131
|
+
<div id="groupinvert" class="row" style="position: relative">
|
|
132
|
+
<input type="checkbox" checked="{{this.invert::change}}">
|
|
133
|
+
<span>invert logic</span>
|
|
134
|
+
<button css:border="[[this.historic ? 'solid lime 5px' : 'none']]" style="position: absolute; right: 1px; top: 5px; padding: 10px;" @click="showHistoric">historic</button>
|
|
135
|
+
</div>
|
|
136
|
+
<div class="row">
|
|
137
|
+
<span style="cursor: pointer;" title="javascript expression. access context with __ctx, result with __res, objects with __0, __1, ...">formula</span>
|
|
138
|
+
</div>
|
|
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"></node-projects-code-view-monaco>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="row">
|
|
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>
|
|
144
|
+
<input style="width: 100%; margin-left: 5px;" .disabled="[[!this.expression]]" value="{{?this.writeBackSignal::change}}">
|
|
145
|
+
</div>
|
|
146
|
+
<div class="row">
|
|
147
|
+
<span style="cursor: pointer;" title="javascript expression. access property with 'value'">formula write back (two way)</span>
|
|
148
|
+
</div>
|
|
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}}"></node-projects-code-view-monaco>
|
|
151
|
+
</div>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
<div class="vertical-grid" style="margin-top: 10px;">
|
|
156
|
+
<div>
|
|
157
|
+
<div class="input-headline" style="display: flex;align-items: center;">
|
|
158
|
+
<span>converter</span>:<input id="namedConverterInput" style="width: 100%; margin-left: 15px;" value="{{?this.convertersString::change}}">
|
|
159
|
+
</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div class="vertical-grid" style="border: solid 1px black; padding: 10px; overflow-y: auto;">
|
|
163
|
+
<div class="bottomleft">
|
|
164
|
+
<div id="converterGrid" style="height: 100%;">
|
|
165
|
+
<div style="width: 100%; height: 20px; display: flex;">
|
|
166
|
+
<div style="width: 39%">condition</div>
|
|
167
|
+
<div style="width: 59%">value</div>
|
|
168
|
+
</div>
|
|
169
|
+
<template repeat:item="[[this.converters]]">
|
|
170
|
+
<div css:background-color="[[item.activeRow ? 'gray' : '']]" style="width: 100%; display: flex; height: 26px; justify-content: center; align-items: center; gap: 5px;">
|
|
171
|
+
<input type="text" value="{{item.key}}" @focus="[[this._focusRow(index)]]" style="width: 39%">
|
|
172
|
+
<input type="[[this._property.type == 'color' ? 'color' : 'text']]" value="{{item.value}}" @focus="[[this._focusRow(index)]]" style="width: 59%">
|
|
173
|
+
</div>
|
|
174
|
+
</template>
|
|
175
|
+
</div>
|
|
176
|
+
</div>
|
|
177
|
+
<div class="controlbox" id="grid-controls">
|
|
178
|
+
<button type="button" id="add-row-button" value="add" @click="addConverter">
|
|
179
|
+
<span>add</span>
|
|
180
|
+
</button>
|
|
181
|
+
<button id="remove-row-button" value="remove" style="margin-top: 6px;" @click="removeConverter">
|
|
182
|
+
<span>remove</span>
|
|
183
|
+
</button>
|
|
184
|
+
</div>
|
|
185
|
+
</div>
|
|
186
|
+
</div>`;static style=ke`
|
|
187
|
+
:host {
|
|
188
|
+
box-sizing: border-box;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
#converterGrid {
|
|
192
|
+
display: flex;
|
|
193
|
+
gap: 2px;
|
|
194
|
+
flex-direction: column;
|
|
195
|
+
}
|
|
196
|
+
#converterGrid input {
|
|
197
|
+
height: 20px;
|
|
198
|
+
box-sizing: border-box;
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
.padding_top {
|
|
202
|
+
padding-top: 30px;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
.row{
|
|
206
|
+
margin-top: 3px;
|
|
207
|
+
display: flex;
|
|
208
|
+
align-items: center;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
.controlbox {
|
|
212
|
+
display: flex;
|
|
213
|
+
flex-direction: column;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.input-headline {
|
|
217
|
+
height: 30px;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
input[type="checkbox"] {
|
|
221
|
+
margin-right: 15px;
|
|
222
|
+
width: 15px;
|
|
223
|
+
height: 15px;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
select {
|
|
227
|
+
width: 100%;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
#root {
|
|
231
|
+
padding: 2px 10px;
|
|
232
|
+
display: grid;
|
|
233
|
+
grid-template-rows: min-content min-content;
|
|
234
|
+
overflow: auto;
|
|
235
|
+
height: calc(100% - 4px)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
.vertical-grid {
|
|
239
|
+
display: grid;
|
|
240
|
+
grid-template-columns: calc((100% - 150px) - 30px) 150px;
|
|
241
|
+
gap: 30px;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
#grid input, #list input {
|
|
245
|
+
border:0px;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
#tagdata_type {
|
|
249
|
+
height: 24px;
|
|
250
|
+
font-size: inherit;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
node-projects-code-view-monaco:not([readonly]) {
|
|
254
|
+
border: 1px black solid;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
node-projects-code-view-monaco[readonly] {
|
|
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(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
|
+
var context: { event: Event, element: Element };
|
|
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
|
+
:host {
|
|
265
|
+
background: white;
|
|
266
|
+
}
|
|
267
|
+
.list{
|
|
268
|
+
display: grid;
|
|
269
|
+
grid-template-columns: 1fr 40px;
|
|
270
|
+
width: calc(100% - 6px);
|
|
271
|
+
box-sizing: border-box;
|
|
272
|
+
margin: 3px;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.list button{
|
|
276
|
+
padding: 5px 10px;
|
|
277
|
+
box-sizing: border-box;
|
|
278
|
+
display: flex;
|
|
279
|
+
justify-content: center;
|
|
280
|
+
margin-right: 5px;
|
|
281
|
+
margin-left: 5px;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
node-projects-visualization-property-grid {
|
|
285
|
+
width: 100%;
|
|
286
|
+
height: 100%;
|
|
287
|
+
}
|
|
288
|
+
`;static template=Ne`
|
|
289
|
+
<div style="width:100%; height:100%; overflow: hidden;">
|
|
290
|
+
<node-projects-split-view style="height: 100%; width: 100%; position: relative;" orientation="horizontal">
|
|
291
|
+
<div style="width: 40%; position: relative;">
|
|
292
|
+
<div style="width:calc(100% - 4px); height:calc(100% - 4px)">
|
|
293
|
+
<div id="commandList" style="overflow-x: hidden; overflow-y: auto; width:100%; height: calc(100% - 34px);"></div>
|
|
294
|
+
<div class="list">
|
|
295
|
+
<select id="possibleCommands" style="width: 100%"></select>
|
|
296
|
+
<button @click="[[this.addItem()]]">Add</button>
|
|
297
|
+
</div>
|
|
298
|
+
</div>
|
|
299
|
+
</div>
|
|
300
|
+
<div style="width: 60%; position: relative;">
|
|
301
|
+
<node-projects-visualization-property-grid id="propertygrid"></node-projects-visualization-property-grid>
|
|
302
|
+
</div>
|
|
303
|
+
</node-projects-split-view>
|
|
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,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
|
+
:host {
|
|
307
|
+
display: grid;
|
|
308
|
+
grid-template-columns: 80px 80px 80px auto;
|
|
309
|
+
overflow-y: auto;
|
|
310
|
+
align-content: start;
|
|
311
|
+
height: 100%;
|
|
312
|
+
padding: 10px;
|
|
313
|
+
gap: 5px;
|
|
314
|
+
box-sizing: border-box;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
span {
|
|
318
|
+
font-size: 10px;
|
|
319
|
+
}`;static template=Ae`
|
|
320
|
+
<span></span>
|
|
321
|
+
<span>name</span>
|
|
322
|
+
<span>type</span>
|
|
323
|
+
<span>value</span>
|
|
324
|
+
<template repeat:item="[[this._parameterArray]]">
|
|
325
|
+
<button @click="[[this._remove(index)]]" style="width: 40px; height: 20px; align-self: center;">del</button>
|
|
326
|
+
<input type="text" value="{{?item.key}}">
|
|
327
|
+
<select value="{{item.type}}" @change="[[this._bindingsRefresh()]]">
|
|
328
|
+
<option>null</string>
|
|
329
|
+
<option>string</string>
|
|
330
|
+
<option>number</string>
|
|
331
|
+
<option>boolean</string>
|
|
332
|
+
</select>
|
|
333
|
+
<input hidden="[[item.type !== 'string']]" type="text" value="{{?item.value}}">
|
|
334
|
+
<input hidden="[[item.type !== 'number']]" type="number" value="{{item.value}}">
|
|
335
|
+
<input hidden="[[item.type !== 'boolean']]" type="checkbox" checked="{{item.value}}">
|
|
336
|
+
<div hidden="[[item.type !== 'null']]">-null-</div>
|
|
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(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
|
+
:host {
|
|
340
|
+
display: grid;
|
|
341
|
+
grid-template-columns: 20px 1fr auto;
|
|
342
|
+
overflow-y: auto;
|
|
343
|
+
align-content: start;
|
|
344
|
+
height: 100%;
|
|
345
|
+
}
|
|
346
|
+
.rect {
|
|
347
|
+
width: 7px;
|
|
348
|
+
height: 7px;
|
|
349
|
+
border: 1px solid black;
|
|
350
|
+
justify-self: center;
|
|
351
|
+
cursor: pointer;
|
|
352
|
+
align-self: center;
|
|
353
|
+
white-space: nowrap;
|
|
354
|
+
}
|
|
355
|
+
input.mth {
|
|
356
|
+
width: 100%;
|
|
357
|
+
box-sizing: border-box;
|
|
358
|
+
}
|
|
359
|
+
input::placeholder {
|
|
360
|
+
font-size: 8px;
|
|
361
|
+
}
|
|
362
|
+
a {
|
|
363
|
+
cursor: pointer;
|
|
364
|
+
white-space: nowrap;
|
|
365
|
+
}
|
|
366
|
+
a:hover {
|
|
367
|
+
cursor: pointer;
|
|
368
|
+
text-decoration: underline;
|
|
369
|
+
}
|
|
370
|
+
button {
|
|
371
|
+
cursor: pointer;
|
|
372
|
+
}`;static template=Y`
|
|
373
|
+
<template repeat:item="[[this.events]]">
|
|
374
|
+
<div @click="[[this._ctxMenu(event, item)]]" @contextmenu="[[this._ctxMenu(event, item)]]" class="rect" title="[[this._getScriptType(item)]]" css:background-color="[[this._getScriptTypeColor(item)]]"></div>
|
|
375
|
+
<a @click="[[this._showContextMenuAssignScript(event, item, false)]]" @contextmenu="[[this._ctxMenu(event, item)]]" title="[[item.name]]">[[item.name]]</a>
|
|
376
|
+
<div>[[this._createControlsForScript(item)]]</div>
|
|
377
|
+
</template>
|
|
378
|
+
<span style="grid-column: 1 / span 3; margin-top: 8px; margin-left: 3px;">add event:</span>
|
|
379
|
+
<input id="addEventInput" style="grid-column: 1 / span 3; margin: 5px;" @keypress="[[this._addEvent(event)]]" type="text">`;static editRowTemplate=Y`
|
|
380
|
+
<div style="display: flex; justify-content: flex-end;">
|
|
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
|
+
<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
|
+
<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(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},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,t=await this.getValue(command.buttons,context);if(t=="ok"){let e=await this.getValue(command.message,context);alert(e),r=1}else if(t=="yesNo"){let e=await this.getValue(command.message,context);confirm(e)?r=1:r=2}let s=await this.getValue(command.resultSignal,context);s&&this._visualizationHandler.setState(s,r);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
|
+
//!varname => inverted
|
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.135",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"author": "jochen.kuehner@gmx.de",
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
"tsc": "tsc",
|
|
11
11
|
"build": "tsc",
|
|
12
12
|
"link": "npm link",
|
|
13
|
-
"prepublishOnly": "npm run build"
|
|
13
|
+
"prepublishOnly": "npm run build && npm run bundle",
|
|
14
|
+
"bundle": "esbuild ./dist/index.js --format=esm --minify --external:@adobe/* --external:@blockly/* --external:blockly --external:long --external:wunderbaum --external:@node-projects/* --platform=neutral --bundle --outfile=./dist/index-min.js"
|
|
14
15
|
},
|
|
15
16
|
"dependencies": {
|
|
16
17
|
"@adobe/css-tools": ">=4.4.0",
|
|
@@ -23,6 +24,9 @@
|
|
|
23
24
|
"@node-projects/web-component-designer-widgets-wunderbaum": ">=0.1.29",
|
|
24
25
|
"blockly": ">=11.1.1",
|
|
25
26
|
"long": ">=5.2.3"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"esbuild": "^0.25.10"
|
|
26
30
|
},
|
|
27
31
|
"repository": {
|
|
28
32
|
"type": "git",
|