@record-evolution/widget-scada 1.0.6 → 1.0.7

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.
@@ -35,10 +35,10 @@ const At = (n) => new pt(typeof n == "string" ? n : n + "", void 0, X), _t = (n,
35
35
  for (const s of t.cssRules) e += s.cssText;
36
36
  return At(e);
37
37
  })(n) : n;
38
- const { is: wt, defineProperty: Et, getOwnPropertyDescriptor: Ct, getOwnPropertyNames: Tt, getOwnPropertySymbols: xt, getPrototypeOf: Pt } = Object, I = globalThis, it = I.trustedTypes, kt = it ? it.emptyScript : "", Ot = I.reactiveElementPolyfillSupport, P = (n, t) => n, H = { toAttribute(n, t) {
38
+ const { is: wt, defineProperty: Et, getOwnPropertyDescriptor: Ct, getOwnPropertyNames: Tt, getOwnPropertySymbols: xt, getPrototypeOf: kt } = Object, j = globalThis, it = j.trustedTypes, Pt = it ? it.emptyScript : "", Ot = j.reactiveElementPolyfillSupport, k = (n, t) => n, H = { toAttribute(n, t) {
39
39
  switch (t) {
40
40
  case Boolean:
41
- n = n ? kt : null;
41
+ n = n ? Pt : null;
42
42
  break;
43
43
  case Object:
44
44
  case Array:
@@ -64,7 +64,7 @@ const { is: wt, defineProperty: Et, getOwnPropertyDescriptor: Ct, getOwnProperty
64
64
  }
65
65
  return e;
66
66
  } }, J = (n, t) => !wt(n, t), rt = { attribute: !0, type: String, converter: H, reflect: !1, useDefault: !1, hasChanged: J };
67
- Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), I.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
67
+ Symbol.metadata ??= /* @__PURE__ */ Symbol("metadata"), j.litPropertyMetadata ??= /* @__PURE__ */ new WeakMap();
68
68
  let C = class extends HTMLElement {
69
69
  static addInitializer(t) {
70
70
  this._$Ei(), (this.l ??= []).push(t);
@@ -93,13 +93,13 @@ let C = class extends HTMLElement {
93
93
  return this.elementProperties.get(t) ?? rt;
94
94
  }
95
95
  static _$Ei() {
96
- if (this.hasOwnProperty(P("elementProperties"))) return;
97
- const t = Pt(this);
96
+ if (this.hasOwnProperty(k("elementProperties"))) return;
97
+ const t = kt(this);
98
98
  t.finalize(), t.l !== void 0 && (this.l = [...t.l]), this.elementProperties = new Map(t.elementProperties);
99
99
  }
100
100
  static finalize() {
101
- if (this.hasOwnProperty(P("finalized"))) return;
102
- if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(P("properties"))) {
101
+ if (this.hasOwnProperty(k("finalized"))) return;
102
+ if (this.finalized = !0, this._$Ei(), this.hasOwnProperty(k("properties"))) {
103
103
  const e = this.properties, s = [...Tt(e), ...xt(e)];
104
104
  for (const i of s) this.createProperty(i, e[i]);
105
105
  }
@@ -246,8 +246,8 @@ let C = class extends HTMLElement {
246
246
  firstUpdated(t) {
247
247
  }
248
248
  };
249
- C.elementStyles = [], C.shadowRootOptions = { mode: "open" }, C[P("elementProperties")] = /* @__PURE__ */ new Map(), C[P("finalized")] = /* @__PURE__ */ new Map(), Ot?.({ ReactiveElement: C }), (I.reactiveElementVersions ??= []).push("2.1.2");
250
- const Z = globalThis, nt = (n) => n, j = Z.trustedTypes, ot = j ? j.createPolicy("lit-html", { createHTML: (n) => n }) : void 0, mt = "$lit$", b = `lit$${Math.random().toFixed(9).slice(2)}$`, gt = "?" + b, Nt = `<${gt}>`, w = document, O = () => w.createComment(""), N = (n) => n === null || typeof n != "object" && typeof n != "function", K = Array.isArray, Mt = (n) => K(n) || typeof n?.[Symbol.iterator] == "function", z = `[
249
+ C.elementStyles = [], C.shadowRootOptions = { mode: "open" }, C[k("elementProperties")] = /* @__PURE__ */ new Map(), C[k("finalized")] = /* @__PURE__ */ new Map(), Ot?.({ ReactiveElement: C }), (j.reactiveElementVersions ??= []).push("2.1.2");
250
+ const Z = globalThis, nt = (n) => n, D = Z.trustedTypes, ot = D ? D.createPolicy("lit-html", { createHTML: (n) => n }) : void 0, mt = "$lit$", b = `lit$${Math.random().toFixed(9).slice(2)}$`, gt = "?" + b, Nt = `<${gt}>`, w = document, O = () => w.createComment(""), N = (n) => n === null || typeof n != "object" && typeof n != "function", K = Array.isArray, Mt = (n) => K(n) || typeof n?.[Symbol.iterator] == "function", z = `[
251
251
  \f\r]`, x = /<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g, at = /-->/g, ht = />/g, A = RegExp(`>|${z}(?:([^\\s"'>=/]+)(${z}*=${z}*(?:[^
252
252
  \f\r"'\`<>=]|("|')|))|$)`, "g"), lt = /'/g, ct = /"/g, yt = /^(?:script|style|textarea|title)$/i, Lt = (n) => (t, ...e) => ({ _$litType$: n, strings: t, values: e }), W = Lt(1), E = /* @__PURE__ */ Symbol.for("lit-noChange"), d = /* @__PURE__ */ Symbol.for("lit-nothing"), ut = /* @__PURE__ */ new WeakMap(), S = w.createTreeWalker(w, 129);
253
253
  function $t(n, t) {
@@ -280,12 +280,12 @@ class M {
280
280
  if (i.nodeType === 1) {
281
281
  if (i.hasAttributes()) for (const l of i.getAttributeNames()) if (l.endsWith(mt)) {
282
282
  const p = c[o++], m = i.getAttribute(l).split(b), $ = /([.?@])?(.*)/.exec(p);
283
- a.push({ type: 1, index: r, name: $[2], strings: m, ctor: $[1] === "." ? Ht : $[1] === "?" ? jt : $[1] === "@" ? Dt : F }), i.removeAttribute(l);
283
+ a.push({ type: 1, index: r, name: $[2], strings: m, ctor: $[1] === "." ? Ht : $[1] === "?" ? Dt : $[1] === "@" ? It : F }), i.removeAttribute(l);
284
284
  } else l.startsWith(b) && (a.push({ type: 6, index: r }), i.removeAttribute(l));
285
285
  if (yt.test(i.tagName)) {
286
286
  const l = i.textContent.split(b), p = l.length - 1;
287
287
  if (p > 0) {
288
- i.textContent = j ? j.emptyScript : "";
288
+ i.textContent = D ? D.emptyScript : "";
289
289
  for (let m = 0; m < p; m++) i.append(l[m], O()), S.nextNode(), a.push({ type: 2, index: ++r });
290
290
  i.append(l[p], O());
291
291
  }
@@ -326,7 +326,7 @@ class Rt {
326
326
  for (; a !== void 0; ) {
327
327
  if (o === a.index) {
328
328
  let u;
329
- a.type === 2 ? u = new L(r, r.nextSibling, this, t) : a.type === 1 ? u = new a.ctor(r, a.name, a.strings, this, t) : a.type === 6 && (u = new It(r, this, t)), this._$AV.push(u), a = s[++h];
329
+ a.type === 2 ? u = new L(r, r.nextSibling, this, t) : a.type === 1 ? u = new a.ctor(r, a.name, a.strings, this, t) : a.type === 6 && (u = new jt(r, this, t)), this._$AV.push(u), a = s[++h];
330
330
  }
331
331
  o !== a?.index && (r = S.nextNode(), o++);
332
332
  }
@@ -429,7 +429,7 @@ class Ht extends F {
429
429
  this.element[this.name] = t === d ? void 0 : t;
430
430
  }
431
431
  }
432
- class jt extends F {
432
+ class Dt extends F {
433
433
  constructor() {
434
434
  super(...arguments), this.type = 4;
435
435
  }
@@ -437,7 +437,7 @@ class jt extends F {
437
437
  this.element.toggleAttribute(this.name, !!t && t !== d);
438
438
  }
439
439
  }
440
- class Dt extends F {
440
+ class It extends F {
441
441
  constructor(t, e, s, i, r) {
442
442
  super(t, e, s, i, r), this.type = 5;
443
443
  }
@@ -450,7 +450,7 @@ class Dt extends F {
450
450
  typeof this._$AH == "function" ? this._$AH.call(this.options?.host ?? this.element, t) : this._$AH.handleEvent(t);
451
451
  }
452
452
  }
453
- class It {
453
+ class jt {
454
454
  constructor(t, e, s) {
455
455
  this.element = t, this.type = 6, this._$AN = void 0, this._$AM = e, this.options = s;
456
456
  }
@@ -473,7 +473,7 @@ const Bt = (n, t, e) => {
473
473
  return i._$AI(n), i;
474
474
  };
475
475
  const Q = globalThis;
476
- let k = class extends C {
476
+ let P = class extends C {
477
477
  constructor() {
478
478
  super(...arguments), this.renderOptions = { host: this }, this._$Do = void 0;
479
479
  }
@@ -495,9 +495,9 @@ let k = class extends C {
495
495
  return E;
496
496
  }
497
497
  };
498
- k._$litElement$ = !0, k.finalized = !0, Q.litElementHydrateSupport?.({ LitElement: k });
498
+ P._$litElement$ = !0, P.finalized = !0, Q.litElementHydrateSupport?.({ LitElement: P });
499
499
  const zt = Q.litElementPolyfillSupport;
500
- zt?.({ LitElement: k });
500
+ zt?.({ LitElement: P });
501
501
  (Q.litElementVersions ??= []).push("4.2.2");
502
502
  const Wt = (n) => (t, e) => {
503
503
  e !== void 0 ? e.addInitializer(() => {
@@ -860,7 +860,7 @@ class f {
860
860
  return this.el;
861
861
  }
862
862
  }
863
- class D {
863
+ class I {
864
864
  constructor(t) {
865
865
  typeof t == "string" ? (this.settings = { type: "constant", color: t }, this.color = t) : (this.settings = t, this.color = t.color ?? "#000000");
866
866
  }
@@ -1025,7 +1025,7 @@ function ae(n) {
1025
1025
  i.style.fontSize = e.size + (e.sizeUnit || "px"), i.style.fontFamily = o ? r : r + ", sans-serif", i.style.fontWeight = e.weight || "400", i.style.fontStyle = e.style || "normal";
1026
1026
  }
1027
1027
  if (s) {
1028
- const r = s instanceof D ? s.color : String(s);
1028
+ const r = s instanceof I ? s.color : String(s);
1029
1029
  i.setAttribute("fill", r);
1030
1030
  }
1031
1031
  },
@@ -1064,7 +1064,7 @@ function ae(n) {
1064
1064
  icon(t, e, s, i, r) {
1065
1065
  const o = t instanceof f ? t.native : t;
1066
1066
  te();
1067
- const h = s ?? 14, a = i instanceof D ? i.color : typeof i == "string" ? i : "#000000";
1067
+ const h = s ?? 14, a = i instanceof I ? i.color : typeof i == "string" ? i : "#000000";
1068
1068
  let u = o.querySelector("text.__scada-icon");
1069
1069
  u || (o.textContent = "", u = document.createElementNS("http://www.w3.org/2000/svg", "text"), u.classList.add("__scada-icon"), u.setAttribute("dominant-baseline", "central"), u.setAttribute("text-anchor", "middle"), o.appendChild(u)), u.setAttribute("font-family", "Material Symbols Outlined"), u.setAttribute("font-size", String(h)), u.setAttribute("fill", a), u.textContent = e;
1070
1070
  },
@@ -1086,11 +1086,11 @@ function ae(n) {
1086
1086
  function he(n, t, e, s, i) {
1087
1087
  const r = {};
1088
1088
  for (const [c, l] of Object.entries(s))
1089
- l && typeof l == "object" && l.type && (l.type === "constant" || l.type === "gradient" || l.type === "range" || l.type === "function") && "color" in l ? r[c] = new D(l) : r[c] = l;
1089
+ l && typeof l == "object" && l.type && (l.type === "constant" || l.type === "gradient" || l.type === "range" || l.type === "function") && "color" in l ? r[c] = new I(l) : r[c] = l;
1090
1090
  for (const c of t.properties)
1091
1091
  if (r[c.id] === void 0 && c.default !== void 0) {
1092
1092
  const l = c.default;
1093
- c.type === "color_settings" && l && typeof l == "object" ? r[c.id] = new D(l) : r[c.id] = l;
1093
+ c.type === "color_settings" && l && typeof l == "object" ? r[c.id] = new I(l) : r[c.id] = l;
1094
1094
  }
1095
1095
  for (const c of t.behavior)
1096
1096
  c.type === "value" && e[c.id] === void 0 && (c.valueType === "BOOLEAN" ? e[c.id] = !1 : (c.valueType === "DOUBLE" || c.valueType === "INTEGER") && (e[c.id] = 0));
@@ -1176,9 +1176,9 @@ var de = Object.defineProperty, pe = Object.getOwnPropertyDescriptor, v = (n, t,
1176
1176
  (o = n[r]) && (i = (s ? o(t, e, i) : o(i)) || i);
1177
1177
  return s && i && de(t, e, i), i;
1178
1178
  };
1179
- let y = class extends k {
1179
+ let y = class extends P {
1180
1180
  constructor() {
1181
- super(), this.svgContent = "", this.version = "1.0.6", this.svgModules = /* @__PURE__ */ new Map(), this.actionCleanups = [], this.resizeObserver = new ResizeObserver(() => this.requestUpdate()), this.resizeObserver.observe(this);
1181
+ super(), this.svgContent = "", this.version = "1.0.7", this.svgModules = /* @__PURE__ */ new Map(), this.actionCleanups = [], this.resizeObserver = new ResizeObserver(() => this.requestUpdate()), this.resizeObserver.observe(this);
1182
1182
  }
1183
1183
  disconnectedCallback() {
1184
1184
  super.disconnectedCallback(), this.resizeObserver?.disconnect(), this.cleanupActions();
@@ -1239,7 +1239,7 @@ let y = class extends k {
1239
1239
  o = JSON.parse(r[1]);
1240
1240
  } catch {
1241
1241
  }
1242
- const h = i.replace(/<tb:metadata[\s\S]*?<\/tb:metadata>/, "");
1242
+ const h = i.replace(/<tb:metadata[\s\S]*?<\/tb:metadata>/, "").replace(/<svg\b([^>]*)>/i, (a, u) => `<svg${u.replace(/\s+preserveAspectRatio="[^"]*"/i, "")} preserveAspectRatio="none">`);
1243
1243
  this.svgModules.set(n, { svg: h, metadata: o }), this.svgContent = h, this.metadata = o, await this.updateComplete, this.applyState();
1244
1244
  } catch {
1245
1245
  this.svgContent = "", this.metadata = void 0;
@@ -1312,14 +1312,12 @@ y.styles = _t`
1312
1312
  width: 100%;
1313
1313
  height: 100%;
1314
1314
  display: flex;
1315
- justify-content: center;
1316
1315
  }
1317
1316
 
1318
1317
  .svg-container svg {
1319
- max-width: 100%;
1320
- max-height: 100%;
1321
- width: auto;
1322
- height: auto;
1318
+ width: 100%;
1319
+ height: 100%;
1320
+ display: block;
1323
1321
  }
1324
1322
 
1325
1323
  .no-symbol {
@@ -1356,7 +1354,7 @@ v([
1356
1354
  Yt(".svg-container")
1357
1355
  ], y.prototype, "svgContainer", 2);
1358
1356
  y = v([
1359
- Wt("widget-scada-1.0.6")
1357
+ Wt("widget-scada-1.0.7")
1360
1358
  ], y);
1361
1359
  export {
1362
1360
  y as WidgetScada
@@ -1 +1 @@
1
- {"version":3,"file":"widget-scada.js","sources":["../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/directives/unsafe-html.js","../node_modules/lit-html/directives/unsafe-svg.js","../src/scada-runtime.ts","../src/widget-scada.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import{directive as s}from\"../directive.js\";import{UnsafeHTMLDirective as e}from\"./unsafe-html.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class t extends e{}t.directiveName=\"unsafeSVG\",t.resultType=2;const o=s(t);export{o as unsafeSVG};\n//# sourceMappingURL=unsafe-svg.js.map\n","/**\n * SCADA Runtime Engine\n *\n * Implements a ThingsBoard-compatible SVG runtime that executes\n * stateRenderFunction / actionFunction JS strings from SCADA SVG metadata.\n *\n * Provides: ScadaElement (SVG.js-like wrapper), ctx API (animations,\n * text/value formatting, color processors, actions), and the execution engine.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SymbolMetadata {\n title: string\n description: string\n stateRenderFunction?: string | null\n tags: TagDef[]\n behavior: BehaviorDef[]\n properties: PropertyDef[]\n}\n\nexport interface TagDef {\n tag: string\n stateRenderFunction: string | null\n actions: Record<string, { actionFunction: string }> | null\n}\n\nexport interface BehaviorDef {\n id: string\n name: string\n type: 'value' | 'action' | 'widgetAction'\n valueType: string\n}\n\nexport interface PropertyDef {\n id: string\n name: string\n type: string\n default: any\n disableOnProperty?: string\n}\n\nexport interface FontDef {\n size: number\n sizeUnit: string\n family: string\n weight: string\n style: string\n}\n\nexport interface ColorSettings {\n type: 'constant' | 'gradient' | 'range' | 'function'\n color: string\n gradient?: {\n advancedMode: boolean\n gradient: string[]\n minValue: number\n maxValue: number\n }\n rangeList?: {\n advancedMode: boolean\n range: Array<{ from: number; to: number; color: string }>\n }\n}\n\n// ---------------------------------------------------------------------------\n// Per-element state storage (WeakMap so GC can reclaim)\n// ---------------------------------------------------------------------------\n\nconst elementMemory = new WeakMap<Element, Map<string, any>>()\n\nfunction getMemory(el: Element): Map<string, any> {\n let m = elementMemory.get(el)\n if (!m) {\n m = new Map()\n elementMemory.set(el, m)\n }\n return m\n}\n\n// ---------------------------------------------------------------------------\n// Animation tracking\n// ---------------------------------------------------------------------------\n\nconst elementAnimations = new WeakMap<Element, AnimationRunner>()\nconst connectorAnimations = new WeakMap<Element, ConnectorAnimationRunner>()\n\n/**\n * Connector flow animation — animates dashes along an SVG path to simulate\n * fluid flow in pipe/connector symbols.\n */\nclass ConnectorAnimationRunner {\n private container: Element\n private forwardPath: string\n private reversedPath: string\n private pathEl: SVGPathElement | null = null\n private lineWidth: number = 2\n private lineColor: string = '#fff'\n private dashCap: string = 'round'\n private dashWidth: number = 10\n private dashGap: number = 10\n private dur: number = 1 // seconds\n private dir: string = 'forward'\n private rafId: number = 0\n private rafActive: boolean = false\n private rafLastTime: number = 0\n private offset: number = 0\n\n constructor(container: Element, forwardPath: string, reversedPath: string) {\n this.container = container\n this.forwardPath = forwardPath\n this.reversedPath = reversedPath\n }\n\n flowAppearance(\n lineWidth: number,\n lineColor: string,\n dashCap: string,\n dashWidth: number,\n dashGap: number\n ): ConnectorAnimationRunner {\n this.lineWidth = lineWidth ?? 2\n this.lineColor = lineColor ?? '#fff'\n this.dashCap = dashCap ?? 'round'\n this.dashWidth = dashWidth ?? 10\n this.dashGap = dashGap ?? 10\n this.updatePathStyle()\n return this\n }\n\n duration(d: number): ConnectorAnimationRunner {\n this.dur = typeof d === 'number' && isFinite(d) && d > 0 ? d : 1\n return this\n }\n\n direction(dir: string): ConnectorAnimationRunner {\n this.dir = dir\n this.updatePathD()\n return this\n }\n\n play(): ConnectorAnimationRunner {\n this.ensurePath()\n if (!this.rafActive) {\n this.rafActive = true\n this.rafLastTime = 0\n this.rafId = requestAnimationFrame(this.tick)\n }\n return this\n }\n\n finish(): void {\n this.cancelRaf()\n if (this.pathEl && this.pathEl.parentNode) {\n this.pathEl.parentNode.removeChild(this.pathEl)\n }\n this.pathEl = null\n connectorAnimations.delete(this.container)\n }\n\n private tick = (now: number): void => {\n if (!this.rafActive) return\n if (!this.rafLastTime) this.rafLastTime = now\n const dt = (now - this.rafLastTime) / 1000\n this.rafLastTime = now\n\n const cycleLength = this.dashWidth + this.dashGap\n // Speed: traverse one dash+gap cycle per `this.dur` seconds\n this.offset += (cycleLength / this.dur) * dt\n if (this.offset > cycleLength) this.offset -= cycleLength\n\n if (this.pathEl) {\n this.pathEl.style.strokeDashoffset = String(-this.offset)\n }\n this.rafId = requestAnimationFrame(this.tick)\n }\n\n private ensurePath(): void {\n if (this.pathEl) return\n const ns = 'http://www.w3.org/2000/svg'\n this.pathEl = document.createElementNS(ns, 'path')\n this.updatePathD()\n this.updatePathStyle()\n this.container.appendChild(this.pathEl)\n }\n\n private updatePathD(): void {\n if (!this.pathEl) return\n const d = this.dir === 'reverse' ? this.reversedPath : this.forwardPath\n this.pathEl.setAttribute('d', d)\n }\n\n private updatePathStyle(): void {\n if (!this.pathEl) return\n this.pathEl.setAttribute('fill', 'none')\n this.pathEl.setAttribute('stroke', this.lineColor)\n this.pathEl.setAttribute('stroke-width', String(this.lineWidth))\n this.pathEl.setAttribute('stroke-linecap', this.dashCap)\n this.pathEl.style.strokeDasharray = `${this.dashWidth} ${this.dashGap}`\n }\n\n private cancelRaf(): void {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = 0\n }\n this.rafActive = false\n }\n}\n\n// ---------------------------------------------------------------------------\n// Material Symbols font loader (injected once into document)\n// ---------------------------------------------------------------------------\nlet materialFontLoaded = false\nfunction ensureMaterialSymbolsFont(): void {\n if (materialFontLoaded) return\n materialFontLoaded = true\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200'\n document.head.appendChild(link)\n}\n\nclass AnimationRunner {\n private el: Element\n private duration: number\n private anim: Animation | null = null\n private keyframes: Keyframe[] = []\n private loopCount: number = 1\n private loopBounce: boolean = false\n private playbackSpeed: number = 1\n private easingType: string = 'ease'\n\n // rAF-based animation for SVG transforms (pattern flow & rotation)\n private rafId: number = 0\n private rafActive: boolean = false\n private rafPaused: boolean = false\n private rafLastTime: number = 0\n private rafElapsed: number = 0\n private rafTick: ((now: number) => void) | null = null\n private rafPatternEl: Element | null = null\n private rafOriginalTransform: string = ''\n\n constructor(el: Element, duration: number) {\n this.el = el\n this.duration = duration\n }\n\n /** Animate element by a relative offset (dx, dy). Used by pipe flow animations. */\n relative(dx: number, dy: number): AnimationRunner {\n const safeDx = typeof dx === 'number' && isFinite(dx) ? dx : 0\n const safeDy = typeof dy === 'number' && isFinite(dy) ? dy : 0\n\n // For elements inside SVG <pattern>, CSS transforms shift the entire\n // tile (including pipe borders). Use patternTransform via rAF instead.\n const parent = this.el.parentElement\n if (parent?.nodeName?.toLowerCase() === 'pattern') {\n this.cancelRaf()\n this.rafPatternEl = parent\n this.rafOriginalTransform = parent.getAttribute('patternTransform') || ''\n this.rafActive = true\n this.rafPaused = false\n this.rafElapsed = 0\n this.rafLastTime = 0\n\n const baseTransform = this.rafOriginalTransform ? `${this.rafOriginalTransform} ` : ''\n this.rafTick = (now: number) => {\n if (!this.rafActive || this.rafPaused) return\n if (!this.rafLastTime) this.rafLastTime = now\n this.rafElapsed += (now - this.rafLastTime) * this.playbackSpeed\n this.rafLastTime = now\n\n const progress = (this.rafElapsed % this.duration) / this.duration\n this.rafPatternEl!.setAttribute(\n 'patternTransform',\n `${baseTransform}translate(${safeDx * progress}, ${safeDy * progress})`\n )\n this.rafId = requestAnimationFrame(this.rafTick!)\n }\n this.rafId = requestAnimationFrame(this.rafTick)\n } else {\n // Non-pattern element: use CSS keyframe animation\n this.keyframes = [\n { transform: 'translate(0, 0)' },\n { transform: `translate(${safeDx}px, ${safeDy}px)` }\n ]\n this.easingType = 'linear'\n this.commit()\n }\n return this\n }\n\n attr(attrs: Record<string, any>): AnimationRunner {\n // SVG geometric attributes (height, width, x, y, cx, cy, r, rx, ry)\n // cannot be animated via Web Animations API keyframes reliably.\n // Set them directly with a CSS transition for smooth animation.\n // CSS-animatable properties (opacity, fill, stroke, etc.) use keyframes.\n const SVG_GEOM = new Set(['height', 'width', 'x', 'y', 'cx', 'cy', 'r', 'rx', 'ry'])\n const startFrame: Keyframe = {}\n const endFrame: Keyframe = {}\n let hasKeyframes = false\n\n for (const [key, val] of Object.entries(attrs)) {\n const safeVal = typeof val === 'number' && !isFinite(val) ? 0 : val\n if (SVG_GEOM.has(key)) {\n ;(this.el as SVGElement).style.transition = `all ${this.duration}ms ease`\n this.el.setAttribute(key, String(safeVal))\n } else {\n const computed = getComputedStyle(this.el as HTMLElement)\n const current = computed.getPropertyValue(key) || this.el.getAttribute(key) || ''\n startFrame[key] = current\n endFrame[key] = safeVal\n hasKeyframes = true\n }\n }\n if (hasKeyframes) {\n this.keyframes = [startFrame, endFrame]\n this.easingType = 'linear'\n }\n return this\n }\n\n transform(t: Record<string, any>): AnimationRunner {\n const parts: string[] = []\n const n = (v: any) => (typeof v === 'number' && !isFinite(v) ? 0 : (v ?? 0))\n if (t.translateX !== undefined || t.translateY !== undefined) {\n parts.push(`translate(${n(t.translateX)}, ${n(t.translateY)})`)\n }\n if (t.rotate !== undefined) {\n // Default unspecified origin axes to element bbox center (SVG.js compat)\n const bbox = (this.el as SVGGraphicsElement).getBBox?.()\n const ox = t.originX !== undefined ? n(t.originX) : bbox ? bbox.x + bbox.width / 2 : 0\n const oy = t.originY !== undefined ? n(t.originY) : bbox ? bbox.y + bbox.height / 2 : 0\n parts.push(`rotate(${n(t.rotate)}, ${ox}, ${oy})`)\n }\n if (t.scale !== undefined) {\n parts.push(`scale(${n(t.scale)})`)\n }\n if (parts.length > 0) {\n // For pattern elements, set patternTransform; otherwise set transform attribute\n const tagName = this.el.nodeName?.toLowerCase()\n if (tagName === 'pattern') {\n this.el.setAttribute('patternTransform', parts.join(' '))\n } else {\n this.el.setAttribute('transform', parts.join(' '))\n }\n }\n return this\n }\n\n rotate(deg: number): AnimationRunner {\n // Use rAF-based animation that composes rotation into the existing\n // SVG transform attribute. CSS animations would override the SVG\n // transform (e.g. translate) causing the element to shift position.\n const existingTransform = this.el.getAttribute('transform') || ''\n this.cancelRaf()\n this.rafOriginalTransform = existingTransform\n\n // Calculate rotation center from the element's bounding box\n const bbox = (this.el as SVGGraphicsElement).getBBox?.()\n const cx = bbox ? bbox.x + bbox.width / 2 : 0\n const cy = bbox ? bbox.y + bbox.height / 2 : 0\n\n this.rafActive = true\n this.rafPaused = false\n this.rafElapsed = 0\n this.rafLastTime = 0\n\n this.rafTick = (now: number) => {\n if (!this.rafActive || this.rafPaused) return\n if (!this.rafLastTime) this.rafLastTime = now\n this.rafElapsed += (now - this.rafLastTime) * this.playbackSpeed\n this.rafLastTime = now\n\n const progress = (this.rafElapsed % this.duration) / this.duration\n const currentDeg = deg * progress\n this.el.setAttribute('transform', `${existingTransform} rotate(${currentDeg}, ${cx}, ${cy})`)\n this.rafId = requestAnimationFrame(this.rafTick!)\n }\n this.rafId = requestAnimationFrame(this.rafTick)\n return this\n }\n\n ease(easing: string): AnimationRunner {\n this.easingType = easing\n return this\n }\n\n loop(count?: number, bounce?: boolean): AnimationRunner {\n this.loopCount = count === 0 ? Infinity : (count ?? Infinity)\n this.loopBounce = bounce ?? false\n // In rAF mode the animation already loops; only commit for CSS animations\n if (!this.rafActive) this.commit()\n return this\n }\n\n speed(s: number): AnimationRunner {\n this.playbackSpeed = s\n if (this.anim) this.anim.playbackRate = s\n // rAF mode reads playbackSpeed each frame automatically\n return this\n }\n\n play(): AnimationRunner {\n if (this.rafActive && this.rafPaused) {\n this.rafPaused = false\n this.rafLastTime = 0\n if (this.rafTick) this.rafId = requestAnimationFrame(this.rafTick)\n }\n if (this.anim) this.anim.play()\n return this\n }\n\n pause(): AnimationRunner {\n if (this.rafActive) {\n this.rafPaused = true\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = 0\n }\n }\n if (this.anim) this.anim.pause()\n return this\n }\n\n cancel(): void {\n if (this.anim) {\n this.anim.cancel()\n this.anim = null\n }\n this.cancelRaf()\n ;(this.el as SVGElement).style.transition = ''\n }\n\n finish(): void {\n if (this.anim) {\n this.anim.finish()\n this.anim = null\n }\n this.cancelRaf()\n }\n\n private cancelRaf() {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = 0\n }\n this.rafActive = false\n this.rafTick = null\n if (this.rafPatternEl) {\n if (this.rafOriginalTransform) {\n this.rafPatternEl.setAttribute('patternTransform', this.rafOriginalTransform)\n } else {\n this.rafPatternEl.removeAttribute('patternTransform')\n }\n this.rafPatternEl = null\n this.rafOriginalTransform = ''\n } else if (this.rafOriginalTransform) {\n // Restore original SVG transform for rotation animations\n this.el.setAttribute('transform', this.rafOriginalTransform)\n this.rafOriginalTransform = ''\n }\n }\n\n private commit() {\n if (this.keyframes.length === 0) return\n\n // Cancel previous animation if any\n if (this.anim) this.anim.cancel()\n\n try {\n this.anim = this.el.animate(this.keyframes, {\n duration: this.duration,\n iterations: this.loopCount,\n direction: this.loopBounce ? 'alternate' : 'normal',\n fill: 'forwards',\n easing: this.easingType\n })\n this.anim.playbackRate = this.playbackSpeed\n } catch {\n // Some SVG elements don't support Web Animations\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// ScadaElement — SVG.js-compatible wrapper for SVGElement\n// ---------------------------------------------------------------------------\n\nexport class ScadaElement {\n private el: Element\n\n constructor(el: Element) {\n this.el = el\n }\n\n /** Sanitize a value for SVG attributes: coerce NaN/Infinity to 0 */\n private safe(v: any): any {\n return typeof v === 'number' && !isFinite(v) ? 0 : v\n }\n\n /** Get or set attributes. With object: set multiple. With string: get one. */\n attr(attrsOrKey?: Record<string, any> | string, val?: any): any {\n if (typeof attrsOrKey === 'string') {\n if (val !== undefined) {\n this.el.setAttribute(attrsOrKey, String(this.safe(val)))\n return this\n }\n return this.el.getAttribute(attrsOrKey)\n }\n if (attrsOrKey) {\n for (const [k, v] of Object.entries(attrsOrKey)) {\n this.el.setAttribute(k, String(this.safe(v)))\n }\n }\n return this\n }\n\n fill(color: string): ScadaElement {\n this.el.setAttribute('fill', color)\n return this\n }\n\n stroke(opts: Record<string, any> | string): ScadaElement {\n if (typeof opts === 'string') {\n this.el.setAttribute('stroke', opts)\n } else {\n if (opts.color) this.el.setAttribute('stroke', opts.color)\n if (opts.width !== undefined) this.el.setAttribute('stroke-width', String(this.safe(opts.width)))\n if (opts.dasharray) this.el.setAttribute('stroke-dasharray', opts.dasharray)\n }\n return this\n }\n\n show(): ScadaElement {\n ;(this.el as SVGElement).style.display = ''\n ;(this.el as SVGElement).style.visibility = 'visible'\n return this\n }\n\n hide(): ScadaElement {\n ;(this.el as SVGElement).style.display = 'none'\n return this\n }\n\n transform(t: Record<string, any>): ScadaElement {\n const n = (v: any) => (typeof v === 'number' && !isFinite(v) ? 0 : (v ?? 0))\n const parts: string[] = []\n if (t.translateX !== undefined || t.translateY !== undefined) {\n parts.push(`translate(${n(t.translateX)}, ${n(t.translateY)})`)\n }\n if (t.rotate !== undefined) {\n // Default unspecified origin axes to element bbox center (SVG.js compat)\n const bbox = (this.el as SVGGraphicsElement).getBBox?.()\n const ox = t.originX !== undefined ? n(t.originX) : bbox ? bbox.x + bbox.width / 2 : 0\n const oy = t.originY !== undefined ? n(t.originY) : bbox ? bbox.y + bbox.height / 2 : 0\n parts.push(`rotate(${n(t.rotate)}, ${ox}, ${oy})`)\n }\n if (t.scale !== undefined) {\n parts.push(`scale(${n(t.scale)})`)\n }\n if (parts.length > 0) {\n const tagName = this.el.nodeName?.toLowerCase()\n if (tagName === 'pattern') {\n this.el.setAttribute('patternTransform', parts.join(' '))\n } else {\n this.el.setAttribute('transform', parts.join(' '))\n }\n }\n return this\n }\n\n /** Store or retrieve per-element state */\n remember(key: string, value?: any): any {\n const mem = getMemory(this.el)\n if (value !== undefined) {\n mem.set(key, value)\n return this\n }\n return mem.get(key)\n }\n\n /** Query children */\n find(selector: string): ScadaElement[] {\n return Array.from(this.el.querySelectorAll(selector)).map((e) => new ScadaElement(e))\n }\n\n /** Query first matching child */\n findOne(selector: string): ScadaElement | null {\n const el = this.el.querySelector(selector)\n return el ? new ScadaElement(el) : null\n }\n\n /** First child element */\n first(): ScadaElement {\n const fc = this.el.firstElementChild\n return fc ? new ScadaElement(fc) : this\n }\n\n /** Remove all children */\n clear(): ScadaElement {\n while (this.el.firstChild) this.el.removeChild(this.el.firstChild)\n return this\n }\n\n /** Append child (accepts ScadaElement or raw Element) */\n add(child: ScadaElement | Element): ScadaElement {\n const node = child instanceof ScadaElement ? child.native : child\n this.el.appendChild(node)\n return this\n }\n\n /** Get referenced element from an attribute (e.g., fill url(#id)) */\n reference(attrName: string): ScadaElement {\n const val = this.el.getAttribute(attrName)\n if (val) {\n const idMatch = val.match(/url\\(#([^)]+)\\)/)\n if (idMatch) {\n // Use getRootNode() so IDs inside shadow DOM (Lit) are found\n const root = this.el.getRootNode() as Document | ShadowRoot\n const ref = root.getElementById(idMatch[1])\n if (ref) return new ScadaElement(ref)\n }\n }\n return this\n }\n\n /** ForEach for SVG.js compatibility when used on collections */\n forEach(fn: (el: ScadaElement, i: number) => void): void {\n fn(this, 0)\n }\n\n /** Get bounding box width */\n width(): number {\n return (this.el as SVGGraphicsElement).getBBox?.()?.width ?? 0\n }\n\n /** Get bounding box height */\n height(): number {\n return (this.el as SVGGraphicsElement).getBBox?.()?.height ?? 0\n }\n\n /** Get child elements as ScadaElement array */\n children(): ScadaElement[] {\n return Array.from(this.el.children).map((e) => new ScadaElement(e))\n }\n\n addClass(name: string): ScadaElement {\n this.el.classList.add(name)\n return this\n }\n\n removeClass(name: string): ScadaElement {\n this.el.classList.remove(name)\n return this\n }\n\n hasClass(name: string): boolean {\n return this.el.classList.contains(name)\n }\n\n css(prop: string | Record<string, any>, val?: any): ScadaElement {\n const style = (this.el as SVGElement | HTMLElement).style\n if (typeof prop === 'string') {\n style.setProperty(prop, val == null ? '' : String(val))\n } else if (prop) {\n for (const [k, v] of Object.entries(prop)) {\n style.setProperty(k, v == null ? '' : String(v))\n }\n }\n return this\n }\n\n translate(x: number, y: number): ScadaElement {\n const n = (v: any) => (typeof v === 'number' && !isFinite(v) ? 0 : (v ?? 0))\n const tagName = this.el.nodeName?.toLowerCase()\n const attr = tagName === 'pattern' ? 'patternTransform' : 'transform'\n this.el.setAttribute(attr, `translate(${n(x)}, ${n(y)})`)\n return this\n }\n\n click(handler: (event: Event) => void): ScadaElement {\n this.el.addEventListener('click', handler)\n return this\n }\n\n clone(): ScadaElement {\n return new ScadaElement(this.el.cloneNode(true) as Element)\n }\n\n /** Get underlying DOM element */\n get native(): Element {\n return this.el\n }\n}\n\n// ---------------------------------------------------------------------------\n// Color Processor — handles color_settings type properties\n// ---------------------------------------------------------------------------\n\nexport class ColorProcessor {\n private settings: ColorSettings\n color: string\n\n constructor(settings: ColorSettings | string) {\n if (typeof settings === 'string') {\n this.settings = { type: 'constant', color: settings }\n this.color = settings\n } else {\n this.settings = settings\n this.color = settings.color ?? '#000000'\n }\n }\n\n update(value: number): void {\n switch (this.settings.type) {\n case 'constant':\n // color stays the same\n break\n case 'gradient': {\n const g = this.settings.gradient\n if (g && g.gradient.length >= 2) {\n const min = g.minValue ?? 0\n const max = g.maxValue ?? 100\n const ratio = Math.max(0, Math.min(1, (value - min) / (max - min || 1)))\n this.color = interpolateColor(g.gradient[0], g.gradient[g.gradient.length - 1], ratio)\n }\n break\n }\n case 'range': {\n const rl = this.settings.rangeList\n if (rl?.range) {\n for (const r of rl.range) {\n if (value >= r.from && value <= r.to) {\n this.color = r.color\n return\n }\n }\n }\n break\n }\n // 'function' mode: skip — requires tinycolor2 + eval\n }\n }\n}\n\nfunction interpolateColor(c1: string, c2: string, ratio: number): string {\n const parse = (c: string) => {\n // Handle rgba(r,g,b,a) or hex\n const rgbaMatch = c.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/)\n if (rgbaMatch) return [+rgbaMatch[1], +rgbaMatch[2], +rgbaMatch[3]]\n // hex\n const hex = c.replace('#', '')\n const h =\n hex.length === 3\n ? [\n parseInt(hex[0] + hex[0], 16),\n parseInt(hex[1] + hex[1], 16),\n parseInt(hex[2] + hex[2], 16)\n ]\n : [\n parseInt(hex.slice(0, 2), 16),\n parseInt(hex.slice(2, 4), 16),\n parseInt(hex.slice(4, 6), 16)\n ]\n return h\n }\n const [r1, g1, b1] = parse(c1)\n const [r2, g2, b2] = parse(c2)\n const r = Math.round(r1 + (r2 - r1) * ratio)\n const g = Math.round(g1 + (g2 - g1) * ratio)\n const b = Math.round(b1 + (b2 - b1) * ratio)\n return `rgb(${r},${g},${b})`\n}\n\n// ---------------------------------------------------------------------------\n// SVG Factory — ctx.svg.line(), ctx.svg.text()\n// ---------------------------------------------------------------------------\n\nfunction createSvgFactory(svgEl: SVGSVGElement) {\n const ns = 'http://www.w3.org/2000/svg'\n\n return {\n line(x1: number, y1: number, x2: number, y2: number): ScadaElement {\n const line = document.createElementNS(ns, 'line')\n line.setAttribute('x1', String(x1))\n line.setAttribute('y1', String(y1))\n line.setAttribute('x2', String(x2))\n line.setAttribute('y2', String(y2))\n return new ScadaElement(line)\n },\n\n text(content: string): ScadaElement {\n const text = document.createElementNS(ns, 'text')\n const tspan = document.createElementNS(ns, 'tspan')\n tspan.textContent = content\n text.appendChild(tspan)\n return new ScadaElement(text)\n },\n\n rect(x?: number, y?: number, w?: number, h?: number): ScadaElement {\n const rect = document.createElementNS(ns, 'rect')\n if (x !== undefined) rect.setAttribute('x', String(x))\n if (y !== undefined) rect.setAttribute('y', String(y))\n if (w !== undefined) rect.setAttribute('width', String(w))\n if (h !== undefined) rect.setAttribute('height', String(h))\n return new ScadaElement(rect)\n },\n\n circle(cx?: number, cy?: number, r?: number): ScadaElement {\n const circle = document.createElementNS(ns, 'circle')\n if (cx !== undefined) circle.setAttribute('cx', String(cx))\n if (cy !== undefined) circle.setAttribute('cy', String(cy))\n if (r !== undefined) circle.setAttribute('r', String(r))\n return new ScadaElement(circle)\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Unit helpers\n// ---------------------------------------------------------------------------\n\nconst UNIT_SYMBOLS: Record<string, string> = {\n celsius: '°C',\n fahrenheit: '°F',\n kelvin: 'K',\n liters: 'L',\n gallons: 'gal',\n cubicMeters: 'm³',\n cubicFeet: 'ft³',\n milliliters: 'mL',\n barrels: 'bbl',\n watts: 'W',\n kilowatts: 'kW',\n megawatts: 'MW',\n horsepower: 'hp',\n wattHours: 'Wh',\n kilowattHours: 'kWh',\n megawattHours: 'MWh',\n volts: 'V',\n millivolts: 'mV',\n kilovolts: 'kV',\n amperes: 'A',\n milliamperes: 'mA',\n hertz: 'Hz',\n kilohertz: 'kHz',\n psi: 'psi',\n bar: 'bar',\n pascal: 'Pa',\n kilopascal: 'kPa',\n atm: 'atm',\n meters: 'm',\n centimeters: 'cm',\n millimeters: 'mm',\n kilometers: 'km',\n feet: 'ft',\n inches: 'in',\n yards: 'yd',\n metersPerSecond: 'm/s',\n kilometersPerHour: 'km/h',\n milesPerHour: 'mph',\n kilograms: 'kg',\n grams: 'g',\n pounds: 'lb',\n tonnes: 't',\n percent: '%',\n rpm: 'rpm',\n decibels: 'dB',\n lux: 'lx',\n lumens: 'lm',\n ohms: 'Ω',\n kilohms: 'kΩ'\n}\n\nfunction unitSymbol(units: string): string {\n return UNIT_SYMBOLS[units] ?? units ?? ''\n}\n\nfunction formatValue(\n value: any,\n optsOrDecimals?: number | { units?: string; decimals?: number; ignoreUnitSymbol?: boolean },\n units?: string,\n ignoreUnitSymbol?: boolean\n): string {\n if (value == null || value === '') return ''\n const num = Number(value)\n if (isNaN(num)) return String(value)\n\n let decimals = 0\n let unitStr = ''\n let ignoreSymbol = false\n\n if (typeof optsOrDecimals === 'object' && optsOrDecimals !== null) {\n decimals = optsOrDecimals.decimals ?? 0\n unitStr = optsOrDecimals.units ?? ''\n ignoreSymbol = optsOrDecimals.ignoreUnitSymbol ?? false\n } else {\n decimals = optsOrDecimals ?? 0\n unitStr = units ?? ''\n ignoreSymbol = ignoreUnitSymbol === true\n }\n\n let result = num.toFixed(decimals)\n if (!ignoreSymbol && unitStr) {\n result += ' ' + unitSymbol(unitStr)\n }\n return result\n}\n\nfunction convertUnitValue(value: number, _units: string): number {\n // In our context, values are already in the target unit — pass through\n return value\n}\n\n// ---------------------------------------------------------------------------\n// API Object builder — creates ctx.api for stateRenderFunction execution\n// ---------------------------------------------------------------------------\n\nexport interface ScadaCallbacks {\n onAction: (event: Event | null, actionName: string, args?: any, opts?: any) => void\n onSetValue: (key: string, value: any) => void\n}\n\nfunction createApi(callbacks: ScadaCallbacks) {\n return {\n cssAnimate(element: ScadaElement | any, duration: number): AnimationRunner {\n const el = element instanceof ScadaElement ? element.native : element\n // Cancel existing\n const existing = elementAnimations.get(el as Element)\n if (existing) existing.cancel()\n const runner = new AnimationRunner(el as Element, duration)\n elementAnimations.set(el as Element, runner)\n return runner\n },\n\n cssAnimation(element: ScadaElement | any): AnimationRunner | null {\n const el = element instanceof ScadaElement ? element.native : element\n return elementAnimations.get(el as Element) ?? null\n },\n\n resetCssAnimation(element: ScadaElement | any): void {\n const el = element instanceof ScadaElement ? element.native : element\n const runner = elementAnimations.get(el as Element)\n if (runner) {\n runner.cancel()\n elementAnimations.delete(el as Element)\n }\n },\n\n finishCssAnimation(element: ScadaElement | any): void {\n const el = element instanceof ScadaElement ? element.native : element\n const runner = elementAnimations.get(el as Element)\n if (runner) {\n runner.finish()\n elementAnimations.delete(el as Element)\n }\n },\n\n font(\n element: ScadaElement | ScadaElement[] | any,\n fontDef: FontDef | any,\n color?: string | any\n ): void {\n // Handle arrays (e.g. from element.find())\n if (Array.isArray(element)) {\n for (const item of element) this.font(item, fontDef, color)\n return\n }\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n if (fontDef && typeof fontDef === 'object' && fontDef.size) {\n const family = fontDef.family || 'Roboto'\n // Ensure a generic fallback so missing fonts don't fall through to serif\n const hasFallback = /\\b(sans-serif|serif|monospace|cursive|fantasy)\\b/.test(family)\n ;(el as SVGElement).style.fontSize = fontDef.size + (fontDef.sizeUnit || 'px')\n ;(el as SVGElement).style.fontFamily = hasFallback ? family : family + ', sans-serif'\n ;(el as SVGElement).style.fontWeight = fontDef.weight || '400'\n ;(el as SVGElement).style.fontStyle = fontDef.style || 'normal'\n }\n if (color) {\n const c = color instanceof ColorProcessor ? color.color : String(color)\n el.setAttribute('fill', c)\n }\n },\n\n text(element: ScadaElement | any, text: string): void {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n // SVG text elements use tspan children or direct textContent\n const tspan = el.querySelector('tspan')\n if (tspan) {\n tspan.textContent = text\n } else {\n el.textContent = text\n }\n },\n\n formatValue,\n unitSymbol,\n convertUnitValue,\n\n callAction(event: Event | null, actionName: string, args?: any, opts?: any): void {\n // Execute the opts.next callback if provided (for toggle patterns)\n if (opts?.next) {\n try {\n opts.next()\n } catch {\n /* skip */\n }\n }\n callbacks.onAction(event, actionName, args, opts)\n },\n\n setValue(key: string, value: any): void {\n callbacks.onSetValue(key, value)\n },\n\n disable(element: ScadaElement | ScadaElement[] | any): void {\n const items = Array.isArray(element) ? element : [element]\n for (const item of items) {\n const el = item instanceof ScadaElement ? item.native : (item as Element)\n ;(el as SVGElement).style.pointerEvents = 'none'\n ;(el as SVGElement).style.opacity = '0.5'\n }\n },\n\n enable(element: ScadaElement | ScadaElement[] | any): void {\n const items = Array.isArray(element) ? element : [element]\n for (const item of items) {\n const el = item instanceof ScadaElement ? item.native : (item as Element)\n ;(el as SVGElement).style.pointerEvents = ''\n ;(el as SVGElement).style.opacity = ''\n }\n },\n\n icon(\n element: ScadaElement | any,\n iconName: string,\n size?: number,\n color?: string | ColorProcessor | any,\n _useSymbols?: boolean\n ): void {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n ensureMaterialSymbolsFont()\n const fontSize = size ?? 14\n const fill =\n color instanceof ColorProcessor ? color.color : typeof color === 'string' ? color : '#000000'\n\n // Reuse existing <text> if already injected, otherwise replace content\n let textEl = el.querySelector('text.__scada-icon') as SVGTextElement | null\n if (!textEl) {\n // Clear original SVG path content\n el.textContent = ''\n const NS = 'http://www.w3.org/2000/svg'\n textEl = document.createElementNS(NS, 'text') as SVGTextElement\n textEl.classList.add('__scada-icon')\n textEl.setAttribute('dominant-baseline', 'central')\n textEl.setAttribute('text-anchor', 'middle')\n el.appendChild(textEl)\n }\n textEl.setAttribute('font-family', 'Material Symbols Outlined')\n textEl.setAttribute('font-size', String(fontSize))\n textEl.setAttribute('fill', fill)\n textEl.textContent = iconName\n },\n\n transform(element: ScadaElement | any, t: Record<string, any>): void {\n if (element instanceof ScadaElement) {\n element.transform(t)\n } else {\n new ScadaElement(element as Element).transform(t)\n }\n },\n\n connectorAnimate(\n element: ScadaElement | any,\n forwardPath: string,\n reversedPath: string\n ): ConnectorAnimationRunner {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n // Cancel existing connector animation on this element\n const existing = connectorAnimations.get(el)\n if (existing) existing.finish()\n const runner = new ConnectorAnimationRunner(el, forwardPath, reversedPath)\n connectorAnimations.set(el, runner)\n return runner\n },\n\n connectorAnimation(element: ScadaElement | any): ConnectorAnimationRunner | null {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n return connectorAnimations.get(el) ?? null\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Context builder + execution engine\n// ---------------------------------------------------------------------------\n\nexport interface ScadaContext {\n values: Record<string, any>\n properties: Record<string, any>\n tags: Record<string, ScadaElement[]>\n svg: ReturnType<typeof createSvgFactory>\n api: ReturnType<typeof createApi>\n}\n\n/**\n * Build the full ctx object for stateRenderFunction execution\n */\nexport function buildContext(\n svgEl: SVGSVGElement,\n metadata: SymbolMetadata,\n values: Record<string, any>,\n rawProperties: Record<string, any>,\n callbacks: ScadaCallbacks\n): ScadaContext {\n // Wrap color_settings properties in ColorProcessor\n const properties: Record<string, any> = {}\n for (const [key, val] of Object.entries(rawProperties)) {\n if (\n val &&\n typeof val === 'object' &&\n val.type &&\n (val.type === 'constant' ||\n val.type === 'gradient' ||\n val.type === 'range' ||\n val.type === 'function') &&\n 'color' in val\n ) {\n properties[key] = new ColorProcessor(val as ColorSettings)\n } else {\n properties[key] = val\n }\n }\n\n // Merge metadata property defaults (inputData wins)\n for (const propDef of metadata.properties) {\n if (properties[propDef.id] === undefined && propDef.default !== undefined) {\n const def = propDef.default\n if (propDef.type === 'color_settings' && def && typeof def === 'object') {\n properties[propDef.id] = new ColorProcessor(def as ColorSettings)\n } else {\n properties[propDef.id] = def\n }\n }\n }\n\n // Merge metadata behavior defaults for values\n for (const beh of metadata.behavior) {\n if (beh.type === 'value' && values[beh.id] === undefined) {\n // Set sensible defaults for unbound values\n if (beh.valueType === 'BOOLEAN') values[beh.id] = false\n else if (beh.valueType === 'DOUBLE' || beh.valueType === 'INTEGER') values[beh.id] = 0\n }\n }\n\n const api = createApi(callbacks)\n const svgFactory = createSvgFactory(svgEl)\n\n // Build tags map — lazy proxy that resolves on access\n const tagsCache: Record<string, ScadaElement[]> = {}\n const tags = new Proxy(tagsCache, {\n get(_target, prop: string) {\n if (!(prop in tagsCache)) {\n const els = svgEl.querySelectorAll(`[tb\\\\:tag=\"${prop}\"]`)\n tagsCache[prop] = Array.from(els).map((e) => new ScadaElement(e))\n }\n return tagsCache[prop]\n }\n })\n\n return { values, properties, tags, svg: svgFactory, api }\n}\n\n/**\n * Execute a stateRenderFunction for a given element and context\n */\nexport function executeStateRender(fnString: string, element: ScadaElement, ctx: ScadaContext): void {\n try {\n // The stateRenderFunction has access to: element, ctx\n // It may also define local functions (e.g., drawMinorTicks)\n const fn = new Function('element', 'ctx', 'console', fnString)\n fn(element, ctx, console)\n } catch (e) {\n console.warn('[scada-runtime] stateRenderFunction error:', e)\n }\n}\n\n/**\n * Execute an actionFunction for a given element and context\n */\nexport function executeAction(\n fnString: string,\n element: ScadaElement,\n ctx: ScadaContext,\n event: Event\n): void {\n try {\n const fn = new Function('element', 'ctx', 'event', fnString)\n fn(element, ctx, event)\n } catch (e) {\n if (import.meta.env?.DEV) {\n console.warn('[scada-runtime] actionFunction error:', e)\n }\n }\n}\n\n/**\n * Run all stateRenderFunctions for all tags in the metadata\n */\nexport function renderAllTags(svgEl: SVGSVGElement, metadata: SymbolMetadata, ctx: ScadaContext): void {\n // Execute top-level stateRenderFunction (e.g. pipe fluid flow setup).\n // Run twice: ThingsBoard stateRenderFunctions capture a `cssAnimation()`\n // reference before `animateFlow()` creates the animation, then call\n // `speed()` on the captured (null) ref. The second pass sees the animation\n // created by the first pass and applies speed/play/pause correctly.\n if (metadata.stateRenderFunction) {\n try {\n const fn = new Function('ctx', 'svg', 'console', metadata.stateRenderFunction)\n fn(ctx, ctx.svg, console)\n fn(ctx, ctx.svg, console)\n } catch (e) {\n console.warn('[scada-runtime] top-level stateRenderFunction error:', e)\n }\n }\n\n for (const tagDef of metadata.tags) {\n const elements = svgEl.querySelectorAll(`[tb\\\\:tag=\"${tagDef.tag}\"]`)\n if (!elements.length) continue\n\n if (tagDef.stateRenderFunction) {\n for (const el of elements) {\n const wrapped = new ScadaElement(el)\n // Save original SVG display on first render, restore before each re-render.\n // Many ThingsBoard stateRenderFunctions only call show() conditionally\n // without a corresponding hide(), relying on the SVG's initial hidden state.\n const mem = getMemory(el)\n if (!mem.has('__origDisplay')) {\n mem.set('__origDisplay', (el as SVGElement).style.display)\n mem.set('__origVisibility', (el as SVGElement).style.visibility)\n mem.set('__origTransform', el.getAttribute('transform') ?? '')\n } else {\n ;(el as SVGElement).style.display = mem.get('__origDisplay')\n ;(el as SVGElement).style.visibility = mem.get('__origVisibility')\n const origT = mem.get('__origTransform')\n if (origT) {\n el.setAttribute('transform', origT)\n } else {\n el.removeAttribute('transform')\n }\n }\n // Clear application-level cached state so that changes in\n // properties/values trigger a full redraw. Internal keys\n // prefixed with '__' are preserved.\n for (const key of mem.keys()) {\n if (!key.startsWith('__')) mem.delete(key)\n }\n executeStateRender(tagDef.stateRenderFunction, wrapped, ctx)\n }\n }\n }\n}\n\n/**\n * Attach click event listeners for all action tags\n */\nexport function attachActions(\n svgEl: SVGSVGElement,\n metadata: SymbolMetadata,\n ctx: ScadaContext\n): Array<() => void> {\n const cleanups: Array<() => void> = []\n\n for (const tagDef of metadata.tags) {\n if (!tagDef.actions) continue\n\n const elements = svgEl.querySelectorAll(`[tb\\\\:tag=\"${tagDef.tag}\"]`)\n for (const el of elements) {\n ;(el as SVGElement).style.cursor = 'pointer'\n\n for (const [actionName, actionDef] of Object.entries(tagDef.actions)) {\n if (actionName === 'click' && actionDef.actionFunction) {\n const handler = (event: Event) => {\n const wrapped = new ScadaElement(el)\n executeAction(actionDef.actionFunction, wrapped, ctx, event)\n }\n el.addEventListener('click', handler)\n cleanups.push(() => el.removeEventListener('click', handler))\n }\n }\n }\n }\n\n return cleanups\n}\n\n/**\n * Extract defaults from SVG metadata, structured to match the inputData shape.\n * Properties with type color/color_settings/font go into `styling`,\n * everything else is top-level. Behavior values go into `bindings`.\n */\nexport function getSymbolDefaults(metadata: SymbolMetadata): Record<string, any> {\n const defaults: Record<string, any> = {}\n const styling: Record<string, any> = {}\n const bindings: Record<string, any> = {}\n\n const STYLING_TYPES = new Set(['color', 'color_settings', 'font'])\n\n for (const prop of metadata.properties) {\n if (prop.default === undefined) continue\n if (STYLING_TYPES.has(prop.type)) {\n styling[prop.id] = prop.default\n } else {\n defaults[prop.id] = prop.default\n }\n }\n\n for (const beh of metadata.behavior) {\n if (beh.type === 'value') {\n if (beh.valueType === 'BOOLEAN') bindings[beh.id] = false\n else if (beh.valueType === 'DOUBLE' || beh.valueType === 'INTEGER') bindings[beh.id] = 0\n else bindings[beh.id] = ''\n }\n }\n\n if (Object.keys(styling).length > 0) defaults.styling = styling\n if (Object.keys(bindings).length > 0) defaults.bindings = bindings\n\n return defaults\n}\n","import { html, css, LitElement, PropertyValues, nothing } from 'lit'\nimport { customElement, property, state, query } from 'lit/decorators.js'\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js'\nimport { InputData } from './definition-schema.js'\nimport {\n SymbolMetadata,\n ScadaContext,\n ScadaCallbacks,\n buildContext,\n renderAllTags,\n attachActions,\n getSymbolDefaults\n} from './scada-runtime.js'\n\ntype Theme = {\n theme_name: string\n theme_object: any\n}\n\n@customElement('widget-scada-versionplaceholder')\nexport class WidgetScada extends LitElement {\n @property({ type: Object })\n inputData?: InputData\n\n @property({ type: Object })\n theme?: Theme\n\n @property({ type: String })\n baseUrl?: string\n\n @state() private svgContent: string = ''\n @state() private metadata?: SymbolMetadata\n @state() private themeBgColor?: string\n\n @query('.svg-container')\n svgContainer?: HTMLDivElement\n\n version: string = 'versionplaceholder'\n private currentSymbol?: string\n private resizeObserver: ResizeObserver\n private svgModules = new Map<string, { svg: string; metadata: SymbolMetadata }>()\n private actionCleanups: Array<() => void> = []\n private ctx?: ScadaContext\n\n constructor() {\n super()\n this.resizeObserver = new ResizeObserver(() => this.requestUpdate())\n this.resizeObserver.observe(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.resizeObserver?.disconnect()\n this.cleanupActions()\n }\n\n private cleanupActions() {\n for (const cleanup of this.actionCleanups) cleanup()\n this.actionCleanups = []\n }\n\n /**\n * Returns the default property values from the currently loaded SVG metadata.\n */\n getDefaults(): Record<string, any> | undefined {\n if (!this.metadata) return undefined\n return getSymbolDefaults(this.metadata)\n }\n\n private dispatchDefaults() {\n if (!this.metadata) return\n this.dispatchEvent(\n new CustomEvent('widget-defaults', {\n detail: getSymbolDefaults(this.metadata),\n bubbles: true,\n composed: true\n })\n )\n }\n\n protected updated(changedProperties: PropertyValues) {\n if (changedProperties.has('inputData')) {\n const newSymbol = this.inputData?.symbol\n if (newSymbol && newSymbol !== this.currentSymbol) {\n this.currentSymbol = newSymbol\n this.loadSymbol(newSymbol)\n } else if (newSymbol === this.currentSymbol) {\n this.applyState()\n }\n }\n if (changedProperties.has('theme')) {\n this.registerTheme()\n }\n }\n\n private registerTheme() {\n const cssBgColor = getComputedStyle(this).getPropertyValue('--re-tile-background-color').trim()\n this.themeBgColor = cssBgColor || this.theme?.theme_object?.backgroundColor\n }\n\n private getSymbolUrl(symbolId: string): string {\n if (this.baseUrl) {\n const base = this.baseUrl.endsWith('/') ? this.baseUrl.slice(0, -1) : this.baseUrl\n return base + '/scada_symbols/' + symbolId + '.svg'\n }\n // Build URL at runtime without triggering Vite's static asset analysis\n // import.meta.url points to the module's own URL\n const base = import.meta.url\n const segments = base.split('/')\n segments.pop() // remove current filename\n if (segments[segments.length - 1] === 'src') {\n segments.pop() // go up from src/ (dev mode only)\n }\n return segments.join('/') + '/scada_symbols/' + symbolId + '.svg'\n }\n\n private async loadSymbol(symbolId: string) {\n const cached = this.svgModules.get(symbolId)\n if (cached) {\n this.svgContent = cached.svg\n this.metadata = cached.metadata\n await this.updateComplete\n this.applyState()\n this.dispatchDefaults()\n return\n }\n\n try {\n const url = this.getSymbolUrl(symbolId)\n const resp = await fetch(url)\n if (!resp.ok) {\n this.svgContent = ''\n this.metadata = undefined\n return\n }\n const text = await resp.text()\n\n const metaMatch = text.match(/<tb:metadata[^>]*><!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/)\n let metadata: SymbolMetadata | undefined\n if (metaMatch) {\n try {\n metadata = JSON.parse(metaMatch[1])\n } catch {\n /* skip */\n }\n }\n\n const cleanSvg = text.replace(/<tb:metadata[\\s\\S]*?<\\/tb:metadata>/, '')\n this.svgModules.set(symbolId, { svg: cleanSvg, metadata: metadata! })\n this.svgContent = cleanSvg\n this.metadata = metadata\n await this.updateComplete\n this.applyState()\n } catch {\n this.svgContent = ''\n this.metadata = undefined\n }\n this.dispatchDefaults()\n }\n\n private applyState() {\n if (!this.metadata || !this.inputData || !this.svgContainer) return\n\n requestAnimationFrame(() => {\n const svgEl = this.svgContainer?.querySelector('svg')\n if (!svgEl) return\n\n // Build values from bindings\n const values: Record<string, any> = {}\n const bindings = (this.inputData as any)?.bindings ?? {}\n for (const [key, val] of Object.entries(bindings)) {\n values[key] = val\n }\n\n // Build properties: symbol defaults → top-level props → flattened styling\n const data = this.inputData as any\n const symbolDefaults = getSymbolDefaults(this.metadata!)\n const { styling: defaultStyling, bindings: _defaultBindings, ...defaultProps } = symbolDefaults\n const properties: Record<string, any> = { ...defaultProps, ...data }\n delete properties.symbol\n delete properties.bindings\n delete properties.actions\n delete properties.styling\n Object.assign(properties, defaultStyling ?? {}, data?.styling ?? {})\n\n // Action callbacks\n const callbacks: ScadaCallbacks = {\n onAction: (event, actionName, args, _opts) => {\n this.dispatchEvent(\n new CustomEvent('action-submit', {\n detail: {\n actionName,\n args,\n actionApp: data?.actions?.actionApp,\n actionDevice: data?.actions?.actionDevice,\n actionTopic: data?.actions?.actionTopic\n },\n bubbles: false,\n composed: false\n })\n )\n },\n onSetValue: (key, value) => {\n // Update the binding value and re-render\n if (this.ctx) this.ctx.values[key] = value\n this.applyState()\n }\n }\n\n // Build context and execute all stateRenderFunctions\n this.ctx = buildContext(svgEl, this.metadata!, values, properties, callbacks)\n\n // Cleanup old action handlers and attach new ones\n this.cleanupActions()\n renderAllTags(svgEl, this.metadata!, this.ctx)\n this.actionCleanups = attachActions(svgEl, this.metadata!, this.ctx)\n })\n }\n\n static styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n position: relative;\n margin: auto;\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n }\n\n .svg-container {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n }\n\n .svg-container svg {\n max-width: 100%;\n max-height: 100%;\n width: auto;\n height: auto;\n }\n\n .no-symbol {\n font-size: 16px;\n color: #999;\n display: flex;\n height: 100%;\n width: 100%;\n text-align: center;\n align-items: center;\n justify-content: center;\n font-family: sans-serif;\n }\n `\n\n render() {\n return html`\n <div class=\"wrapper\" style=\"background-color: ${this.themeBgColor ?? ''}\">\n ${this.svgContent\n ? html`<div class=\"svg-container\">${unsafeSVG(this.svgContent)}</div>`\n : html`<div class=\"no-symbol\">\n ${this.inputData?.symbol ? 'Loading...' : 'Select a SCADA symbol'}\n </div>`}\n </div>\n `\n }\n}\n"],"names":["t","e","s","o","n$3","r","n","i","S","c","h","a","l","p","d","u","f","b","y$1","y","v","_","m","g","$","x","A","C","P","V","N","I","L","z","H","M","R","k","Z","B","D","elementMemory","getMemory","el","elementAnimations","connectorAnimations","ConnectorAnimationRunner","container","forwardPath","reversedPath","now","dt","cycleLength","lineWidth","lineColor","dashCap","dashWidth","dashGap","dir","ns","materialFontLoaded","ensureMaterialSymbolsFont","link","AnimationRunner","duration","dx","dy","safeDx","safeDy","parent","baseTransform","progress","attrs","SVG_GEOM","startFrame","endFrame","hasKeyframes","key","val","safeVal","current","parts","bbox","ox","oy","deg","existingTransform","cx","cy","currentDeg","easing","count","bounce","ScadaElement","attrsOrKey","color","opts","value","mem","selector","fc","child","node","attrName","idMatch","ref","fn","name","prop","style","attr","handler","ColorProcessor","settings","min","max","ratio","interpolateColor","rl","c1","c2","parse","rgbaMatch","hex","r1","g1","b1","r2","g2","b2","createSvgFactory","svgEl","x1","y1","x2","y2","line","content","text","tspan","w","rect","circle","UNIT_SYMBOLS","unitSymbol","units","formatValue","optsOrDecimals","ignoreUnitSymbol","num","decimals","unitStr","ignoreSymbol","result","convertUnitValue","_units","createApi","callbacks","element","existing","runner","fontDef","item","family","hasFallback","event","actionName","args","items","iconName","size","_useSymbols","fontSize","fill","textEl","buildContext","metadata","values","rawProperties","properties","propDef","def","beh","api","svgFactory","tagsCache","tags","_target","els","executeStateRender","fnString","ctx","executeAction","renderAllTags","tagDef","elements","wrapped","origT","attachActions","cleanups","actionDef","getSymbolDefaults","defaults","styling","bindings","STYLING_TYPES","WidgetScada","LitElement","cleanup","changedProperties","newSymbol","cssBgColor","symbolId","segments","cached","url","resp","metaMatch","cleanSvg","data","symbolDefaults","defaultStyling","_defaultBindings","defaultProps","_opts","html","unsafeSVG","css","__decorateClass","property","state","query","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
1
+ {"version":3,"file":"widget-scada.js","sources":["../node_modules/@lit/reactive-element/css-tag.js","../node_modules/@lit/reactive-element/reactive-element.js","../node_modules/lit-html/lit-html.js","../node_modules/lit-element/lit-element.js","../node_modules/@lit/reactive-element/decorators/custom-element.js","../node_modules/@lit/reactive-element/decorators/property.js","../node_modules/@lit/reactive-element/decorators/state.js","../node_modules/@lit/reactive-element/decorators/base.js","../node_modules/@lit/reactive-element/decorators/query.js","../node_modules/lit-html/directive.js","../node_modules/lit-html/directives/unsafe-html.js","../node_modules/lit-html/directives/unsafe-svg.js","../src/scada-runtime.ts","../src/widget-scada.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2019 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,e=t.ShadowRoot&&(void 0===t.ShadyCSS||t.ShadyCSS.nativeShadow)&&\"adoptedStyleSheets\"in Document.prototype&&\"replace\"in CSSStyleSheet.prototype,s=Symbol(),o=new WeakMap;class n{constructor(t,e,o){if(this._$cssResult$=!0,o!==s)throw Error(\"CSSResult is not constructable. Use `unsafeCSS` or `css` instead.\");this.cssText=t,this.t=e}get styleSheet(){let t=this.o;const s=this.t;if(e&&void 0===t){const e=void 0!==s&&1===s.length;e&&(t=o.get(s)),void 0===t&&((this.o=t=new CSSStyleSheet).replaceSync(this.cssText),e&&o.set(s,t))}return t}toString(){return this.cssText}}const r=t=>new n(\"string\"==typeof t?t:t+\"\",void 0,s),i=(t,...e)=>{const o=1===t.length?t[0]:e.reduce((e,s,o)=>e+(t=>{if(!0===t._$cssResult$)return t.cssText;if(\"number\"==typeof t)return t;throw Error(\"Value passed to 'css' function must be a 'css' function result: \"+t+\". Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.\")})(s)+t[o+1],t[0]);return new n(o,t,s)},S=(s,o)=>{if(e)s.adoptedStyleSheets=o.map(t=>t instanceof CSSStyleSheet?t:t.styleSheet);else for(const e of o){const o=document.createElement(\"style\"),n=t.litNonce;void 0!==n&&o.setAttribute(\"nonce\",n),o.textContent=e.cssText,s.appendChild(o)}},c=e?t=>t:t=>t instanceof CSSStyleSheet?(t=>{let e=\"\";for(const s of t.cssRules)e+=s.cssText;return r(e)})(t):t;export{n as CSSResult,S as adoptStyles,i as css,c as getCompatibleStyle,e as supportsAdoptingStyleSheets,r as unsafeCSS};\n//# sourceMappingURL=css-tag.js.map\n","import{getCompatibleStyle as t,adoptStyles as s}from\"./css-tag.js\";export{CSSResult,css,supportsAdoptingStyleSheets,unsafeCSS}from\"./css-tag.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const{is:i,defineProperty:e,getOwnPropertyDescriptor:h,getOwnPropertyNames:r,getOwnPropertySymbols:o,getPrototypeOf:n}=Object,a=globalThis,c=a.trustedTypes,l=c?c.emptyScript:\"\",p=a.reactiveElementPolyfillSupport,d=(t,s)=>t,u={toAttribute(t,s){switch(s){case Boolean:t=t?l:null;break;case Object:case Array:t=null==t?t:JSON.stringify(t)}return t},fromAttribute(t,s){let i=t;switch(s){case Boolean:i=null!==t;break;case Number:i=null===t?null:Number(t);break;case Object:case Array:try{i=JSON.parse(t)}catch(t){i=null}}return i}},f=(t,s)=>!i(t,s),b={attribute:!0,type:String,converter:u,reflect:!1,useDefault:!1,hasChanged:f};Symbol.metadata??=Symbol(\"metadata\"),a.litPropertyMetadata??=new WeakMap;class y extends HTMLElement{static addInitializer(t){this._$Ei(),(this.l??=[]).push(t)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(t,s=b){if(s.state&&(s.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(t)&&((s=Object.create(s)).wrapped=!0),this.elementProperties.set(t,s),!s.noAccessor){const i=Symbol(),h=this.getPropertyDescriptor(t,i,s);void 0!==h&&e(this.prototype,t,h)}}static getPropertyDescriptor(t,s,i){const{get:e,set:r}=h(this.prototype,t)??{get(){return this[s]},set(t){this[s]=t}};return{get:e,set(s){const h=e?.call(this);r?.call(this,s),this.requestUpdate(t,h,i)},configurable:!0,enumerable:!0}}static getPropertyOptions(t){return this.elementProperties.get(t)??b}static _$Ei(){if(this.hasOwnProperty(d(\"elementProperties\")))return;const t=n(this);t.finalize(),void 0!==t.l&&(this.l=[...t.l]),this.elementProperties=new Map(t.elementProperties)}static finalize(){if(this.hasOwnProperty(d(\"finalized\")))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(d(\"properties\"))){const t=this.properties,s=[...r(t),...o(t)];for(const i of s)this.createProperty(i,t[i])}const t=this[Symbol.metadata];if(null!==t){const s=litPropertyMetadata.get(t);if(void 0!==s)for(const[t,i]of s)this.elementProperties.set(t,i)}this._$Eh=new Map;for(const[t,s]of this.elementProperties){const i=this._$Eu(t,s);void 0!==i&&this._$Eh.set(i,t)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(s){const i=[];if(Array.isArray(s)){const e=new Set(s.flat(1/0).reverse());for(const s of e)i.unshift(t(s))}else void 0!==s&&i.push(t(s));return i}static _$Eu(t,s){const i=s.attribute;return!1===i?void 0:\"string\"==typeof i?i:\"string\"==typeof t?t.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(t=>this.enableUpdating=t),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(t=>t(this))}addController(t){(this._$EO??=new Set).add(t),void 0!==this.renderRoot&&this.isConnected&&t.hostConnected?.()}removeController(t){this._$EO?.delete(t)}_$E_(){const t=new Map,s=this.constructor.elementProperties;for(const i of s.keys())this.hasOwnProperty(i)&&(t.set(i,this[i]),delete this[i]);t.size>0&&(this._$Ep=t)}createRenderRoot(){const t=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return s(t,this.constructor.elementStyles),t}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(t=>t.hostConnected?.())}enableUpdating(t){}disconnectedCallback(){this._$EO?.forEach(t=>t.hostDisconnected?.())}attributeChangedCallback(t,s,i){this._$AK(t,i)}_$ET(t,s){const i=this.constructor.elementProperties.get(t),e=this.constructor._$Eu(t,i);if(void 0!==e&&!0===i.reflect){const h=(void 0!==i.converter?.toAttribute?i.converter:u).toAttribute(s,i.type);this._$Em=t,null==h?this.removeAttribute(e):this.setAttribute(e,h),this._$Em=null}}_$AK(t,s){const i=this.constructor,e=i._$Eh.get(t);if(void 0!==e&&this._$Em!==e){const t=i.getPropertyOptions(e),h=\"function\"==typeof t.converter?{fromAttribute:t.converter}:void 0!==t.converter?.fromAttribute?t.converter:u;this._$Em=e;const r=h.fromAttribute(s,t.type);this[e]=r??this._$Ej?.get(e)??r,this._$Em=null}}requestUpdate(t,s,i,e=!1,h){if(void 0!==t){const r=this.constructor;if(!1===e&&(h=this[t]),i??=r.getPropertyOptions(t),!((i.hasChanged??f)(h,s)||i.useDefault&&i.reflect&&h===this._$Ej?.get(t)&&!this.hasAttribute(r._$Eu(t,i))))return;this.C(t,s,i)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(t,s,{useDefault:i,reflect:e,wrapped:h},r){i&&!(this._$Ej??=new Map).has(t)&&(this._$Ej.set(t,r??s??this[t]),!0!==h||void 0!==r)||(this._$AL.has(t)||(this.hasUpdated||i||(s=void 0),this._$AL.set(t,s)),!0===e&&this._$Em!==t&&(this._$Eq??=new Set).add(t))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(t){Promise.reject(t)}const t=this.scheduleUpdate();return null!=t&&await t,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(const[t,s]of this._$Ep)this[t]=s;this._$Ep=void 0}const t=this.constructor.elementProperties;if(t.size>0)for(const[s,i]of t){const{wrapped:t}=i,e=this[s];!0!==t||this._$AL.has(s)||void 0===e||this.C(s,void 0,i,e)}}let t=!1;const s=this._$AL;try{t=this.shouldUpdate(s),t?(this.willUpdate(s),this._$EO?.forEach(t=>t.hostUpdate?.()),this.update(s)):this._$EM()}catch(s){throw t=!1,this._$EM(),s}t&&this._$AE(s)}willUpdate(t){}_$AE(t){this._$EO?.forEach(t=>t.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(t)),this.updated(t)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(t){return!0}update(t){this._$Eq&&=this._$Eq.forEach(t=>this._$ET(t,this[t])),this._$EM()}updated(t){}firstUpdated(t){}}y.elementStyles=[],y.shadowRootOptions={mode:\"open\"},y[d(\"elementProperties\")]=new Map,y[d(\"finalized\")]=new Map,p?.({ReactiveElement:y}),(a.reactiveElementVersions??=[]).push(\"2.1.2\");export{y as ReactiveElement,s as adoptStyles,u as defaultConverter,t as getCompatibleStyle,f as notEqual};\n//# sourceMappingURL=reactive-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=globalThis,i=t=>t,s=t.trustedTypes,e=s?s.createPolicy(\"lit-html\",{createHTML:t=>t}):void 0,h=\"$lit$\",o=`lit$${Math.random().toFixed(9).slice(2)}$`,n=\"?\"+o,r=`<${n}>`,l=document,c=()=>l.createComment(\"\"),a=t=>null===t||\"object\"!=typeof t&&\"function\"!=typeof t,u=Array.isArray,d=t=>u(t)||\"function\"==typeof t?.[Symbol.iterator],f=\"[ \\t\\n\\f\\r]\",v=/<(?:(!--|\\/[^a-zA-Z])|(\\/?[a-zA-Z][^>\\s]*)|(\\/?$))/g,_=/-->/g,m=/>/g,p=RegExp(`>|${f}(?:([^\\\\s\"'>=/]+)(${f}*=${f}*(?:[^ \\t\\n\\f\\r\"'\\`<>=]|(\"|')|))|$)`,\"g\"),g=/'/g,$=/\"/g,y=/^(?:script|style|textarea|title)$/i,x=t=>(i,...s)=>({_$litType$:t,strings:i,values:s}),b=x(1),w=x(2),T=x(3),E=Symbol.for(\"lit-noChange\"),A=Symbol.for(\"lit-nothing\"),C=new WeakMap,P=l.createTreeWalker(l,129);function V(t,i){if(!u(t)||!t.hasOwnProperty(\"raw\"))throw Error(\"invalid template strings array\");return void 0!==e?e.createHTML(i):i}const N=(t,i)=>{const s=t.length-1,e=[];let n,l=2===i?\"<svg>\":3===i?\"<math>\":\"\",c=v;for(let i=0;i<s;i++){const s=t[i];let a,u,d=-1,f=0;for(;f<s.length&&(c.lastIndex=f,u=c.exec(s),null!==u);)f=c.lastIndex,c===v?\"!--\"===u[1]?c=_:void 0!==u[1]?c=m:void 0!==u[2]?(y.test(u[2])&&(n=RegExp(\"</\"+u[2],\"g\")),c=p):void 0!==u[3]&&(c=p):c===p?\">\"===u[0]?(c=n??v,d=-1):void 0===u[1]?d=-2:(d=c.lastIndex-u[2].length,a=u[1],c=void 0===u[3]?p:'\"'===u[3]?$:g):c===$||c===g?c=p:c===_||c===m?c=v:(c=p,n=void 0);const x=c===p&&t[i+1].startsWith(\"/>\")?\" \":\"\";l+=c===v?s+r:d>=0?(e.push(a),s.slice(0,d)+h+s.slice(d)+o+x):s+o+(-2===d?i:x)}return[V(t,l+(t[s]||\"<?>\")+(2===i?\"</svg>\":3===i?\"</math>\":\"\")),e]};class S{constructor({strings:t,_$litType$:i},e){let r;this.parts=[];let l=0,a=0;const u=t.length-1,d=this.parts,[f,v]=N(t,i);if(this.el=S.createElement(f,e),P.currentNode=this.el.content,2===i||3===i){const t=this.el.content.firstChild;t.replaceWith(...t.childNodes)}for(;null!==(r=P.nextNode())&&d.length<u;){if(1===r.nodeType){if(r.hasAttributes())for(const t of r.getAttributeNames())if(t.endsWith(h)){const i=v[a++],s=r.getAttribute(t).split(o),e=/([.?@])?(.*)/.exec(i);d.push({type:1,index:l,name:e[2],strings:s,ctor:\".\"===e[1]?I:\"?\"===e[1]?L:\"@\"===e[1]?z:H}),r.removeAttribute(t)}else t.startsWith(o)&&(d.push({type:6,index:l}),r.removeAttribute(t));if(y.test(r.tagName)){const t=r.textContent.split(o),i=t.length-1;if(i>0){r.textContent=s?s.emptyScript:\"\";for(let s=0;s<i;s++)r.append(t[s],c()),P.nextNode(),d.push({type:2,index:++l});r.append(t[i],c())}}}else if(8===r.nodeType)if(r.data===n)d.push({type:2,index:l});else{let t=-1;for(;-1!==(t=r.data.indexOf(o,t+1));)d.push({type:7,index:l}),t+=o.length-1}l++}}static createElement(t,i){const s=l.createElement(\"template\");return s.innerHTML=t,s}}function M(t,i,s=t,e){if(i===E)return i;let h=void 0!==e?s._$Co?.[e]:s._$Cl;const o=a(i)?void 0:i._$litDirective$;return h?.constructor!==o&&(h?._$AO?.(!1),void 0===o?h=void 0:(h=new o(t),h._$AT(t,s,e)),void 0!==e?(s._$Co??=[])[e]=h:s._$Cl=h),void 0!==h&&(i=M(t,h._$AS(t,i.values),h,e)),i}class R{constructor(t,i){this._$AV=[],this._$AN=void 0,this._$AD=t,this._$AM=i}get parentNode(){return this._$AM.parentNode}get _$AU(){return this._$AM._$AU}u(t){const{el:{content:i},parts:s}=this._$AD,e=(t?.creationScope??l).importNode(i,!0);P.currentNode=e;let h=P.nextNode(),o=0,n=0,r=s[0];for(;void 0!==r;){if(o===r.index){let i;2===r.type?i=new k(h,h.nextSibling,this,t):1===r.type?i=new r.ctor(h,r.name,r.strings,this,t):6===r.type&&(i=new Z(h,this,t)),this._$AV.push(i),r=s[++n]}o!==r?.index&&(h=P.nextNode(),o++)}return P.currentNode=l,e}p(t){let i=0;for(const s of this._$AV)void 0!==s&&(void 0!==s.strings?(s._$AI(t,s,i),i+=s.strings.length-2):s._$AI(t[i])),i++}}class k{get _$AU(){return this._$AM?._$AU??this._$Cv}constructor(t,i,s,e){this.type=2,this._$AH=A,this._$AN=void 0,this._$AA=t,this._$AB=i,this._$AM=s,this.options=e,this._$Cv=e?.isConnected??!0}get parentNode(){let t=this._$AA.parentNode;const i=this._$AM;return void 0!==i&&11===t?.nodeType&&(t=i.parentNode),t}get startNode(){return this._$AA}get endNode(){return this._$AB}_$AI(t,i=this){t=M(this,t,i),a(t)?t===A||null==t||\"\"===t?(this._$AH!==A&&this._$AR(),this._$AH=A):t!==this._$AH&&t!==E&&this._(t):void 0!==t._$litType$?this.$(t):void 0!==t.nodeType?this.T(t):d(t)?this.k(t):this._(t)}O(t){return this._$AA.parentNode.insertBefore(t,this._$AB)}T(t){this._$AH!==t&&(this._$AR(),this._$AH=this.O(t))}_(t){this._$AH!==A&&a(this._$AH)?this._$AA.nextSibling.data=t:this.T(l.createTextNode(t)),this._$AH=t}$(t){const{values:i,_$litType$:s}=t,e=\"number\"==typeof s?this._$AC(t):(void 0===s.el&&(s.el=S.createElement(V(s.h,s.h[0]),this.options)),s);if(this._$AH?._$AD===e)this._$AH.p(i);else{const t=new R(e,this),s=t.u(this.options);t.p(i),this.T(s),this._$AH=t}}_$AC(t){let i=C.get(t.strings);return void 0===i&&C.set(t.strings,i=new S(t)),i}k(t){u(this._$AH)||(this._$AH=[],this._$AR());const i=this._$AH;let s,e=0;for(const h of t)e===i.length?i.push(s=new k(this.O(c()),this.O(c()),this,this.options)):s=i[e],s._$AI(h),e++;e<i.length&&(this._$AR(s&&s._$AB.nextSibling,e),i.length=e)}_$AR(t=this._$AA.nextSibling,s){for(this._$AP?.(!1,!0,s);t!==this._$AB;){const s=i(t).nextSibling;i(t).remove(),t=s}}setConnected(t){void 0===this._$AM&&(this._$Cv=t,this._$AP?.(t))}}class H{get tagName(){return this.element.tagName}get _$AU(){return this._$AM._$AU}constructor(t,i,s,e,h){this.type=1,this._$AH=A,this._$AN=void 0,this.element=t,this.name=i,this._$AM=e,this.options=h,s.length>2||\"\"!==s[0]||\"\"!==s[1]?(this._$AH=Array(s.length-1).fill(new String),this.strings=s):this._$AH=A}_$AI(t,i=this,s,e){const h=this.strings;let o=!1;if(void 0===h)t=M(this,t,i,0),o=!a(t)||t!==this._$AH&&t!==E,o&&(this._$AH=t);else{const e=t;let n,r;for(t=h[0],n=0;n<h.length-1;n++)r=M(this,e[s+n],i,n),r===E&&(r=this._$AH[n]),o||=!a(r)||r!==this._$AH[n],r===A?t=A:t!==A&&(t+=(r??\"\")+h[n+1]),this._$AH[n]=r}o&&!e&&this.j(t)}j(t){t===A?this.element.removeAttribute(this.name):this.element.setAttribute(this.name,t??\"\")}}class I extends H{constructor(){super(...arguments),this.type=3}j(t){this.element[this.name]=t===A?void 0:t}}class L extends H{constructor(){super(...arguments),this.type=4}j(t){this.element.toggleAttribute(this.name,!!t&&t!==A)}}class z extends H{constructor(t,i,s,e,h){super(t,i,s,e,h),this.type=5}_$AI(t,i=this){if((t=M(this,t,i,0)??A)===E)return;const s=this._$AH,e=t===A&&s!==A||t.capture!==s.capture||t.once!==s.once||t.passive!==s.passive,h=t!==A&&(s===A||e);e&&this.element.removeEventListener(this.name,this,s),h&&this.element.addEventListener(this.name,this,t),this._$AH=t}handleEvent(t){\"function\"==typeof this._$AH?this._$AH.call(this.options?.host??this.element,t):this._$AH.handleEvent(t)}}class Z{constructor(t,i,s){this.element=t,this.type=6,this._$AN=void 0,this._$AM=i,this.options=s}get _$AU(){return this._$AM._$AU}_$AI(t){M(this,t)}}const j={M:h,P:o,A:n,C:1,L:N,R,D:d,V:M,I:k,H,N:L,U:z,B:I,F:Z},B=t.litHtmlPolyfillSupport;B?.(S,k),(t.litHtmlVersions??=[]).push(\"3.3.2\");const D=(t,i,s)=>{const e=s?.renderBefore??i;let h=e._$litPart$;if(void 0===h){const t=s?.renderBefore??null;e._$litPart$=h=new k(i.insertBefore(c(),t),t,void 0,s??{})}return h._$AI(t),h};export{j as _$LH,b as html,T as mathml,E as noChange,A as nothing,D as render,w as svg};\n//# sourceMappingURL=lit-html.js.map\n","import{ReactiveElement as t}from\"@lit/reactive-element\";export*from\"@lit/reactive-element\";import{render as e,noChange as r}from\"lit-html\";export*from\"lit-html\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const s=globalThis;class i extends t{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){const t=super.createRenderRoot();return this.renderOptions.renderBefore??=t.firstChild,t}update(t){const r=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(t),this._$Do=e(r,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return r}}i._$litElement$=!0,i[\"finalized\"]=!0,s.litElementHydrateSupport?.({LitElement:i});const o=s.litElementPolyfillSupport;o?.({LitElement:i});const n={_$AK:(t,e,r)=>{t._$AK(e,r)},_$AL:t=>t._$AL};(s.litElementVersions??=[]).push(\"4.2.2\");export{i as LitElement,n as _$LE};\n//# sourceMappingURL=lit-element.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t=t=>(e,o)=>{void 0!==o?o.addInitializer(()=>{customElements.define(t,e)}):customElements.define(t,e)};export{t as customElement};\n//# sourceMappingURL=custom-element.js.map\n","import{notEqual as t,defaultConverter as e}from\"../reactive-element.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */const o={attribute:!0,type:String,converter:e,reflect:!1,hasChanged:t},r=(t=o,e,r)=>{const{kind:n,metadata:i}=r;let s=globalThis.litPropertyMetadata.get(i);if(void 0===s&&globalThis.litPropertyMetadata.set(i,s=new Map),\"setter\"===n&&((t=Object.create(t)).wrapped=!0),s.set(r.name,t),\"accessor\"===n){const{name:o}=r;return{set(r){const n=e.get.call(this);e.set.call(this,r),this.requestUpdate(o,n,t,!0,r)},init(e){return void 0!==e&&this.C(o,void 0,t,e),e}}}if(\"setter\"===n){const{name:o}=r;return function(r){const n=this[o];e.call(this,r),this.requestUpdate(o,n,t,!0,r)}}throw Error(\"Unsupported decorator location: \"+n)};function n(t){return(e,o)=>\"object\"==typeof o?r(t,e,o):((t,e,o)=>{const r=e.hasOwnProperty(o);return e.constructor.createProperty(o,t),r?Object.getOwnPropertyDescriptor(e,o):void 0})(t,e,o)}export{n as property,r as standardProperty};\n//# sourceMappingURL=property.js.map\n","import{property as t}from\"./property.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function r(r){return t({...r,state:!0,attribute:!1})}export{r as state};\n//# sourceMappingURL=state.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst e=(e,t,c)=>(c.configurable=!0,c.enumerable=!0,Reflect.decorate&&\"object\"!=typeof t&&Object.defineProperty(e,t,c),c);export{e as desc};\n//# sourceMappingURL=base.js.map\n","import{desc as t}from\"./base.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */function e(e,r){return(n,s,i)=>{const o=t=>t.renderRoot?.querySelector(e)??null;if(r){const{get:e,set:r}=\"object\"==typeof s?n:i??(()=>{const t=Symbol();return{get(){return this[t]},set(e){this[t]=e}}})();return t(n,s,{get(){let t=e.call(this);return void 0===t&&(t=o(this),(null!==t||this.hasUpdated)&&r.call(this,t)),t}})}return t(n,s,{get(){return o(this)}})}}export{e as query};\n//# sourceMappingURL=query.js.map\n","/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nconst t={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},e=t=>(...e)=>({_$litDirective$:t,values:e});class i{constructor(t){}get _$AU(){return this._$AM._$AU}_$AT(t,e,i){this._$Ct=t,this._$AM=e,this._$Ci=i}_$AS(t,e){return this.update(t,e)}update(t,e){return this.render(...e)}}export{i as Directive,t as PartType,e as directive};\n//# sourceMappingURL=directive.js.map\n","import{nothing as t,noChange as i}from\"../lit-html.js\";import{directive as r,Directive as s,PartType as n}from\"../directive.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends s{constructor(i){if(super(i),this.it=t,i.type!==n.CHILD)throw Error(this.constructor.directiveName+\"() can only be used in child bindings\")}render(r){if(r===t||null==r)return this._t=void 0,this.it=r;if(r===i)return r;if(\"string\"!=typeof r)throw Error(this.constructor.directiveName+\"() called with a non-string value\");if(r===this.it)return this._t;this.it=r;const s=[r];return s.raw=s,this._t={_$litType$:this.constructor.resultType,strings:s,values:[]}}}e.directiveName=\"unsafeHTML\",e.resultType=1;const o=r(e);export{e as UnsafeHTMLDirective,o as unsafeHTML};\n//# sourceMappingURL=unsafe-html.js.map\n","import{directive as s}from\"../directive.js\";import{UnsafeHTMLDirective as e}from\"./unsafe-html.js\";\n/**\n * @license\n * Copyright 2017 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class t extends e{}t.directiveName=\"unsafeSVG\",t.resultType=2;const o=s(t);export{o as unsafeSVG};\n//# sourceMappingURL=unsafe-svg.js.map\n","/**\n * SCADA Runtime Engine\n *\n * Implements a ThingsBoard-compatible SVG runtime that executes\n * stateRenderFunction / actionFunction JS strings from SCADA SVG metadata.\n *\n * Provides: ScadaElement (SVG.js-like wrapper), ctx API (animations,\n * text/value formatting, color processors, actions), and the execution engine.\n */\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SymbolMetadata {\n title: string\n description: string\n stateRenderFunction?: string | null\n tags: TagDef[]\n behavior: BehaviorDef[]\n properties: PropertyDef[]\n}\n\nexport interface TagDef {\n tag: string\n stateRenderFunction: string | null\n actions: Record<string, { actionFunction: string }> | null\n}\n\nexport interface BehaviorDef {\n id: string\n name: string\n type: 'value' | 'action' | 'widgetAction'\n valueType: string\n}\n\nexport interface PropertyDef {\n id: string\n name: string\n type: string\n default: any\n disableOnProperty?: string\n}\n\nexport interface FontDef {\n size: number\n sizeUnit: string\n family: string\n weight: string\n style: string\n}\n\nexport interface ColorSettings {\n type: 'constant' | 'gradient' | 'range' | 'function'\n color: string\n gradient?: {\n advancedMode: boolean\n gradient: string[]\n minValue: number\n maxValue: number\n }\n rangeList?: {\n advancedMode: boolean\n range: Array<{ from: number; to: number; color: string }>\n }\n}\n\n// ---------------------------------------------------------------------------\n// Per-element state storage (WeakMap so GC can reclaim)\n// ---------------------------------------------------------------------------\n\nconst elementMemory = new WeakMap<Element, Map<string, any>>()\n\nfunction getMemory(el: Element): Map<string, any> {\n let m = elementMemory.get(el)\n if (!m) {\n m = new Map()\n elementMemory.set(el, m)\n }\n return m\n}\n\n// ---------------------------------------------------------------------------\n// Animation tracking\n// ---------------------------------------------------------------------------\n\nconst elementAnimations = new WeakMap<Element, AnimationRunner>()\nconst connectorAnimations = new WeakMap<Element, ConnectorAnimationRunner>()\n\n/**\n * Connector flow animation — animates dashes along an SVG path to simulate\n * fluid flow in pipe/connector symbols.\n */\nclass ConnectorAnimationRunner {\n private container: Element\n private forwardPath: string\n private reversedPath: string\n private pathEl: SVGPathElement | null = null\n private lineWidth: number = 2\n private lineColor: string = '#fff'\n private dashCap: string = 'round'\n private dashWidth: number = 10\n private dashGap: number = 10\n private dur: number = 1 // seconds\n private dir: string = 'forward'\n private rafId: number = 0\n private rafActive: boolean = false\n private rafLastTime: number = 0\n private offset: number = 0\n\n constructor(container: Element, forwardPath: string, reversedPath: string) {\n this.container = container\n this.forwardPath = forwardPath\n this.reversedPath = reversedPath\n }\n\n flowAppearance(\n lineWidth: number,\n lineColor: string,\n dashCap: string,\n dashWidth: number,\n dashGap: number\n ): ConnectorAnimationRunner {\n this.lineWidth = lineWidth ?? 2\n this.lineColor = lineColor ?? '#fff'\n this.dashCap = dashCap ?? 'round'\n this.dashWidth = dashWidth ?? 10\n this.dashGap = dashGap ?? 10\n this.updatePathStyle()\n return this\n }\n\n duration(d: number): ConnectorAnimationRunner {\n this.dur = typeof d === 'number' && isFinite(d) && d > 0 ? d : 1\n return this\n }\n\n direction(dir: string): ConnectorAnimationRunner {\n this.dir = dir\n this.updatePathD()\n return this\n }\n\n play(): ConnectorAnimationRunner {\n this.ensurePath()\n if (!this.rafActive) {\n this.rafActive = true\n this.rafLastTime = 0\n this.rafId = requestAnimationFrame(this.tick)\n }\n return this\n }\n\n finish(): void {\n this.cancelRaf()\n if (this.pathEl && this.pathEl.parentNode) {\n this.pathEl.parentNode.removeChild(this.pathEl)\n }\n this.pathEl = null\n connectorAnimations.delete(this.container)\n }\n\n private tick = (now: number): void => {\n if (!this.rafActive) return\n if (!this.rafLastTime) this.rafLastTime = now\n const dt = (now - this.rafLastTime) / 1000\n this.rafLastTime = now\n\n const cycleLength = this.dashWidth + this.dashGap\n // Speed: traverse one dash+gap cycle per `this.dur` seconds\n this.offset += (cycleLength / this.dur) * dt\n if (this.offset > cycleLength) this.offset -= cycleLength\n\n if (this.pathEl) {\n this.pathEl.style.strokeDashoffset = String(-this.offset)\n }\n this.rafId = requestAnimationFrame(this.tick)\n }\n\n private ensurePath(): void {\n if (this.pathEl) return\n const ns = 'http://www.w3.org/2000/svg'\n this.pathEl = document.createElementNS(ns, 'path')\n this.updatePathD()\n this.updatePathStyle()\n this.container.appendChild(this.pathEl)\n }\n\n private updatePathD(): void {\n if (!this.pathEl) return\n const d = this.dir === 'reverse' ? this.reversedPath : this.forwardPath\n this.pathEl.setAttribute('d', d)\n }\n\n private updatePathStyle(): void {\n if (!this.pathEl) return\n this.pathEl.setAttribute('fill', 'none')\n this.pathEl.setAttribute('stroke', this.lineColor)\n this.pathEl.setAttribute('stroke-width', String(this.lineWidth))\n this.pathEl.setAttribute('stroke-linecap', this.dashCap)\n this.pathEl.style.strokeDasharray = `${this.dashWidth} ${this.dashGap}`\n }\n\n private cancelRaf(): void {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = 0\n }\n this.rafActive = false\n }\n}\n\n// ---------------------------------------------------------------------------\n// Material Symbols font loader (injected once into document)\n// ---------------------------------------------------------------------------\nlet materialFontLoaded = false\nfunction ensureMaterialSymbolsFont(): void {\n if (materialFontLoaded) return\n materialFontLoaded = true\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href =\n 'https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200'\n document.head.appendChild(link)\n}\n\nclass AnimationRunner {\n private el: Element\n private duration: number\n private anim: Animation | null = null\n private keyframes: Keyframe[] = []\n private loopCount: number = 1\n private loopBounce: boolean = false\n private playbackSpeed: number = 1\n private easingType: string = 'ease'\n\n // rAF-based animation for SVG transforms (pattern flow & rotation)\n private rafId: number = 0\n private rafActive: boolean = false\n private rafPaused: boolean = false\n private rafLastTime: number = 0\n private rafElapsed: number = 0\n private rafTick: ((now: number) => void) | null = null\n private rafPatternEl: Element | null = null\n private rafOriginalTransform: string = ''\n\n constructor(el: Element, duration: number) {\n this.el = el\n this.duration = duration\n }\n\n /** Animate element by a relative offset (dx, dy). Used by pipe flow animations. */\n relative(dx: number, dy: number): AnimationRunner {\n const safeDx = typeof dx === 'number' && isFinite(dx) ? dx : 0\n const safeDy = typeof dy === 'number' && isFinite(dy) ? dy : 0\n\n // For elements inside SVG <pattern>, CSS transforms shift the entire\n // tile (including pipe borders). Use patternTransform via rAF instead.\n const parent = this.el.parentElement\n if (parent?.nodeName?.toLowerCase() === 'pattern') {\n this.cancelRaf()\n this.rafPatternEl = parent\n this.rafOriginalTransform = parent.getAttribute('patternTransform') || ''\n this.rafActive = true\n this.rafPaused = false\n this.rafElapsed = 0\n this.rafLastTime = 0\n\n const baseTransform = this.rafOriginalTransform ? `${this.rafOriginalTransform} ` : ''\n this.rafTick = (now: number) => {\n if (!this.rafActive || this.rafPaused) return\n if (!this.rafLastTime) this.rafLastTime = now\n this.rafElapsed += (now - this.rafLastTime) * this.playbackSpeed\n this.rafLastTime = now\n\n const progress = (this.rafElapsed % this.duration) / this.duration\n this.rafPatternEl!.setAttribute(\n 'patternTransform',\n `${baseTransform}translate(${safeDx * progress}, ${safeDy * progress})`\n )\n this.rafId = requestAnimationFrame(this.rafTick!)\n }\n this.rafId = requestAnimationFrame(this.rafTick)\n } else {\n // Non-pattern element: use CSS keyframe animation\n this.keyframes = [\n { transform: 'translate(0, 0)' },\n { transform: `translate(${safeDx}px, ${safeDy}px)` }\n ]\n this.easingType = 'linear'\n this.commit()\n }\n return this\n }\n\n attr(attrs: Record<string, any>): AnimationRunner {\n // SVG geometric attributes (height, width, x, y, cx, cy, r, rx, ry)\n // cannot be animated via Web Animations API keyframes reliably.\n // Set them directly with a CSS transition for smooth animation.\n // CSS-animatable properties (opacity, fill, stroke, etc.) use keyframes.\n const SVG_GEOM = new Set(['height', 'width', 'x', 'y', 'cx', 'cy', 'r', 'rx', 'ry'])\n const startFrame: Keyframe = {}\n const endFrame: Keyframe = {}\n let hasKeyframes = false\n\n for (const [key, val] of Object.entries(attrs)) {\n const safeVal = typeof val === 'number' && !isFinite(val) ? 0 : val\n if (SVG_GEOM.has(key)) {\n ;(this.el as SVGElement).style.transition = `all ${this.duration}ms ease`\n this.el.setAttribute(key, String(safeVal))\n } else {\n const computed = getComputedStyle(this.el as HTMLElement)\n const current = computed.getPropertyValue(key) || this.el.getAttribute(key) || ''\n startFrame[key] = current\n endFrame[key] = safeVal\n hasKeyframes = true\n }\n }\n if (hasKeyframes) {\n this.keyframes = [startFrame, endFrame]\n this.easingType = 'linear'\n }\n return this\n }\n\n transform(t: Record<string, any>): AnimationRunner {\n const parts: string[] = []\n const n = (v: any) => (typeof v === 'number' && !isFinite(v) ? 0 : (v ?? 0))\n if (t.translateX !== undefined || t.translateY !== undefined) {\n parts.push(`translate(${n(t.translateX)}, ${n(t.translateY)})`)\n }\n if (t.rotate !== undefined) {\n // Default unspecified origin axes to element bbox center (SVG.js compat)\n const bbox = (this.el as SVGGraphicsElement).getBBox?.()\n const ox = t.originX !== undefined ? n(t.originX) : bbox ? bbox.x + bbox.width / 2 : 0\n const oy = t.originY !== undefined ? n(t.originY) : bbox ? bbox.y + bbox.height / 2 : 0\n parts.push(`rotate(${n(t.rotate)}, ${ox}, ${oy})`)\n }\n if (t.scale !== undefined) {\n parts.push(`scale(${n(t.scale)})`)\n }\n if (parts.length > 0) {\n // For pattern elements, set patternTransform; otherwise set transform attribute\n const tagName = this.el.nodeName?.toLowerCase()\n if (tagName === 'pattern') {\n this.el.setAttribute('patternTransform', parts.join(' '))\n } else {\n this.el.setAttribute('transform', parts.join(' '))\n }\n }\n return this\n }\n\n rotate(deg: number): AnimationRunner {\n // Use rAF-based animation that composes rotation into the existing\n // SVG transform attribute. CSS animations would override the SVG\n // transform (e.g. translate) causing the element to shift position.\n const existingTransform = this.el.getAttribute('transform') || ''\n this.cancelRaf()\n this.rafOriginalTransform = existingTransform\n\n // Calculate rotation center from the element's bounding box\n const bbox = (this.el as SVGGraphicsElement).getBBox?.()\n const cx = bbox ? bbox.x + bbox.width / 2 : 0\n const cy = bbox ? bbox.y + bbox.height / 2 : 0\n\n this.rafActive = true\n this.rafPaused = false\n this.rafElapsed = 0\n this.rafLastTime = 0\n\n this.rafTick = (now: number) => {\n if (!this.rafActive || this.rafPaused) return\n if (!this.rafLastTime) this.rafLastTime = now\n this.rafElapsed += (now - this.rafLastTime) * this.playbackSpeed\n this.rafLastTime = now\n\n const progress = (this.rafElapsed % this.duration) / this.duration\n const currentDeg = deg * progress\n this.el.setAttribute('transform', `${existingTransform} rotate(${currentDeg}, ${cx}, ${cy})`)\n this.rafId = requestAnimationFrame(this.rafTick!)\n }\n this.rafId = requestAnimationFrame(this.rafTick)\n return this\n }\n\n ease(easing: string): AnimationRunner {\n this.easingType = easing\n return this\n }\n\n loop(count?: number, bounce?: boolean): AnimationRunner {\n this.loopCount = count === 0 ? Infinity : (count ?? Infinity)\n this.loopBounce = bounce ?? false\n // In rAF mode the animation already loops; only commit for CSS animations\n if (!this.rafActive) this.commit()\n return this\n }\n\n speed(s: number): AnimationRunner {\n this.playbackSpeed = s\n if (this.anim) this.anim.playbackRate = s\n // rAF mode reads playbackSpeed each frame automatically\n return this\n }\n\n play(): AnimationRunner {\n if (this.rafActive && this.rafPaused) {\n this.rafPaused = false\n this.rafLastTime = 0\n if (this.rafTick) this.rafId = requestAnimationFrame(this.rafTick)\n }\n if (this.anim) this.anim.play()\n return this\n }\n\n pause(): AnimationRunner {\n if (this.rafActive) {\n this.rafPaused = true\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = 0\n }\n }\n if (this.anim) this.anim.pause()\n return this\n }\n\n cancel(): void {\n if (this.anim) {\n this.anim.cancel()\n this.anim = null\n }\n this.cancelRaf()\n ;(this.el as SVGElement).style.transition = ''\n }\n\n finish(): void {\n if (this.anim) {\n this.anim.finish()\n this.anim = null\n }\n this.cancelRaf()\n }\n\n private cancelRaf() {\n if (this.rafId) {\n cancelAnimationFrame(this.rafId)\n this.rafId = 0\n }\n this.rafActive = false\n this.rafTick = null\n if (this.rafPatternEl) {\n if (this.rafOriginalTransform) {\n this.rafPatternEl.setAttribute('patternTransform', this.rafOriginalTransform)\n } else {\n this.rafPatternEl.removeAttribute('patternTransform')\n }\n this.rafPatternEl = null\n this.rafOriginalTransform = ''\n } else if (this.rafOriginalTransform) {\n // Restore original SVG transform for rotation animations\n this.el.setAttribute('transform', this.rafOriginalTransform)\n this.rafOriginalTransform = ''\n }\n }\n\n private commit() {\n if (this.keyframes.length === 0) return\n\n // Cancel previous animation if any\n if (this.anim) this.anim.cancel()\n\n try {\n this.anim = this.el.animate(this.keyframes, {\n duration: this.duration,\n iterations: this.loopCount,\n direction: this.loopBounce ? 'alternate' : 'normal',\n fill: 'forwards',\n easing: this.easingType\n })\n this.anim.playbackRate = this.playbackSpeed\n } catch {\n // Some SVG elements don't support Web Animations\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// ScadaElement — SVG.js-compatible wrapper for SVGElement\n// ---------------------------------------------------------------------------\n\nexport class ScadaElement {\n private el: Element\n\n constructor(el: Element) {\n this.el = el\n }\n\n /** Sanitize a value for SVG attributes: coerce NaN/Infinity to 0 */\n private safe(v: any): any {\n return typeof v === 'number' && !isFinite(v) ? 0 : v\n }\n\n /** Get or set attributes. With object: set multiple. With string: get one. */\n attr(attrsOrKey?: Record<string, any> | string, val?: any): any {\n if (typeof attrsOrKey === 'string') {\n if (val !== undefined) {\n this.el.setAttribute(attrsOrKey, String(this.safe(val)))\n return this\n }\n return this.el.getAttribute(attrsOrKey)\n }\n if (attrsOrKey) {\n for (const [k, v] of Object.entries(attrsOrKey)) {\n this.el.setAttribute(k, String(this.safe(v)))\n }\n }\n return this\n }\n\n fill(color: string): ScadaElement {\n this.el.setAttribute('fill', color)\n return this\n }\n\n stroke(opts: Record<string, any> | string): ScadaElement {\n if (typeof opts === 'string') {\n this.el.setAttribute('stroke', opts)\n } else {\n if (opts.color) this.el.setAttribute('stroke', opts.color)\n if (opts.width !== undefined) this.el.setAttribute('stroke-width', String(this.safe(opts.width)))\n if (opts.dasharray) this.el.setAttribute('stroke-dasharray', opts.dasharray)\n }\n return this\n }\n\n show(): ScadaElement {\n ;(this.el as SVGElement).style.display = ''\n ;(this.el as SVGElement).style.visibility = 'visible'\n return this\n }\n\n hide(): ScadaElement {\n ;(this.el as SVGElement).style.display = 'none'\n return this\n }\n\n transform(t: Record<string, any>): ScadaElement {\n const n = (v: any) => (typeof v === 'number' && !isFinite(v) ? 0 : (v ?? 0))\n const parts: string[] = []\n if (t.translateX !== undefined || t.translateY !== undefined) {\n parts.push(`translate(${n(t.translateX)}, ${n(t.translateY)})`)\n }\n if (t.rotate !== undefined) {\n // Default unspecified origin axes to element bbox center (SVG.js compat)\n const bbox = (this.el as SVGGraphicsElement).getBBox?.()\n const ox = t.originX !== undefined ? n(t.originX) : bbox ? bbox.x + bbox.width / 2 : 0\n const oy = t.originY !== undefined ? n(t.originY) : bbox ? bbox.y + bbox.height / 2 : 0\n parts.push(`rotate(${n(t.rotate)}, ${ox}, ${oy})`)\n }\n if (t.scale !== undefined) {\n parts.push(`scale(${n(t.scale)})`)\n }\n if (parts.length > 0) {\n const tagName = this.el.nodeName?.toLowerCase()\n if (tagName === 'pattern') {\n this.el.setAttribute('patternTransform', parts.join(' '))\n } else {\n this.el.setAttribute('transform', parts.join(' '))\n }\n }\n return this\n }\n\n /** Store or retrieve per-element state */\n remember(key: string, value?: any): any {\n const mem = getMemory(this.el)\n if (value !== undefined) {\n mem.set(key, value)\n return this\n }\n return mem.get(key)\n }\n\n /** Query children */\n find(selector: string): ScadaElement[] {\n return Array.from(this.el.querySelectorAll(selector)).map((e) => new ScadaElement(e))\n }\n\n /** Query first matching child */\n findOne(selector: string): ScadaElement | null {\n const el = this.el.querySelector(selector)\n return el ? new ScadaElement(el) : null\n }\n\n /** First child element */\n first(): ScadaElement {\n const fc = this.el.firstElementChild\n return fc ? new ScadaElement(fc) : this\n }\n\n /** Remove all children */\n clear(): ScadaElement {\n while (this.el.firstChild) this.el.removeChild(this.el.firstChild)\n return this\n }\n\n /** Append child (accepts ScadaElement or raw Element) */\n add(child: ScadaElement | Element): ScadaElement {\n const node = child instanceof ScadaElement ? child.native : child\n this.el.appendChild(node)\n return this\n }\n\n /** Get referenced element from an attribute (e.g., fill url(#id)) */\n reference(attrName: string): ScadaElement {\n const val = this.el.getAttribute(attrName)\n if (val) {\n const idMatch = val.match(/url\\(#([^)]+)\\)/)\n if (idMatch) {\n // Use getRootNode() so IDs inside shadow DOM (Lit) are found\n const root = this.el.getRootNode() as Document | ShadowRoot\n const ref = root.getElementById(idMatch[1])\n if (ref) return new ScadaElement(ref)\n }\n }\n return this\n }\n\n /** ForEach for SVG.js compatibility when used on collections */\n forEach(fn: (el: ScadaElement, i: number) => void): void {\n fn(this, 0)\n }\n\n /** Get bounding box width */\n width(): number {\n return (this.el as SVGGraphicsElement).getBBox?.()?.width ?? 0\n }\n\n /** Get bounding box height */\n height(): number {\n return (this.el as SVGGraphicsElement).getBBox?.()?.height ?? 0\n }\n\n /** Get child elements as ScadaElement array */\n children(): ScadaElement[] {\n return Array.from(this.el.children).map((e) => new ScadaElement(e))\n }\n\n addClass(name: string): ScadaElement {\n this.el.classList.add(name)\n return this\n }\n\n removeClass(name: string): ScadaElement {\n this.el.classList.remove(name)\n return this\n }\n\n hasClass(name: string): boolean {\n return this.el.classList.contains(name)\n }\n\n css(prop: string | Record<string, any>, val?: any): ScadaElement {\n const style = (this.el as SVGElement | HTMLElement).style\n if (typeof prop === 'string') {\n style.setProperty(prop, val == null ? '' : String(val))\n } else if (prop) {\n for (const [k, v] of Object.entries(prop)) {\n style.setProperty(k, v == null ? '' : String(v))\n }\n }\n return this\n }\n\n translate(x: number, y: number): ScadaElement {\n const n = (v: any) => (typeof v === 'number' && !isFinite(v) ? 0 : (v ?? 0))\n const tagName = this.el.nodeName?.toLowerCase()\n const attr = tagName === 'pattern' ? 'patternTransform' : 'transform'\n this.el.setAttribute(attr, `translate(${n(x)}, ${n(y)})`)\n return this\n }\n\n click(handler: (event: Event) => void): ScadaElement {\n this.el.addEventListener('click', handler)\n return this\n }\n\n clone(): ScadaElement {\n return new ScadaElement(this.el.cloneNode(true) as Element)\n }\n\n /** Get underlying DOM element */\n get native(): Element {\n return this.el\n }\n}\n\n// ---------------------------------------------------------------------------\n// Color Processor — handles color_settings type properties\n// ---------------------------------------------------------------------------\n\nexport class ColorProcessor {\n private settings: ColorSettings\n color: string\n\n constructor(settings: ColorSettings | string) {\n if (typeof settings === 'string') {\n this.settings = { type: 'constant', color: settings }\n this.color = settings\n } else {\n this.settings = settings\n this.color = settings.color ?? '#000000'\n }\n }\n\n update(value: number): void {\n switch (this.settings.type) {\n case 'constant':\n // color stays the same\n break\n case 'gradient': {\n const g = this.settings.gradient\n if (g && g.gradient.length >= 2) {\n const min = g.minValue ?? 0\n const max = g.maxValue ?? 100\n const ratio = Math.max(0, Math.min(1, (value - min) / (max - min || 1)))\n this.color = interpolateColor(g.gradient[0], g.gradient[g.gradient.length - 1], ratio)\n }\n break\n }\n case 'range': {\n const rl = this.settings.rangeList\n if (rl?.range) {\n for (const r of rl.range) {\n if (value >= r.from && value <= r.to) {\n this.color = r.color\n return\n }\n }\n }\n break\n }\n // 'function' mode: skip — requires tinycolor2 + eval\n }\n }\n}\n\nfunction interpolateColor(c1: string, c2: string, ratio: number): string {\n const parse = (c: string) => {\n // Handle rgba(r,g,b,a) or hex\n const rgbaMatch = c.match(/rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)/)\n if (rgbaMatch) return [+rgbaMatch[1], +rgbaMatch[2], +rgbaMatch[3]]\n // hex\n const hex = c.replace('#', '')\n const h =\n hex.length === 3\n ? [\n parseInt(hex[0] + hex[0], 16),\n parseInt(hex[1] + hex[1], 16),\n parseInt(hex[2] + hex[2], 16)\n ]\n : [\n parseInt(hex.slice(0, 2), 16),\n parseInt(hex.slice(2, 4), 16),\n parseInt(hex.slice(4, 6), 16)\n ]\n return h\n }\n const [r1, g1, b1] = parse(c1)\n const [r2, g2, b2] = parse(c2)\n const r = Math.round(r1 + (r2 - r1) * ratio)\n const g = Math.round(g1 + (g2 - g1) * ratio)\n const b = Math.round(b1 + (b2 - b1) * ratio)\n return `rgb(${r},${g},${b})`\n}\n\n// ---------------------------------------------------------------------------\n// SVG Factory — ctx.svg.line(), ctx.svg.text()\n// ---------------------------------------------------------------------------\n\nfunction createSvgFactory(svgEl: SVGSVGElement) {\n const ns = 'http://www.w3.org/2000/svg'\n\n return {\n line(x1: number, y1: number, x2: number, y2: number): ScadaElement {\n const line = document.createElementNS(ns, 'line')\n line.setAttribute('x1', String(x1))\n line.setAttribute('y1', String(y1))\n line.setAttribute('x2', String(x2))\n line.setAttribute('y2', String(y2))\n return new ScadaElement(line)\n },\n\n text(content: string): ScadaElement {\n const text = document.createElementNS(ns, 'text')\n const tspan = document.createElementNS(ns, 'tspan')\n tspan.textContent = content\n text.appendChild(tspan)\n return new ScadaElement(text)\n },\n\n rect(x?: number, y?: number, w?: number, h?: number): ScadaElement {\n const rect = document.createElementNS(ns, 'rect')\n if (x !== undefined) rect.setAttribute('x', String(x))\n if (y !== undefined) rect.setAttribute('y', String(y))\n if (w !== undefined) rect.setAttribute('width', String(w))\n if (h !== undefined) rect.setAttribute('height', String(h))\n return new ScadaElement(rect)\n },\n\n circle(cx?: number, cy?: number, r?: number): ScadaElement {\n const circle = document.createElementNS(ns, 'circle')\n if (cx !== undefined) circle.setAttribute('cx', String(cx))\n if (cy !== undefined) circle.setAttribute('cy', String(cy))\n if (r !== undefined) circle.setAttribute('r', String(r))\n return new ScadaElement(circle)\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Unit helpers\n// ---------------------------------------------------------------------------\n\nconst UNIT_SYMBOLS: Record<string, string> = {\n celsius: '°C',\n fahrenheit: '°F',\n kelvin: 'K',\n liters: 'L',\n gallons: 'gal',\n cubicMeters: 'm³',\n cubicFeet: 'ft³',\n milliliters: 'mL',\n barrels: 'bbl',\n watts: 'W',\n kilowatts: 'kW',\n megawatts: 'MW',\n horsepower: 'hp',\n wattHours: 'Wh',\n kilowattHours: 'kWh',\n megawattHours: 'MWh',\n volts: 'V',\n millivolts: 'mV',\n kilovolts: 'kV',\n amperes: 'A',\n milliamperes: 'mA',\n hertz: 'Hz',\n kilohertz: 'kHz',\n psi: 'psi',\n bar: 'bar',\n pascal: 'Pa',\n kilopascal: 'kPa',\n atm: 'atm',\n meters: 'm',\n centimeters: 'cm',\n millimeters: 'mm',\n kilometers: 'km',\n feet: 'ft',\n inches: 'in',\n yards: 'yd',\n metersPerSecond: 'm/s',\n kilometersPerHour: 'km/h',\n milesPerHour: 'mph',\n kilograms: 'kg',\n grams: 'g',\n pounds: 'lb',\n tonnes: 't',\n percent: '%',\n rpm: 'rpm',\n decibels: 'dB',\n lux: 'lx',\n lumens: 'lm',\n ohms: 'Ω',\n kilohms: 'kΩ'\n}\n\nfunction unitSymbol(units: string): string {\n return UNIT_SYMBOLS[units] ?? units ?? ''\n}\n\nfunction formatValue(\n value: any,\n optsOrDecimals?: number | { units?: string; decimals?: number; ignoreUnitSymbol?: boolean },\n units?: string,\n ignoreUnitSymbol?: boolean\n): string {\n if (value == null || value === '') return ''\n const num = Number(value)\n if (isNaN(num)) return String(value)\n\n let decimals = 0\n let unitStr = ''\n let ignoreSymbol = false\n\n if (typeof optsOrDecimals === 'object' && optsOrDecimals !== null) {\n decimals = optsOrDecimals.decimals ?? 0\n unitStr = optsOrDecimals.units ?? ''\n ignoreSymbol = optsOrDecimals.ignoreUnitSymbol ?? false\n } else {\n decimals = optsOrDecimals ?? 0\n unitStr = units ?? ''\n ignoreSymbol = ignoreUnitSymbol === true\n }\n\n let result = num.toFixed(decimals)\n if (!ignoreSymbol && unitStr) {\n result += ' ' + unitSymbol(unitStr)\n }\n return result\n}\n\nfunction convertUnitValue(value: number, _units: string): number {\n // In our context, values are already in the target unit — pass through\n return value\n}\n\n// ---------------------------------------------------------------------------\n// API Object builder — creates ctx.api for stateRenderFunction execution\n// ---------------------------------------------------------------------------\n\nexport interface ScadaCallbacks {\n onAction: (event: Event | null, actionName: string, args?: any, opts?: any) => void\n onSetValue: (key: string, value: any) => void\n}\n\nfunction createApi(callbacks: ScadaCallbacks) {\n return {\n cssAnimate(element: ScadaElement | any, duration: number): AnimationRunner {\n const el = element instanceof ScadaElement ? element.native : element\n // Cancel existing\n const existing = elementAnimations.get(el as Element)\n if (existing) existing.cancel()\n const runner = new AnimationRunner(el as Element, duration)\n elementAnimations.set(el as Element, runner)\n return runner\n },\n\n cssAnimation(element: ScadaElement | any): AnimationRunner | null {\n const el = element instanceof ScadaElement ? element.native : element\n return elementAnimations.get(el as Element) ?? null\n },\n\n resetCssAnimation(element: ScadaElement | any): void {\n const el = element instanceof ScadaElement ? element.native : element\n const runner = elementAnimations.get(el as Element)\n if (runner) {\n runner.cancel()\n elementAnimations.delete(el as Element)\n }\n },\n\n finishCssAnimation(element: ScadaElement | any): void {\n const el = element instanceof ScadaElement ? element.native : element\n const runner = elementAnimations.get(el as Element)\n if (runner) {\n runner.finish()\n elementAnimations.delete(el as Element)\n }\n },\n\n font(\n element: ScadaElement | ScadaElement[] | any,\n fontDef: FontDef | any,\n color?: string | any\n ): void {\n // Handle arrays (e.g. from element.find())\n if (Array.isArray(element)) {\n for (const item of element) this.font(item, fontDef, color)\n return\n }\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n if (fontDef && typeof fontDef === 'object' && fontDef.size) {\n const family = fontDef.family || 'Roboto'\n // Ensure a generic fallback so missing fonts don't fall through to serif\n const hasFallback = /\\b(sans-serif|serif|monospace|cursive|fantasy)\\b/.test(family)\n ;(el as SVGElement).style.fontSize = fontDef.size + (fontDef.sizeUnit || 'px')\n ;(el as SVGElement).style.fontFamily = hasFallback ? family : family + ', sans-serif'\n ;(el as SVGElement).style.fontWeight = fontDef.weight || '400'\n ;(el as SVGElement).style.fontStyle = fontDef.style || 'normal'\n }\n if (color) {\n const c = color instanceof ColorProcessor ? color.color : String(color)\n el.setAttribute('fill', c)\n }\n },\n\n text(element: ScadaElement | any, text: string): void {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n // SVG text elements use tspan children or direct textContent\n const tspan = el.querySelector('tspan')\n if (tspan) {\n tspan.textContent = text\n } else {\n el.textContent = text\n }\n },\n\n formatValue,\n unitSymbol,\n convertUnitValue,\n\n callAction(event: Event | null, actionName: string, args?: any, opts?: any): void {\n // Execute the opts.next callback if provided (for toggle patterns)\n if (opts?.next) {\n try {\n opts.next()\n } catch {\n /* skip */\n }\n }\n callbacks.onAction(event, actionName, args, opts)\n },\n\n setValue(key: string, value: any): void {\n callbacks.onSetValue(key, value)\n },\n\n disable(element: ScadaElement | ScadaElement[] | any): void {\n const items = Array.isArray(element) ? element : [element]\n for (const item of items) {\n const el = item instanceof ScadaElement ? item.native : (item as Element)\n ;(el as SVGElement).style.pointerEvents = 'none'\n ;(el as SVGElement).style.opacity = '0.5'\n }\n },\n\n enable(element: ScadaElement | ScadaElement[] | any): void {\n const items = Array.isArray(element) ? element : [element]\n for (const item of items) {\n const el = item instanceof ScadaElement ? item.native : (item as Element)\n ;(el as SVGElement).style.pointerEvents = ''\n ;(el as SVGElement).style.opacity = ''\n }\n },\n\n icon(\n element: ScadaElement | any,\n iconName: string,\n size?: number,\n color?: string | ColorProcessor | any,\n _useSymbols?: boolean\n ): void {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n ensureMaterialSymbolsFont()\n const fontSize = size ?? 14\n const fill =\n color instanceof ColorProcessor ? color.color : typeof color === 'string' ? color : '#000000'\n\n // Reuse existing <text> if already injected, otherwise replace content\n let textEl = el.querySelector('text.__scada-icon') as SVGTextElement | null\n if (!textEl) {\n // Clear original SVG path content\n el.textContent = ''\n const NS = 'http://www.w3.org/2000/svg'\n textEl = document.createElementNS(NS, 'text') as SVGTextElement\n textEl.classList.add('__scada-icon')\n textEl.setAttribute('dominant-baseline', 'central')\n textEl.setAttribute('text-anchor', 'middle')\n el.appendChild(textEl)\n }\n textEl.setAttribute('font-family', 'Material Symbols Outlined')\n textEl.setAttribute('font-size', String(fontSize))\n textEl.setAttribute('fill', fill)\n textEl.textContent = iconName\n },\n\n transform(element: ScadaElement | any, t: Record<string, any>): void {\n if (element instanceof ScadaElement) {\n element.transform(t)\n } else {\n new ScadaElement(element as Element).transform(t)\n }\n },\n\n connectorAnimate(\n element: ScadaElement | any,\n forwardPath: string,\n reversedPath: string\n ): ConnectorAnimationRunner {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n // Cancel existing connector animation on this element\n const existing = connectorAnimations.get(el)\n if (existing) existing.finish()\n const runner = new ConnectorAnimationRunner(el, forwardPath, reversedPath)\n connectorAnimations.set(el, runner)\n return runner\n },\n\n connectorAnimation(element: ScadaElement | any): ConnectorAnimationRunner | null {\n const el = element instanceof ScadaElement ? element.native : (element as Element)\n return connectorAnimations.get(el) ?? null\n }\n }\n}\n\n// ---------------------------------------------------------------------------\n// Context builder + execution engine\n// ---------------------------------------------------------------------------\n\nexport interface ScadaContext {\n values: Record<string, any>\n properties: Record<string, any>\n tags: Record<string, ScadaElement[]>\n svg: ReturnType<typeof createSvgFactory>\n api: ReturnType<typeof createApi>\n}\n\n/**\n * Build the full ctx object for stateRenderFunction execution\n */\nexport function buildContext(\n svgEl: SVGSVGElement,\n metadata: SymbolMetadata,\n values: Record<string, any>,\n rawProperties: Record<string, any>,\n callbacks: ScadaCallbacks\n): ScadaContext {\n // Wrap color_settings properties in ColorProcessor\n const properties: Record<string, any> = {}\n for (const [key, val] of Object.entries(rawProperties)) {\n if (\n val &&\n typeof val === 'object' &&\n val.type &&\n (val.type === 'constant' ||\n val.type === 'gradient' ||\n val.type === 'range' ||\n val.type === 'function') &&\n 'color' in val\n ) {\n properties[key] = new ColorProcessor(val as ColorSettings)\n } else {\n properties[key] = val\n }\n }\n\n // Merge metadata property defaults (inputData wins)\n for (const propDef of metadata.properties) {\n if (properties[propDef.id] === undefined && propDef.default !== undefined) {\n const def = propDef.default\n if (propDef.type === 'color_settings' && def && typeof def === 'object') {\n properties[propDef.id] = new ColorProcessor(def as ColorSettings)\n } else {\n properties[propDef.id] = def\n }\n }\n }\n\n // Merge metadata behavior defaults for values\n for (const beh of metadata.behavior) {\n if (beh.type === 'value' && values[beh.id] === undefined) {\n // Set sensible defaults for unbound values\n if (beh.valueType === 'BOOLEAN') values[beh.id] = false\n else if (beh.valueType === 'DOUBLE' || beh.valueType === 'INTEGER') values[beh.id] = 0\n }\n }\n\n const api = createApi(callbacks)\n const svgFactory = createSvgFactory(svgEl)\n\n // Build tags map — lazy proxy that resolves on access\n const tagsCache: Record<string, ScadaElement[]> = {}\n const tags = new Proxy(tagsCache, {\n get(_target, prop: string) {\n if (!(prop in tagsCache)) {\n const els = svgEl.querySelectorAll(`[tb\\\\:tag=\"${prop}\"]`)\n tagsCache[prop] = Array.from(els).map((e) => new ScadaElement(e))\n }\n return tagsCache[prop]\n }\n })\n\n return { values, properties, tags, svg: svgFactory, api }\n}\n\n/**\n * Execute a stateRenderFunction for a given element and context\n */\nexport function executeStateRender(fnString: string, element: ScadaElement, ctx: ScadaContext): void {\n try {\n // The stateRenderFunction has access to: element, ctx\n // It may also define local functions (e.g., drawMinorTicks)\n const fn = new Function('element', 'ctx', 'console', fnString)\n fn(element, ctx, console)\n } catch (e) {\n console.warn('[scada-runtime] stateRenderFunction error:', e)\n }\n}\n\n/**\n * Execute an actionFunction for a given element and context\n */\nexport function executeAction(\n fnString: string,\n element: ScadaElement,\n ctx: ScadaContext,\n event: Event\n): void {\n try {\n const fn = new Function('element', 'ctx', 'event', fnString)\n fn(element, ctx, event)\n } catch (e) {\n if (import.meta.env?.DEV) {\n console.warn('[scada-runtime] actionFunction error:', e)\n }\n }\n}\n\n/**\n * Run all stateRenderFunctions for all tags in the metadata\n */\nexport function renderAllTags(svgEl: SVGSVGElement, metadata: SymbolMetadata, ctx: ScadaContext): void {\n // Execute top-level stateRenderFunction (e.g. pipe fluid flow setup).\n // Run twice: ThingsBoard stateRenderFunctions capture a `cssAnimation()`\n // reference before `animateFlow()` creates the animation, then call\n // `speed()` on the captured (null) ref. The second pass sees the animation\n // created by the first pass and applies speed/play/pause correctly.\n if (metadata.stateRenderFunction) {\n try {\n const fn = new Function('ctx', 'svg', 'console', metadata.stateRenderFunction)\n fn(ctx, ctx.svg, console)\n fn(ctx, ctx.svg, console)\n } catch (e) {\n console.warn('[scada-runtime] top-level stateRenderFunction error:', e)\n }\n }\n\n for (const tagDef of metadata.tags) {\n const elements = svgEl.querySelectorAll(`[tb\\\\:tag=\"${tagDef.tag}\"]`)\n if (!elements.length) continue\n\n if (tagDef.stateRenderFunction) {\n for (const el of elements) {\n const wrapped = new ScadaElement(el)\n // Save original SVG display on first render, restore before each re-render.\n // Many ThingsBoard stateRenderFunctions only call show() conditionally\n // without a corresponding hide(), relying on the SVG's initial hidden state.\n const mem = getMemory(el)\n if (!mem.has('__origDisplay')) {\n mem.set('__origDisplay', (el as SVGElement).style.display)\n mem.set('__origVisibility', (el as SVGElement).style.visibility)\n mem.set('__origTransform', el.getAttribute('transform') ?? '')\n } else {\n ;(el as SVGElement).style.display = mem.get('__origDisplay')\n ;(el as SVGElement).style.visibility = mem.get('__origVisibility')\n const origT = mem.get('__origTransform')\n if (origT) {\n el.setAttribute('transform', origT)\n } else {\n el.removeAttribute('transform')\n }\n }\n // Clear application-level cached state so that changes in\n // properties/values trigger a full redraw. Internal keys\n // prefixed with '__' are preserved.\n for (const key of mem.keys()) {\n if (!key.startsWith('__')) mem.delete(key)\n }\n executeStateRender(tagDef.stateRenderFunction, wrapped, ctx)\n }\n }\n }\n}\n\n/**\n * Attach click event listeners for all action tags\n */\nexport function attachActions(\n svgEl: SVGSVGElement,\n metadata: SymbolMetadata,\n ctx: ScadaContext\n): Array<() => void> {\n const cleanups: Array<() => void> = []\n\n for (const tagDef of metadata.tags) {\n if (!tagDef.actions) continue\n\n const elements = svgEl.querySelectorAll(`[tb\\\\:tag=\"${tagDef.tag}\"]`)\n for (const el of elements) {\n ;(el as SVGElement).style.cursor = 'pointer'\n\n for (const [actionName, actionDef] of Object.entries(tagDef.actions)) {\n if (actionName === 'click' && actionDef.actionFunction) {\n const handler = (event: Event) => {\n const wrapped = new ScadaElement(el)\n executeAction(actionDef.actionFunction, wrapped, ctx, event)\n }\n el.addEventListener('click', handler)\n cleanups.push(() => el.removeEventListener('click', handler))\n }\n }\n }\n }\n\n return cleanups\n}\n\n/**\n * Extract defaults from SVG metadata, structured to match the inputData shape.\n * Properties with type color/color_settings/font go into `styling`,\n * everything else is top-level. Behavior values go into `bindings`.\n */\nexport function getSymbolDefaults(metadata: SymbolMetadata): Record<string, any> {\n const defaults: Record<string, any> = {}\n const styling: Record<string, any> = {}\n const bindings: Record<string, any> = {}\n\n const STYLING_TYPES = new Set(['color', 'color_settings', 'font'])\n\n for (const prop of metadata.properties) {\n if (prop.default === undefined) continue\n if (STYLING_TYPES.has(prop.type)) {\n styling[prop.id] = prop.default\n } else {\n defaults[prop.id] = prop.default\n }\n }\n\n for (const beh of metadata.behavior) {\n if (beh.type === 'value') {\n if (beh.valueType === 'BOOLEAN') bindings[beh.id] = false\n else if (beh.valueType === 'DOUBLE' || beh.valueType === 'INTEGER') bindings[beh.id] = 0\n else bindings[beh.id] = ''\n }\n }\n\n if (Object.keys(styling).length > 0) defaults.styling = styling\n if (Object.keys(bindings).length > 0) defaults.bindings = bindings\n\n return defaults\n}\n","import { html, css, LitElement, PropertyValues, nothing } from 'lit'\nimport { customElement, property, state, query } from 'lit/decorators.js'\nimport { unsafeSVG } from 'lit/directives/unsafe-svg.js'\nimport { InputData } from './definition-schema.js'\nimport {\n SymbolMetadata,\n ScadaContext,\n ScadaCallbacks,\n buildContext,\n renderAllTags,\n attachActions,\n getSymbolDefaults\n} from './scada-runtime.js'\n\ntype Theme = {\n theme_name: string\n theme_object: any\n}\n\n@customElement('widget-scada-versionplaceholder')\nexport class WidgetScada extends LitElement {\n @property({ type: Object })\n inputData?: InputData\n\n @property({ type: Object })\n theme?: Theme\n\n @property({ type: String })\n baseUrl?: string\n\n @state() private svgContent: string = ''\n @state() private metadata?: SymbolMetadata\n @state() private themeBgColor?: string\n\n @query('.svg-container')\n svgContainer?: HTMLDivElement\n\n version: string = 'versionplaceholder'\n private currentSymbol?: string\n private resizeObserver: ResizeObserver\n private svgModules = new Map<string, { svg: string; metadata: SymbolMetadata }>()\n private actionCleanups: Array<() => void> = []\n private ctx?: ScadaContext\n\n constructor() {\n super()\n this.resizeObserver = new ResizeObserver(() => this.requestUpdate())\n this.resizeObserver.observe(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n this.resizeObserver?.disconnect()\n this.cleanupActions()\n }\n\n private cleanupActions() {\n for (const cleanup of this.actionCleanups) cleanup()\n this.actionCleanups = []\n }\n\n /**\n * Returns the default property values from the currently loaded SVG metadata.\n */\n getDefaults(): Record<string, any> | undefined {\n if (!this.metadata) return undefined\n return getSymbolDefaults(this.metadata)\n }\n\n private dispatchDefaults() {\n if (!this.metadata) return\n this.dispatchEvent(\n new CustomEvent('widget-defaults', {\n detail: getSymbolDefaults(this.metadata),\n bubbles: true,\n composed: true\n })\n )\n }\n\n protected updated(changedProperties: PropertyValues) {\n if (changedProperties.has('inputData')) {\n const newSymbol = this.inputData?.symbol\n if (newSymbol && newSymbol !== this.currentSymbol) {\n this.currentSymbol = newSymbol\n this.loadSymbol(newSymbol)\n } else if (newSymbol === this.currentSymbol) {\n this.applyState()\n }\n }\n if (changedProperties.has('theme')) {\n this.registerTheme()\n }\n }\n\n private registerTheme() {\n const cssBgColor = getComputedStyle(this).getPropertyValue('--re-tile-background-color').trim()\n this.themeBgColor = cssBgColor || this.theme?.theme_object?.backgroundColor\n }\n\n private getSymbolUrl(symbolId: string): string {\n if (this.baseUrl) {\n const base = this.baseUrl.endsWith('/') ? this.baseUrl.slice(0, -1) : this.baseUrl\n return base + '/scada_symbols/' + symbolId + '.svg'\n }\n // Build URL at runtime without triggering Vite's static asset analysis\n // import.meta.url points to the module's own URL\n const base = import.meta.url\n const segments = base.split('/')\n segments.pop() // remove current filename\n if (segments[segments.length - 1] === 'src') {\n segments.pop() // go up from src/ (dev mode only)\n }\n return segments.join('/') + '/scada_symbols/' + symbolId + '.svg'\n }\n\n private async loadSymbol(symbolId: string) {\n const cached = this.svgModules.get(symbolId)\n if (cached) {\n this.svgContent = cached.svg\n this.metadata = cached.metadata\n await this.updateComplete\n this.applyState()\n this.dispatchDefaults()\n return\n }\n\n try {\n const url = this.getSymbolUrl(symbolId)\n const resp = await fetch(url)\n if (!resp.ok) {\n this.svgContent = ''\n this.metadata = undefined\n return\n }\n const text = await resp.text()\n\n const metaMatch = text.match(/<tb:metadata[^>]*><!\\[CDATA\\[([\\s\\S]*?)\\]\\]>/)\n let metadata: SymbolMetadata | undefined\n if (metaMatch) {\n try {\n metadata = JSON.parse(metaMatch[1])\n } catch {\n /* skip */\n }\n }\n\n const cleanSvg = text\n .replace(/<tb:metadata[\\s\\S]*?<\\/tb:metadata>/, '')\n .replace(/<svg\\b([^>]*)>/i, (_match, attrs) => {\n const stripped = attrs.replace(/\\s+preserveAspectRatio=\"[^\"]*\"/i, '')\n return `<svg${stripped} preserveAspectRatio=\"none\">`\n })\n this.svgModules.set(symbolId, { svg: cleanSvg, metadata: metadata! })\n this.svgContent = cleanSvg\n this.metadata = metadata\n await this.updateComplete\n this.applyState()\n } catch {\n this.svgContent = ''\n this.metadata = undefined\n }\n this.dispatchDefaults()\n }\n\n private applyState() {\n if (!this.metadata || !this.inputData || !this.svgContainer) return\n\n requestAnimationFrame(() => {\n const svgEl = this.svgContainer?.querySelector('svg')\n if (!svgEl) return\n\n // Build values from bindings\n const values: Record<string, any> = {}\n const bindings = (this.inputData as any)?.bindings ?? {}\n for (const [key, val] of Object.entries(bindings)) {\n values[key] = val\n }\n\n // Build properties: symbol defaults → top-level props → flattened styling\n const data = this.inputData as any\n const symbolDefaults = getSymbolDefaults(this.metadata!)\n const { styling: defaultStyling, bindings: _defaultBindings, ...defaultProps } = symbolDefaults\n const properties: Record<string, any> = { ...defaultProps, ...data }\n delete properties.symbol\n delete properties.bindings\n delete properties.actions\n delete properties.styling\n Object.assign(properties, defaultStyling ?? {}, data?.styling ?? {})\n\n // Action callbacks\n const callbacks: ScadaCallbacks = {\n onAction: (event, actionName, args, _opts) => {\n this.dispatchEvent(\n new CustomEvent('action-submit', {\n detail: {\n actionName,\n args,\n actionApp: data?.actions?.actionApp,\n actionDevice: data?.actions?.actionDevice,\n actionTopic: data?.actions?.actionTopic\n },\n bubbles: false,\n composed: false\n })\n )\n },\n onSetValue: (key, value) => {\n // Update the binding value and re-render\n if (this.ctx) this.ctx.values[key] = value\n this.applyState()\n }\n }\n\n // Build context and execute all stateRenderFunctions\n this.ctx = buildContext(svgEl, this.metadata!, values, properties, callbacks)\n\n // Cleanup old action handlers and attach new ones\n this.cleanupActions()\n renderAllTags(svgEl, this.metadata!, this.ctx)\n this.actionCleanups = attachActions(svgEl, this.metadata!, this.ctx)\n })\n }\n\n static styles = css`\n :host {\n display: block;\n box-sizing: border-box;\n position: relative;\n margin: auto;\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .wrapper {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n box-sizing: border-box;\n }\n\n .svg-container {\n width: 100%;\n height: 100%;\n display: flex;\n }\n\n .svg-container svg {\n width: 100%;\n height: 100%;\n display: block;\n }\n\n .no-symbol {\n font-size: 16px;\n color: #999;\n display: flex;\n height: 100%;\n width: 100%;\n text-align: center;\n align-items: center;\n justify-content: center;\n font-family: sans-serif;\n }\n `\n\n render() {\n return html`\n <div class=\"wrapper\" style=\"background-color: ${this.themeBgColor ?? ''}\">\n ${this.svgContent\n ? html`<div class=\"svg-container\">${unsafeSVG(this.svgContent)}</div>`\n : html`<div class=\"no-symbol\">\n ${this.inputData?.symbol ? 'Loading...' : 'Select a SCADA symbol'}\n </div>`}\n </div>\n `\n }\n}\n"],"names":["t","e","s","o","n$3","r","n","i","S","c","h","a","l","p","d","u","f","b","y$1","y","v","_","m","g","$","x","A","C","P","V","N","I","L","z","H","M","R","k","Z","B","D","elementMemory","getMemory","el","elementAnimations","connectorAnimations","ConnectorAnimationRunner","container","forwardPath","reversedPath","now","dt","cycleLength","lineWidth","lineColor","dashCap","dashWidth","dashGap","dir","ns","materialFontLoaded","ensureMaterialSymbolsFont","link","AnimationRunner","duration","dx","dy","safeDx","safeDy","parent","baseTransform","progress","attrs","SVG_GEOM","startFrame","endFrame","hasKeyframes","key","val","safeVal","current","parts","bbox","ox","oy","deg","existingTransform","cx","cy","currentDeg","easing","count","bounce","ScadaElement","attrsOrKey","color","opts","value","mem","selector","fc","child","node","attrName","idMatch","ref","fn","name","prop","style","attr","handler","ColorProcessor","settings","min","max","ratio","interpolateColor","rl","c1","c2","parse","rgbaMatch","hex","r1","g1","b1","r2","g2","b2","createSvgFactory","svgEl","x1","y1","x2","y2","line","content","text","tspan","w","rect","circle","UNIT_SYMBOLS","unitSymbol","units","formatValue","optsOrDecimals","ignoreUnitSymbol","num","decimals","unitStr","ignoreSymbol","result","convertUnitValue","_units","createApi","callbacks","element","existing","runner","fontDef","item","family","hasFallback","event","actionName","args","items","iconName","size","_useSymbols","fontSize","fill","textEl","buildContext","metadata","values","rawProperties","properties","propDef","def","beh","api","svgFactory","tagsCache","tags","_target","els","executeStateRender","fnString","ctx","executeAction","renderAllTags","tagDef","elements","wrapped","origT","attachActions","cleanups","actionDef","getSymbolDefaults","defaults","styling","bindings","STYLING_TYPES","WidgetScada","LitElement","cleanup","changedProperties","newSymbol","cssBgColor","symbolId","segments","cached","url","resp","metaMatch","cleanSvg","_match","data","symbolDefaults","defaultStyling","_defaultBindings","defaultProps","_opts","html","unsafeSVG","css","__decorateClass","property","state","query","customElement"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11]}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "REWidget widget-SCADA",
4
4
  "license": "MIT",
5
5
  "author": "widget-SCADA",
6
- "version": "1.0.6",
6
+ "version": "1.0.7",
7
7
  "engines": {
8
8
  "node": ">=24.9.0",
9
9
  "npm": ">=10.0.2"
@@ -29,7 +29,7 @@
29
29
  "release": "npm run build && npm run types && npm version patch --tag-version-prefix='' && git push && git push --tag && npm run build"
30
30
  },
31
31
  "dependencies": {
32
- "lit": "^3.3.1",
32
+ "lit": "^3.3.3",
33
33
  "tslib": "^2.8.1"
34
34
  },
35
35
  "devDependencies": {
@@ -145,7 +145,12 @@ export class WidgetScada extends LitElement {
145
145
  }
146
146
  }
147
147
 
148
- const cleanSvg = text.replace(/<tb:metadata[\s\S]*?<\/tb:metadata>/, '')
148
+ const cleanSvg = text
149
+ .replace(/<tb:metadata[\s\S]*?<\/tb:metadata>/, '')
150
+ .replace(/<svg\b([^>]*)>/i, (_match, attrs) => {
151
+ const stripped = attrs.replace(/\s+preserveAspectRatio="[^"]*"/i, '')
152
+ return `<svg${stripped} preserveAspectRatio="none">`
153
+ })
149
154
  this.svgModules.set(symbolId, { svg: cleanSvg, metadata: metadata! })
150
155
  this.svgContent = cleanSvg
151
156
  this.metadata = metadata
@@ -241,14 +246,12 @@ export class WidgetScada extends LitElement {
241
246
  width: 100%;
242
247
  height: 100%;
243
248
  display: flex;
244
- justify-content: center;
245
249
  }
246
250
 
247
251
  .svg-container svg {
248
- max-width: 100%;
249
- max-height: 100%;
250
- width: auto;
251
- height: auto;
252
+ width: 100%;
253
+ height: 100%;
254
+ display: block;
252
255
  }
253
256
 
254
257
  .no-symbol {