@record-evolution/widget-switch 1.1.5 → 1.1.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/widget-switch.js +67 -44
- package/dist/widget-switch.js.map +1 -1
- package/package.json +6 -2
- package/src/default-data.json +4 -10
- package/src/definition-schema.d.ts +5 -21
- package/src/definition-schema.json +11 -27
- package/src/widget-switch.ts +30 -10
package/dist/widget-switch.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { css as
|
|
2
|
-
import { repeat as
|
|
3
|
-
import { property as
|
|
1
|
+
import { css as m, LitElement as v, html as p } from "lit";
|
|
2
|
+
import { repeat as u } from "lit/directives/repeat.js";
|
|
3
|
+
import { property as d, state as n, customElement as w } from "lit/decorators.js";
|
|
4
4
|
import "@material/web/switch/switch.js";
|
|
5
|
-
var f = Object.defineProperty,
|
|
6
|
-
for (var l =
|
|
7
|
-
(i = t[
|
|
8
|
-
return
|
|
5
|
+
var f = Object.defineProperty, b = Object.getOwnPropertyDescriptor, c = (t, e, r, o) => {
|
|
6
|
+
for (var l = o > 1 ? void 0 : o ? b(e, r) : e, h = t.length - 1, i; h >= 0; h--)
|
|
7
|
+
(i = t[h]) && (l = (o ? i(e, r, l) : i(l)) || l);
|
|
8
|
+
return o && l && f(e, r, l), l;
|
|
9
9
|
};
|
|
10
|
-
let a = class extends
|
|
10
|
+
let a = class extends v {
|
|
11
11
|
constructor() {
|
|
12
|
-
super(), this.dataSets = /* @__PURE__ */ new Map(), this.textActive = !0, this.version = "1.1.
|
|
12
|
+
super(), this.dataSets = /* @__PURE__ */ new Map(), this.textActive = !0, this.version = "1.1.9", this.origWidth = 0, this.origHeight = 0, this.resizeObserver = new ResizeObserver(this.applyData.bind(this)), this.resizeObserver.observe(this);
|
|
13
13
|
}
|
|
14
14
|
disconnectedCallback() {
|
|
15
15
|
super.disconnectedCallback(), this.resizeObserver && this.resizeObserver.disconnect();
|
|
@@ -21,8 +21,7 @@ let a = class extends u {
|
|
|
21
21
|
t.has("inputData") && (this.transformData(), this.applyData()), t.has("theme") && this.registerTheme(this.theme), super.update(t);
|
|
22
22
|
}
|
|
23
23
|
registerTheme(t) {
|
|
24
|
-
|
|
25
|
-
this.themeBgColor = r || this.theme?.theme_object?.backgroundColor, this.themeTitleColor = e || this.theme?.theme_object?.title?.textStyle?.color, this.themeSubtitleColor = e || this.theme?.theme_object?.title?.subtextStyle?.color || this.themeTitleColor, this.themePrimaryColor = s || this.theme?.theme_object?.color?.[0] || "#5470c6";
|
|
24
|
+
this.themeBgColor = `var(--re-tile-background-color, ${this.theme?.theme_object?.backgroundColor || "transparent"})`, this.themeTitleColor = `var(--re-text-color, ${this.theme?.theme_object?.title?.textStyle?.color || "inherit"})`, this.themeSubtitleColor = `var(--re-text-color, ${this.theme?.theme_object?.title?.subtextStyle?.color || this.theme?.theme_object?.title?.textStyle?.color || "inherit"})`, this.themePrimaryColor = `var(--re-primary-color, ${this.theme?.theme_object?.color?.[0] || "#5470c6"})`;
|
|
26
25
|
}
|
|
27
26
|
applyData() {
|
|
28
27
|
}
|
|
@@ -33,16 +32,16 @@ let a = class extends u {
|
|
|
33
32
|
t.selected = void 0;
|
|
34
33
|
let r = t.label;
|
|
35
34
|
this.dataSets.has(r ?? "") && (r += "-" + e);
|
|
36
|
-
const
|
|
35
|
+
const o = {
|
|
37
36
|
label: r,
|
|
37
|
+
description: t?.description,
|
|
38
38
|
actionApp: t?.actionApp,
|
|
39
39
|
actionDevice: t?.actionDevice,
|
|
40
40
|
actionTopic: t?.actionTopic,
|
|
41
41
|
multiChart: t.multiChart,
|
|
42
|
-
styling: t.styling,
|
|
43
42
|
selected: this.isSelected(t)
|
|
44
43
|
};
|
|
45
|
-
this.dataSets.set(
|
|
44
|
+
this.dataSets.set(o.label ?? "", o);
|
|
46
45
|
}));
|
|
47
46
|
}
|
|
48
47
|
isSelected(t) {
|
|
@@ -50,40 +49,40 @@ let a = class extends u {
|
|
|
50
49
|
if (e === void 0) return;
|
|
51
50
|
const r = t?.stateMap?.on;
|
|
52
51
|
if (r?.startsWith("<=")) {
|
|
53
|
-
const i = parseFloat(e ?? ""),
|
|
54
|
-
return isNaN(i) || isNaN(
|
|
52
|
+
const i = parseFloat(e ?? ""), s = parseFloat(r.substring(2));
|
|
53
|
+
return isNaN(i) || isNaN(s) ? void 0 : i <= s;
|
|
55
54
|
}
|
|
56
55
|
if (r?.startsWith("<")) {
|
|
57
|
-
const i = parseFloat(e ?? ""),
|
|
58
|
-
return isNaN(i) || isNaN(
|
|
56
|
+
const i = parseFloat(e ?? ""), s = parseFloat(r.substring(1));
|
|
57
|
+
return isNaN(i) || isNaN(s) ? void 0 : i < s;
|
|
59
58
|
}
|
|
60
59
|
if (r?.startsWith(">=")) {
|
|
61
|
-
const i = parseFloat(e ?? ""),
|
|
62
|
-
return isNaN(i) || isNaN(
|
|
60
|
+
const i = parseFloat(e ?? ""), s = parseFloat(r.substring(2));
|
|
61
|
+
return isNaN(i) || isNaN(s) ? void 0 : i >= s;
|
|
63
62
|
}
|
|
64
63
|
if (r?.startsWith(">")) {
|
|
65
|
-
const i = parseFloat(e ?? ""),
|
|
66
|
-
return isNaN(i) || isNaN(
|
|
64
|
+
const i = parseFloat(e ?? ""), s = parseFloat(r.substring(1));
|
|
65
|
+
return isNaN(i) || isNaN(s) ? void 0 : i > s;
|
|
67
66
|
}
|
|
68
|
-
const
|
|
69
|
-
if (
|
|
70
|
-
const i = parseFloat(e ?? ""),
|
|
71
|
-
return isNaN(i) || isNaN(
|
|
67
|
+
const o = t?.stateMap?.off;
|
|
68
|
+
if (o?.startsWith("<=")) {
|
|
69
|
+
const i = parseFloat(e ?? ""), s = parseFloat(o.substring(2));
|
|
70
|
+
return isNaN(i) || isNaN(s) ? void 0 : i > s;
|
|
72
71
|
}
|
|
73
|
-
if (
|
|
74
|
-
const i = parseFloat(e ?? ""),
|
|
75
|
-
return isNaN(i) || isNaN(
|
|
72
|
+
if (o?.startsWith("<")) {
|
|
73
|
+
const i = parseFloat(e ?? ""), s = parseFloat(o.substring(1));
|
|
74
|
+
return isNaN(i) || isNaN(s) ? void 0 : i <= s;
|
|
76
75
|
}
|
|
77
|
-
if (
|
|
78
|
-
const i = parseFloat(e ?? ""),
|
|
79
|
-
return isNaN(i) || isNaN(
|
|
76
|
+
if (o?.startsWith(">=")) {
|
|
77
|
+
const i = parseFloat(e ?? ""), s = parseFloat(o.substring(2));
|
|
78
|
+
return isNaN(i) || isNaN(s) ? void 0 : i < s;
|
|
80
79
|
}
|
|
81
|
-
if (
|
|
82
|
-
const i = parseFloat(e ?? ""),
|
|
83
|
-
return isNaN(i) || isNaN(
|
|
80
|
+
if (o?.startsWith(">")) {
|
|
81
|
+
const i = parseFloat(e ?? ""), s = parseFloat(o.substring(1));
|
|
82
|
+
return isNaN(i) || isNaN(s) ? void 0 : i <= s;
|
|
84
83
|
}
|
|
85
84
|
if ((r?.split(",").map((i) => i.trim().replace('"', "").replace("'", "")) ?? []).includes(String(e) ?? "")) return !0;
|
|
86
|
-
if ((
|
|
85
|
+
if ((o?.split(",").map((i) => i.trim().replace('"', "").replace("'", "")) ?? []).includes(String(e) ?? "")) return !1;
|
|
87
86
|
}
|
|
88
87
|
handleActionSubmit(t) {
|
|
89
88
|
const e = t.target, r = {
|
|
@@ -102,7 +101,7 @@ let a = class extends u {
|
|
|
102
101
|
);
|
|
103
102
|
}
|
|
104
103
|
render() {
|
|
105
|
-
return
|
|
104
|
+
return p`
|
|
106
105
|
<div
|
|
107
106
|
class="wrapper"
|
|
108
107
|
style="background-color: ${this.themeBgColor}; color: ${this.themeTitleColor}; --switch-primary-color: ${this.themePrimaryColor}; --switch-text-color: ${this.themeTitleColor}"
|
|
@@ -119,12 +118,20 @@ let a = class extends u {
|
|
|
119
118
|
</header>
|
|
120
119
|
|
|
121
120
|
<div class="value-container">
|
|
122
|
-
${
|
|
121
|
+
${u(
|
|
123
122
|
[...this.dataSets.entries()].sort(),
|
|
124
123
|
([t]) => t,
|
|
125
|
-
([t, e]) =>
|
|
124
|
+
([t, e]) => p`
|
|
126
125
|
<div class="switch" label="${t}">
|
|
127
|
-
|
|
126
|
+
<div class="switch-text">
|
|
127
|
+
<span class="switch-label">${t}</span>
|
|
128
|
+
<span
|
|
129
|
+
class="switch-hint paging"
|
|
130
|
+
?active=${!!e.description}
|
|
131
|
+
style="color: ${this.themeSubtitleColor}"
|
|
132
|
+
>${e.description}</span
|
|
133
|
+
>
|
|
134
|
+
</div>
|
|
128
135
|
<label
|
|
129
136
|
><md-switch
|
|
130
137
|
aria-label="${t}"
|
|
@@ -144,7 +151,7 @@ let a = class extends u {
|
|
|
144
151
|
`;
|
|
145
152
|
}
|
|
146
153
|
};
|
|
147
|
-
a.styles =
|
|
154
|
+
a.styles = m`
|
|
148
155
|
:host {
|
|
149
156
|
display: block;
|
|
150
157
|
font-family: sans-serif;
|
|
@@ -203,6 +210,22 @@ a.styles = d`
|
|
|
203
210
|
box-sizing: border-box;
|
|
204
211
|
}
|
|
205
212
|
|
|
213
|
+
.switch-text {
|
|
214
|
+
display: flex;
|
|
215
|
+
flex-direction: column;
|
|
216
|
+
gap: 2px;
|
|
217
|
+
min-width: 0;
|
|
218
|
+
max-width: 300px;
|
|
219
|
+
line-height: 1.2;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.switch-hint {
|
|
223
|
+
font-size: 12px;
|
|
224
|
+
line-height: 15px;
|
|
225
|
+
opacity: 0.75;
|
|
226
|
+
overflow-wrap: anywhere;
|
|
227
|
+
}
|
|
228
|
+
|
|
206
229
|
md-switch {
|
|
207
230
|
--md-switch-selected-handle-color: var(--switch-primary-color, #5470c6);
|
|
208
231
|
--md-switch-selected-hover-handle-color: var(--switch-primary-color, #5470c6);
|
|
@@ -248,10 +271,10 @@ a.styles = d`
|
|
|
248
271
|
}
|
|
249
272
|
`;
|
|
250
273
|
c([
|
|
251
|
-
|
|
274
|
+
d({ type: Object })
|
|
252
275
|
], a.prototype, "inputData", 2);
|
|
253
276
|
c([
|
|
254
|
-
|
|
277
|
+
d({ type: Object })
|
|
255
278
|
], a.prototype, "theme", 2);
|
|
256
279
|
c([
|
|
257
280
|
n()
|
|
@@ -272,7 +295,7 @@ c([
|
|
|
272
295
|
n()
|
|
273
296
|
], a.prototype, "themePrimaryColor", 2);
|
|
274
297
|
a = c([
|
|
275
|
-
|
|
298
|
+
w("widget-switch-1.1.9")
|
|
276
299
|
], a);
|
|
277
300
|
export {
|
|
278
301
|
a as WidgetSwitch
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget-switch.js","sources":["../src/widget-switch.ts"],"sourcesContent":["import { html, css, LitElement, PropertyValueMap } from 'lit'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SwitchConfiguration } from './definition-schema.js'\nimport '@material/web/switch/switch.js'\nimport { MdSwitch } from '@material/web/switch/switch.js'\n\ntype Dataseries = Exclude<SwitchConfiguration['dataseries'], undefined>[number] & { needleValue?: number }\ntype Theme = {\n theme_name: string\n theme_object: any\n}\n@customElement('widget-switch-versionplaceholder')\nexport class WidgetSwitch extends LitElement {\n @property({ type: Object })\n inputData?: SwitchConfiguration\n\n @property({ type: Object })\n theme?: Theme\n\n @state()\n private dataSets: Map<string, Dataseries> = new Map()\n\n @state()\n private textActive: boolean = true\n\n @state() private themeBgColor?: string\n @state() private themeTitleColor?: string\n @state() private themeSubtitleColor?: string\n @state() private themePrimaryColor?: string\n\n version: string = 'versionplaceholder'\n\n private resizeObserver: ResizeObserver\n\n valueContainer?: HTMLDivElement\n boxes?: HTMLDivElement[]\n origWidth: number = 0\n origHeight: number = 0\n constructor() {\n super()\n this.resizeObserver = new ResizeObserver(this.applyData.bind(this))\n this.resizeObserver.observe(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n }\n }\n\n protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n this.valueContainer = this?.shadowRoot?.querySelector('.value-container') as HTMLDivElement\n\n this.registerTheme(this.theme)\n this.transformData()\n this.applyData()\n }\n\n update(changedProperties: Map<string, any>) {\n if (changedProperties.has('inputData')) {\n this.transformData()\n this.applyData()\n }\n\n if (changedProperties.has('theme')) {\n this.registerTheme(this.theme)\n }\n\n super.update(changedProperties)\n }\n\n registerTheme(theme?: Theme) {\n const cssTextColor = getComputedStyle(this).getPropertyValue('--re-text-color').trim()\n const cssBgColor = getComputedStyle(this).getPropertyValue('--re-tile-background-color').trim()\n const cssPrimaryColor = getComputedStyle(this).getPropertyValue('--re-primary-color').trim()\n this.themeBgColor = cssBgColor || this.theme?.theme_object?.backgroundColor\n this.themeTitleColor = cssTextColor || this.theme?.theme_object?.title?.textStyle?.color\n this.themeSubtitleColor =\n cssTextColor || this.theme?.theme_object?.title?.subtextStyle?.color || this.themeTitleColor\n this.themePrimaryColor = cssPrimaryColor || this.theme?.theme_object?.color?.[0] || '#5470c6'\n }\n\n applyData() {}\n\n async transformData() {\n if (!this.inputData) return\n this.dataSets.forEach((d) => {\n d.label ??= ''\n })\n this.dataSets = new Map()\n this.inputData?.dataseries\n // ?.sort((a, b) => a.order - b.order)\n ?.forEach((ds, idx) => {\n // pivot data\n ds.selected = undefined\n let label = ds.label\n if (this.dataSets.has(label ?? '')) {\n label += '-' + idx\n }\n const pds: Dataseries = {\n label: label,\n actionApp: ds?.actionApp,\n actionDevice: ds?.actionDevice,\n actionTopic: ds?.actionTopic,\n multiChart: ds.multiChart,\n styling: ds.styling,\n selected: this.isSelected(ds)\n }\n this.dataSets.set(pds.label ?? '', pds)\n })\n // console.log('Value Datasets', this.dataSets)\n }\n\n isSelected(ds: Dataseries): boolean | undefined {\n const value = ds.value\n if (value === undefined) return undefined\n const on = ds?.stateMap?.on\n if (on?.startsWith('<=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val <= comp\n }\n if (on?.startsWith('<')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val < comp\n }\n if (on?.startsWith('>=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val >= comp\n }\n if (on?.startsWith('>')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val > comp\n }\n\n const off = ds?.stateMap?.off\n if (off?.startsWith('<=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val > comp\n }\n if (off?.startsWith('<')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val <= comp\n }\n if (off?.startsWith('>=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val < comp\n }\n if (off?.startsWith('>')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val <= comp\n }\n\n const onValues = on?.split(',').map((v) => v.trim().replace('\"', '').replace(\"'\", '')) ?? []\n if (onValues.includes(String(value) ?? '')) return true\n\n const offValues = off?.split(',').map((v) => v.trim().replace('\"', '').replace(\"'\", '')) ?? []\n if (offValues.includes(String(value) ?? '')) return false\n\n return undefined\n }\n\n handleActionSubmit(e: any) {\n const switchEl = e.target\n const payload = {\n args: switchEl?.selected,\n actionApp: switchEl?.actionApp,\n actionDevice: switchEl?.actionDevice,\n actionTopic: switchEl?.actionTopic,\n label: switchEl?.label\n }\n this.dispatchEvent(\n new CustomEvent('action-submit', {\n detail: payload,\n bubbles: false,\n composed: false\n })\n )\n }\n\n static styles = css`\n :host {\n display: block;\n font-family: sans-serif;\n box-sizing: border-box;\n position: relative;\n margin: auto;\n }\n\n .paging:not([active]) {\n display: none !important;\n }\n\n .wrapper {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n padding: 2cqh 2cqw;\n box-sizing: border-box;\n }\n\n h3 {\n margin: 0;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n p {\n margin: 10px 0 0 0;\n max-width: 300px;\n font-size: 14px;\n line-height: 17px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .value-container {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n line-height: 0.9;\n flex: 1;\n overflow: hidden;\n position: relative;\n gap: 12px;\n }\n\n .switch {\n overflow: hidden;\n display: flex;\n align-items: center;\n gap: 12px;\n box-sizing: border-box;\n }\n\n md-switch {\n --md-switch-selected-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-hover-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-focus-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-pressed-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 40%,\n transparent\n );\n --md-switch-selected-hover-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 50%,\n transparent\n );\n --md-switch-selected-focus-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 50%,\n transparent\n );\n --md-switch-selected-pressed-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 50%,\n transparent\n );\n --md-switch-unselected-handle-color: var(--switch-text-color, #464646);\n --md-switch-unselected-track-color: color-mix(\n in srgb,\n var(--switch-text-color, #464646) 20%,\n transparent\n );\n --md-switch-unselected-track-outline-color: var(--switch-text-color, #464646);\n }\n\n .no-data {\n font-size: 20px;\n display: flex;\n height: 100%;\n width: 100%;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n `\n\n render() {\n return html`\n <div\n class=\"wrapper\"\n style=\"background-color: ${this.themeBgColor}; color: ${this\n .themeTitleColor}; --switch-primary-color: ${this\n .themePrimaryColor}; --switch-text-color: ${this.themeTitleColor}\"\n >\n <header>\n <h3 class=\"paging\" ?active=${this.inputData?.title}>${this.inputData?.title}</h3>\n <p\n class=\"paging\"\n ?active=${this.inputData?.subTitle}\n style=\"color: ${this.themeSubtitleColor}\"\n >\n ${this.inputData?.subTitle}\n </p>\n </header>\n\n <div class=\"value-container\">\n ${repeat(\n [...this.dataSets.entries()].sort(),\n ([label]) => label,\n ([label, ds]) => {\n return html`\n <div class=\"switch\" label=\"${label}\">\n ${label}\n <label\n ><md-switch\n aria-label=\"${label}\"\n ?selected=\"${!!ds.selected}\"\n .actionApp=\"${ds?.actionApp}\"\n .actionDevice=\"${ds?.actionDevice}\"\n .actionTopic=\"${ds?.actionTopic}\"\n .label=\"${label}\"\n @change=\"${this.handleActionSubmit}\"\n ></md-switch\n ></label>\n </div>\n `\n }\n )}\n </div>\n </div>\n `\n }\n}\n"],"names":["WidgetSwitch","LitElement","_changedProperties","changedProperties","theme","cssTextColor","cssBgColor","cssPrimaryColor","d","ds","idx","label","pds","value","on","val","comp","off","v","e","switchEl","payload","html","repeat","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"widget-switch.js","sources":["../src/widget-switch.ts"],"sourcesContent":["import { html, css, LitElement, PropertyValueMap } from 'lit'\nimport { repeat } from 'lit/directives/repeat.js'\nimport { customElement, property, state } from 'lit/decorators.js'\nimport { SwitchConfiguration } from './definition-schema.js'\nimport '@material/web/switch/switch.js'\nimport { MdSwitch } from '@material/web/switch/switch.js'\n\ntype Dataseries = Exclude<SwitchConfiguration['dataseries'], undefined>[number] & { needleValue?: number }\ntype Theme = {\n theme_name: string\n theme_object: any\n}\n@customElement('widget-switch-versionplaceholder')\nexport class WidgetSwitch extends LitElement {\n @property({ type: Object })\n inputData?: SwitchConfiguration\n\n @property({ type: Object })\n theme?: Theme\n\n @state()\n private dataSets: Map<string, Dataseries> = new Map()\n\n @state()\n private textActive: boolean = true\n\n @state() private themeBgColor?: string\n @state() private themeTitleColor?: string\n @state() private themeSubtitleColor?: string\n @state() private themePrimaryColor?: string\n\n version: string = 'versionplaceholder'\n\n private resizeObserver: ResizeObserver\n\n valueContainer?: HTMLDivElement\n boxes?: HTMLDivElement[]\n origWidth: number = 0\n origHeight: number = 0\n constructor() {\n super()\n this.resizeObserver = new ResizeObserver(this.applyData.bind(this))\n this.resizeObserver.observe(this)\n }\n\n disconnectedCallback() {\n super.disconnectedCallback()\n if (this.resizeObserver) {\n this.resizeObserver.disconnect()\n }\n }\n\n protected firstUpdated(_changedProperties: PropertyValueMap<any> | Map<PropertyKey, unknown>) {\n this.valueContainer = this?.shadowRoot?.querySelector('.value-container') as HTMLDivElement\n\n this.registerTheme(this.theme)\n this.transformData()\n this.applyData()\n }\n\n update(changedProperties: Map<string, any>) {\n if (changedProperties.has('inputData')) {\n this.transformData()\n this.applyData()\n }\n\n if (changedProperties.has('theme')) {\n this.registerTheme(this.theme)\n }\n\n super.update(changedProperties)\n }\n\n registerTheme(theme?: Theme) {\n this.themeBgColor = `var(--re-tile-background-color, ${this.theme?.theme_object?.backgroundColor || 'transparent'})`\n this.themeTitleColor = `var(--re-text-color, ${this.theme?.theme_object?.title?.textStyle?.color || 'inherit'})`\n this.themeSubtitleColor = `var(--re-text-color, ${this.theme?.theme_object?.title?.subtextStyle?.color || this.theme?.theme_object?.title?.textStyle?.color || 'inherit'})`\n this.themePrimaryColor = `var(--re-primary-color, ${this.theme?.theme_object?.color?.[0] || '#5470c6'})`\n }\n\n applyData() {}\n\n async transformData() {\n if (!this.inputData) return\n this.dataSets.forEach((d) => {\n d.label ??= ''\n })\n this.dataSets = new Map()\n this.inputData?.dataseries\n // ?.sort((a, b) => a.order - b.order)\n ?.forEach((ds, idx) => {\n // pivot data\n ds.selected = undefined\n let label = ds.label\n if (this.dataSets.has(label ?? '')) {\n label += '-' + idx\n }\n const pds: Dataseries = {\n label: label,\n description: ds?.description,\n actionApp: ds?.actionApp,\n actionDevice: ds?.actionDevice,\n actionTopic: ds?.actionTopic,\n multiChart: ds.multiChart,\n selected: this.isSelected(ds)\n }\n this.dataSets.set(pds.label ?? '', pds)\n })\n // console.log('Value Datasets', this.dataSets)\n }\n\n isSelected(ds: Dataseries): boolean | undefined {\n const value = ds.value\n if (value === undefined) return undefined\n const on = ds?.stateMap?.on\n if (on?.startsWith('<=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val <= comp\n }\n if (on?.startsWith('<')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val < comp\n }\n if (on?.startsWith('>=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val >= comp\n }\n if (on?.startsWith('>')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(on.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val > comp\n }\n\n const off = ds?.stateMap?.off\n if (off?.startsWith('<=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val > comp\n }\n if (off?.startsWith('<')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val <= comp\n }\n if (off?.startsWith('>=')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(2))\n return isNaN(val) || isNaN(comp) ? undefined : val < comp\n }\n if (off?.startsWith('>')) {\n const val = parseFloat(value ?? '')\n const comp = parseFloat(off.substring(1))\n return isNaN(val) || isNaN(comp) ? undefined : val <= comp\n }\n\n const onValues = on?.split(',').map((v) => v.trim().replace('\"', '').replace(\"'\", '')) ?? []\n if (onValues.includes(String(value) ?? '')) return true\n\n const offValues = off?.split(',').map((v) => v.trim().replace('\"', '').replace(\"'\", '')) ?? []\n if (offValues.includes(String(value) ?? '')) return false\n\n return undefined\n }\n\n handleActionSubmit(e: any) {\n const switchEl = e.target\n const payload = {\n args: switchEl?.selected,\n actionApp: switchEl?.actionApp,\n actionDevice: switchEl?.actionDevice,\n actionTopic: switchEl?.actionTopic,\n label: switchEl?.label\n }\n this.dispatchEvent(\n new CustomEvent('action-submit', {\n detail: payload,\n bubbles: false,\n composed: false\n })\n )\n }\n\n static styles = css`\n :host {\n display: block;\n font-family: sans-serif;\n box-sizing: border-box;\n position: relative;\n margin: auto;\n }\n\n .paging:not([active]) {\n display: none !important;\n }\n\n .wrapper {\n display: flex;\n flex-direction: column;\n height: 100%;\n width: 100%;\n padding: 2cqh 2cqw;\n box-sizing: border-box;\n }\n\n h3 {\n margin: 0;\n max-width: 300px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n p {\n margin: 10px 0 0 0;\n max-width: 300px;\n font-size: 14px;\n line-height: 17px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .value-container {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: center;\n line-height: 0.9;\n flex: 1;\n overflow: hidden;\n position: relative;\n gap: 12px;\n }\n\n .switch {\n overflow: hidden;\n display: flex;\n align-items: center;\n gap: 12px;\n box-sizing: border-box;\n }\n\n .switch-text {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n max-width: 300px;\n line-height: 1.2;\n }\n\n .switch-hint {\n font-size: 12px;\n line-height: 15px;\n opacity: 0.75;\n overflow-wrap: anywhere;\n }\n\n md-switch {\n --md-switch-selected-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-hover-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-focus-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-pressed-handle-color: var(--switch-primary-color, #5470c6);\n --md-switch-selected-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 40%,\n transparent\n );\n --md-switch-selected-hover-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 50%,\n transparent\n );\n --md-switch-selected-focus-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 50%,\n transparent\n );\n --md-switch-selected-pressed-track-color: color-mix(\n in srgb,\n var(--switch-primary-color, #5470c6) 50%,\n transparent\n );\n --md-switch-unselected-handle-color: var(--switch-text-color, #464646);\n --md-switch-unselected-track-color: color-mix(\n in srgb,\n var(--switch-text-color, #464646) 20%,\n transparent\n );\n --md-switch-unselected-track-outline-color: var(--switch-text-color, #464646);\n }\n\n .no-data {\n font-size: 20px;\n display: flex;\n height: 100%;\n width: 100%;\n text-align: center;\n align-items: center;\n justify-content: center;\n }\n `\n\n render() {\n return html`\n <div\n class=\"wrapper\"\n style=\"background-color: ${this.themeBgColor}; color: ${this\n .themeTitleColor}; --switch-primary-color: ${this\n .themePrimaryColor}; --switch-text-color: ${this.themeTitleColor}\"\n >\n <header>\n <h3 class=\"paging\" ?active=${this.inputData?.title}>${this.inputData?.title}</h3>\n <p\n class=\"paging\"\n ?active=${this.inputData?.subTitle}\n style=\"color: ${this.themeSubtitleColor}\"\n >\n ${this.inputData?.subTitle}\n </p>\n </header>\n\n <div class=\"value-container\">\n ${repeat(\n [...this.dataSets.entries()].sort(),\n ([label]) => label,\n ([label, ds]) => {\n return html`\n <div class=\"switch\" label=\"${label}\">\n <div class=\"switch-text\">\n <span class=\"switch-label\">${label}</span>\n <span\n class=\"switch-hint paging\"\n ?active=${!!ds.description}\n style=\"color: ${this.themeSubtitleColor}\"\n >${ds.description}</span\n >\n </div>\n <label\n ><md-switch\n aria-label=\"${label}\"\n ?selected=\"${!!ds.selected}\"\n .actionApp=\"${ds?.actionApp}\"\n .actionDevice=\"${ds?.actionDevice}\"\n .actionTopic=\"${ds?.actionTopic}\"\n .label=\"${label}\"\n @change=\"${this.handleActionSubmit}\"\n ></md-switch\n ></label>\n </div>\n `\n }\n )}\n </div>\n </div>\n `\n }\n}\n"],"names":["WidgetSwitch","LitElement","_changedProperties","changedProperties","theme","d","ds","idx","label","pds","value","on","val","comp","off","v","e","switchEl","payload","html","repeat","css","__decorateClass","property","state","customElement"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "IronFlock Widget widget-switch",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"author": "Record Evolution GmbH",
|
|
6
|
-
"version": "1.1.
|
|
6
|
+
"version": "1.1.9",
|
|
7
7
|
"engines": {
|
|
8
8
|
"node": ">=24.9.0",
|
|
9
9
|
"npm": ">=10.0.2"
|
|
@@ -26,7 +26,11 @@
|
|
|
26
26
|
"link": "npm run build && npm link && cd ../RESWARM/frontend && npm link @record-evolution/widget-switch",
|
|
27
27
|
"unlink": "npm unlink --global && cd ../RESWARM/frontend && npm unlink @record-evolution/widget-switch && npm i @record-evolution/widget-switch",
|
|
28
28
|
"types": "cat src/definition-schema.json | json2ts --style.tabWidth=4 > src/definition-schema.d.ts",
|
|
29
|
-
"
|
|
29
|
+
"preversion": "sh scripts/release-preflight.sh",
|
|
30
|
+
"postversion": "git push --follow-tags && sh scripts/release-verify.sh",
|
|
31
|
+
"release": "npm version patch",
|
|
32
|
+
"release:minor": "npm version minor",
|
|
33
|
+
"release:major": "npm version major"
|
|
30
34
|
},
|
|
31
35
|
"dependencies": {
|
|
32
36
|
"lit": "^3.3.3",
|
package/src/default-data.json
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
"dataseries": [
|
|
5
5
|
{
|
|
6
6
|
"label": "Lamp",
|
|
7
|
+
"description": "Work light above the main line. Safe to switch at any time.",
|
|
7
8
|
"stateMap": {
|
|
8
9
|
"on": ">=1",
|
|
9
10
|
"off": "<1"
|
|
@@ -11,14 +12,11 @@
|
|
|
11
12
|
"value": "1",
|
|
12
13
|
"actionApp": "machineControlApp",
|
|
13
14
|
"actionDevice": 1,
|
|
14
|
-
"actionTopic": "lamp"
|
|
15
|
-
"styling": {
|
|
16
|
-
"labelColor": "#000000",
|
|
17
|
-
"valueColor": "#00cc66"
|
|
18
|
-
}
|
|
15
|
+
"actionTopic": "lamp"
|
|
19
16
|
},
|
|
20
17
|
{
|
|
21
18
|
"label": "Cooling",
|
|
19
|
+
"description": "Coolant pump. Takes about 30 s to reach pressure after switching on.",
|
|
22
20
|
"stateMap": {
|
|
23
21
|
"on": "COOL_ON,1",
|
|
24
22
|
"off": "COOL_OFF,0"
|
|
@@ -26,11 +24,7 @@
|
|
|
26
24
|
"value": "COOL_ON",
|
|
27
25
|
"actionApp": "coolingSystemApp",
|
|
28
26
|
"actionDevice": 1,
|
|
29
|
-
"actionTopic": "cooling"
|
|
30
|
-
"styling": {
|
|
31
|
-
"labelColor": "#0033cc",
|
|
32
|
-
"valueColor": "#0099ff"
|
|
33
|
-
}
|
|
27
|
+
"actionTopic": "cooling"
|
|
34
28
|
}
|
|
35
29
|
]
|
|
36
30
|
}
|
|
@@ -17,6 +17,10 @@ export type Subtitle = string;
|
|
|
17
17
|
* Display text identifying this switch. Should clearly describe what the switch controls (e.g., 'Main Power', 'Pump 1', 'Night Mode').
|
|
18
18
|
*/
|
|
19
19
|
export type Label = string;
|
|
20
|
+
/**
|
|
21
|
+
* Helper text displayed below the switch label to guide the operator. Use for what the switch does, when it is safe to flip it, or how long the action takes.
|
|
22
|
+
*/
|
|
23
|
+
export type HintText = string;
|
|
20
24
|
/**
|
|
21
25
|
* Values that indicate the ON state. Can be: a single value ('1', 'true', 'ON'), comma-separated list ('1,true,ON'), or numeric expression ('<4' means values below 4 are ON, '>33' means values above 33 are ON). If a value matches both ON and OFF, ON takes precedence.
|
|
22
26
|
*/
|
|
@@ -38,12 +42,12 @@ export type ActionAppTopic = string;
|
|
|
38
42
|
*/
|
|
39
43
|
export type Switches = {
|
|
40
44
|
label?: Label;
|
|
45
|
+
description?: HintText;
|
|
41
46
|
stateMap?: StateMap;
|
|
42
47
|
value?: SwitchState;
|
|
43
48
|
actionDevice?: ActionDeviceTarget;
|
|
44
49
|
actionApp?: ActionApp;
|
|
45
50
|
actionTopic?: ActionAppTopic;
|
|
46
|
-
styling?: Styling;
|
|
47
51
|
[k: string]: unknown;
|
|
48
52
|
}[];
|
|
49
53
|
|
|
@@ -76,23 +80,3 @@ export interface ActionDeviceTarget {
|
|
|
76
80
|
export interface ActionApp {
|
|
77
81
|
[k: string]: unknown;
|
|
78
82
|
}
|
|
79
|
-
/**
|
|
80
|
-
* Visual styling options for the switch and its label.
|
|
81
|
-
*/
|
|
82
|
-
export interface Styling {
|
|
83
|
-
labelColor?: LabelColor;
|
|
84
|
-
valueColor?: ValueColor;
|
|
85
|
-
[k: string]: unknown;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Color of the switch label text.
|
|
89
|
-
*/
|
|
90
|
-
export interface LabelColor {
|
|
91
|
-
[k: string]: unknown;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* Color of the state value text displayed with the switch.
|
|
95
|
-
*/
|
|
96
|
-
export interface ValueColor {
|
|
97
|
-
[k: string]: unknown;
|
|
98
|
-
}
|
|
@@ -44,12 +44,18 @@
|
|
|
44
44
|
"type": "string",
|
|
45
45
|
"order": 1
|
|
46
46
|
},
|
|
47
|
+
"description": {
|
|
48
|
+
"title": "Hint Text",
|
|
49
|
+
"description": "Helper text displayed below the switch label to guide the operator. Use for what the switch does, when it is safe to flip it, or how long the action takes.",
|
|
50
|
+
"type": "string",
|
|
51
|
+
"order": 2
|
|
52
|
+
},
|
|
47
53
|
"stateMap": {
|
|
48
54
|
"title": "State Map",
|
|
49
55
|
"description": "Defines how data values are interpreted as switch states. Configure which values represent ON and OFF. Values not matching either state display as UNKNOWN (neutral position).",
|
|
50
56
|
"type": "object",
|
|
51
57
|
"required": true,
|
|
52
|
-
"order":
|
|
58
|
+
"order": 3,
|
|
53
59
|
"properties": {
|
|
54
60
|
"on": {
|
|
55
61
|
"title": "ON Values",
|
|
@@ -70,48 +76,26 @@
|
|
|
70
76
|
"type": "string",
|
|
71
77
|
"description": "The current state value from the backend, used to display the correct switch position. Strongly recommended to bind this to the actual device state column to keep the visual state synchronized with the physical device state.",
|
|
72
78
|
"required": false,
|
|
73
|
-
"order":
|
|
79
|
+
"order": 4
|
|
74
80
|
},
|
|
75
81
|
"actionDevice": {
|
|
76
82
|
"title": "Action Device Target",
|
|
77
83
|
"description": "The device that receives commands when the switch is clicked. In data-driven mode, bind to a 'Device ID' column to dynamically target different devices per row.",
|
|
78
84
|
"type": "actionDevice",
|
|
79
|
-
"order":
|
|
85
|
+
"order": 5
|
|
80
86
|
},
|
|
81
87
|
"actionApp": {
|
|
82
88
|
"title": "Action App",
|
|
83
89
|
"description": "The application/service on the target device that handles the switch command. Select from available apps installed on the device.",
|
|
84
90
|
"dataDrivenDisabled": true,
|
|
85
91
|
"type": "actionApp",
|
|
86
|
-
"order":
|
|
92
|
+
"order": 6
|
|
87
93
|
},
|
|
88
94
|
"actionTopic": {
|
|
89
95
|
"title": "Action App Topic",
|
|
90
96
|
"description": "The specific command/topic sent to the app when the switch is clicked. Arguments sent are: True for turning ON, False for turning OFF. Refer to the app's documentation for available topics.",
|
|
91
97
|
"type": "string",
|
|
92
|
-
"order":
|
|
93
|
-
},
|
|
94
|
-
"styling": {
|
|
95
|
-
"title": "Styling",
|
|
96
|
-
"description": "Visual styling options for the switch and its label.",
|
|
97
|
-
"type": "object",
|
|
98
|
-
"order": 9,
|
|
99
|
-
"properties": {
|
|
100
|
-
"labelColor": {
|
|
101
|
-
"title": "Label Color",
|
|
102
|
-
"description": "Color of the switch label text.",
|
|
103
|
-
"type": "color",
|
|
104
|
-
"color": true,
|
|
105
|
-
"order": 4
|
|
106
|
-
},
|
|
107
|
-
"valueColor": {
|
|
108
|
-
"title": "Value Color",
|
|
109
|
-
"description": "Color of the state value text displayed with the switch.",
|
|
110
|
-
"type": "color",
|
|
111
|
-
"color": true,
|
|
112
|
-
"order": 5
|
|
113
|
-
}
|
|
114
|
-
}
|
|
98
|
+
"order": 7
|
|
115
99
|
}
|
|
116
100
|
}
|
|
117
101
|
}
|
package/src/widget-switch.ts
CHANGED
|
@@ -72,14 +72,10 @@ export class WidgetSwitch extends LitElement {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
registerTheme(theme?: Theme) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.
|
|
79
|
-
this.themeTitleColor = cssTextColor || this.theme?.theme_object?.title?.textStyle?.color
|
|
80
|
-
this.themeSubtitleColor =
|
|
81
|
-
cssTextColor || this.theme?.theme_object?.title?.subtextStyle?.color || this.themeTitleColor
|
|
82
|
-
this.themePrimaryColor = cssPrimaryColor || this.theme?.theme_object?.color?.[0] || '#5470c6'
|
|
75
|
+
this.themeBgColor = `var(--re-tile-background-color, ${this.theme?.theme_object?.backgroundColor || 'transparent'})`
|
|
76
|
+
this.themeTitleColor = `var(--re-text-color, ${this.theme?.theme_object?.title?.textStyle?.color || 'inherit'})`
|
|
77
|
+
this.themeSubtitleColor = `var(--re-text-color, ${this.theme?.theme_object?.title?.subtextStyle?.color || this.theme?.theme_object?.title?.textStyle?.color || 'inherit'})`
|
|
78
|
+
this.themePrimaryColor = `var(--re-primary-color, ${this.theme?.theme_object?.color?.[0] || '#5470c6'})`
|
|
83
79
|
}
|
|
84
80
|
|
|
85
81
|
applyData() {}
|
|
@@ -101,11 +97,11 @@ export class WidgetSwitch extends LitElement {
|
|
|
101
97
|
}
|
|
102
98
|
const pds: Dataseries = {
|
|
103
99
|
label: label,
|
|
100
|
+
description: ds?.description,
|
|
104
101
|
actionApp: ds?.actionApp,
|
|
105
102
|
actionDevice: ds?.actionDevice,
|
|
106
103
|
actionTopic: ds?.actionTopic,
|
|
107
104
|
multiChart: ds.multiChart,
|
|
108
|
-
styling: ds.styling,
|
|
109
105
|
selected: this.isSelected(ds)
|
|
110
106
|
}
|
|
111
107
|
this.dataSets.set(pds.label ?? '', pds)
|
|
@@ -246,6 +242,22 @@ export class WidgetSwitch extends LitElement {
|
|
|
246
242
|
box-sizing: border-box;
|
|
247
243
|
}
|
|
248
244
|
|
|
245
|
+
.switch-text {
|
|
246
|
+
display: flex;
|
|
247
|
+
flex-direction: column;
|
|
248
|
+
gap: 2px;
|
|
249
|
+
min-width: 0;
|
|
250
|
+
max-width: 300px;
|
|
251
|
+
line-height: 1.2;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
.switch-hint {
|
|
255
|
+
font-size: 12px;
|
|
256
|
+
line-height: 15px;
|
|
257
|
+
opacity: 0.75;
|
|
258
|
+
overflow-wrap: anywhere;
|
|
259
|
+
}
|
|
260
|
+
|
|
249
261
|
md-switch {
|
|
250
262
|
--md-switch-selected-handle-color: var(--switch-primary-color, #5470c6);
|
|
251
263
|
--md-switch-selected-hover-handle-color: var(--switch-primary-color, #5470c6);
|
|
@@ -317,7 +329,15 @@ export class WidgetSwitch extends LitElement {
|
|
|
317
329
|
([label, ds]) => {
|
|
318
330
|
return html`
|
|
319
331
|
<div class="switch" label="${label}">
|
|
320
|
-
|
|
332
|
+
<div class="switch-text">
|
|
333
|
+
<span class="switch-label">${label}</span>
|
|
334
|
+
<span
|
|
335
|
+
class="switch-hint paging"
|
|
336
|
+
?active=${!!ds.description}
|
|
337
|
+
style="color: ${this.themeSubtitleColor}"
|
|
338
|
+
>${ds.description}</span
|
|
339
|
+
>
|
|
340
|
+
</div>
|
|
321
341
|
<label
|
|
322
342
|
><md-switch
|
|
323
343
|
aria-label="${label}"
|