@matter-server/dashboard 0.3.1 → 0.3.2
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/esm/components/dialog-box/dialog-box.d.ts +1 -1
- package/dist/esm/components/dialog-box/dialog-box.d.ts.map +1 -1
- package/dist/esm/components/dialog-box/dialog-box.js +6 -4
- package/dist/esm/components/dialog-box/dialog-box.js.map +1 -1
- package/dist/esm/components/dialog-box/show-dialog-box.d.ts +1 -0
- package/dist/esm/components/dialog-box/show-dialog-box.d.ts.map +1 -1
- package/dist/esm/components/dialog-box/show-dialog-box.js +1 -1
- package/dist/esm/components/dialog-box/show-dialog-box.js.map +1 -1
- package/dist/esm/components/ha-svg-icon.js +1 -1
- package/dist/esm/entrypoint/main.js +1 -1
- package/dist/esm/pages/components/header.js +1 -1
- package/dist/esm/pages/components/node-details.d.ts.map +1 -1
- package/dist/esm/pages/components/node-details.js +7 -4
- package/dist/esm/pages/components/node-details.js.map +1 -1
- package/dist/esm/pages/components/server-details.js +1 -1
- package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-cluster-view.js +6 -5
- package/dist/esm/pages/matter-cluster-view.js.map +1 -1
- package/dist/esm/pages/matter-endpoint-view.js +2 -2
- package/dist/esm/util/fire_event.js +1 -1
- package/dist/web/js/{commission-node-dialog-BBmcax4x.js → commission-node-dialog-CBSDiqRW.js} +5 -5
- package/dist/web/js/{commission-node-existing-BpZvHj-g.js → commission-node-existing-TP6s8Tez.js} +5 -5
- package/dist/web/js/{commission-node-thread-r1tiXZpS.js → commission-node-thread-DOB8pu6x.js} +5 -5
- package/dist/web/js/{commission-node-wifi-BoGa1n6O.js → commission-node-wifi-tzavmk1j.js} +5 -5
- package/dist/web/js/{dialog-box-RjYIjGvB.js → dialog-box-Dknil_Be.js} +8 -6
- package/dist/web/js/{fire_event-CtgWQuh0.js → fire_event-DRpOSjJR.js} +2 -2
- package/dist/web/js/{log-level-dialog-CO5YoPgN.js → log-level-dialog-TXkma-7Z.js} +3 -3
- package/dist/web/js/main.js +9 -3
- package/dist/web/js/{matter-dashboard-app-BrrI804e.js → matter-dashboard-app-B7GUghkC.js} +23 -19
- package/dist/web/js/{node-binding-dialog-vDVm_W7d.js → node-binding-dialog-D52FCBFP.js} +4 -4
- package/dist/web/js/{outlined-text-field-DwmSQzCx.js → outlined-text-field-D1DyKQY-.js} +3 -3
- package/dist/web/js/{prevent_default-BCNFIsLL.js → prevent_default-BPgSQsuY.js} +1 -1
- package/dist/web/js/{validator-DpwNYslY.js → validator-C735j770.js} +1 -1
- package/package.json +4 -4
- package/src/components/dialog-box/dialog-box.ts +11 -5
- package/src/components/dialog-box/show-dialog-box.ts +2 -1
- package/src/components/ha-svg-icon.ts +1 -1
- package/src/entrypoint/main.ts +1 -1
- package/src/pages/components/header.ts +1 -1
- package/src/pages/components/node-details.ts +9 -4
- package/src/pages/components/server-details.ts +1 -1
- package/src/pages/matter-cluster-view.ts +5 -4
- package/src/pages/matter-endpoint-view.ts +2 -2
- package/src/util/fire_event.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog-box.d.ts","sourceRoot":"","sources":["../../../../src/components/dialog-box/dialog-box.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAGvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,qBACa,SAAU,SAAQ,UAAU;IACE,MAAM,EAAG,qBAAqB,CAAC;IAE/B,YAAY,EAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAE7D,IAAI,EAAG,OAAO,GAAG,QAAQ,CAAC;cAE1B,MAAM;
|
|
1
|
+
{"version":3,"file":"dialog-box.d.ts","sourceRoot":"","sources":["../../../../src/components/dialog-box/dialog-box.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAGvC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,qBACa,SAAU,SAAQ,UAAU;IACE,MAAM,EAAG,qBAAqB,CAAC;IAE/B,YAAY,EAAG,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;IAE7D,IAAI,EAAG,OAAO,GAAG,QAAQ,CAAC;cAE1B,MAAM;IAwBzB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,QAAQ;IAIhB,UAAU,CAAC,MAAM,EAAE,OAAO;IAK1B,OAAO,CAAC,aAAa;CAGxB;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,YAAY,EAAE,SAAS,CAAC;KAC3B;CACJ"}
|
|
@@ -24,12 +24,14 @@ let DialogBox = class extends LitElement {
|
|
|
24
24
|
return html`
|
|
25
25
|
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
26
26
|
${params.title ? html`<div slot="headline">${params.title}</div>` : ""}
|
|
27
|
-
${params.text ? html`<div slot="content"
|
|
27
|
+
${params.text ? html`<div slot="content">
|
|
28
|
+
${params.asCodeBlock && typeof params.text === "string" ? html`<code>${params.text}</code>` : params.text}
|
|
29
|
+
</div>` : ""}
|
|
28
30
|
<div slot="actions">
|
|
29
31
|
${this.type === "prompt" ? html`
|
|
30
|
-
<md-text-button @click=${this._cancel}
|
|
32
|
+
<md-text-button @click=${this._cancel}>${params.cancelText ?? "Cancel"}</md-text-button>
|
|
31
33
|
` : ""}
|
|
32
|
-
<md-text-button @click=${this._confirm}
|
|
34
|
+
<md-text-button @click=${this._confirm}>${params.confirmText ?? "OK"}</md-text-button>
|
|
33
35
|
</div>
|
|
34
36
|
</md-dialog>
|
|
35
37
|
`;
|
|
@@ -58,7 +60,7 @@ __decorateClass([
|
|
|
58
60
|
property()
|
|
59
61
|
], DialogBox.prototype, "type", 2);
|
|
60
62
|
DialogBox = __decorateClass([
|
|
61
|
-
customElement("
|
|
63
|
+
customElement("dialog-box")
|
|
62
64
|
], DialogBox);
|
|
63
65
|
export {
|
|
64
66
|
DialogBox
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/dialog-box/dialog-box.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AAEP,SAAS,MAAM,kBAAkB;AACjC,SAAS,eAAe,gBAAgB;AACxC,SAAS,sBAAsB;AAGxB,IAAM,YAAN,cAAwB,WAAW;AAAA,EAOnB,SAAS;AACxB,UAAM,SAAS,KAAK;AACpB,WAAO;AAAA,sCACuB,cAAc,YAAY,KAAK,aAAa;AAAA,kBAChE,OAAO,QAAQ,4BAA4B,OAAO,KAAK,WAAW,EAAE;AAAA,kBACpE,OAAO,OAAO,
|
|
4
|
+
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AAEP,SAAS,MAAM,kBAAkB;AACjC,SAAS,eAAe,gBAAgB;AACxC,SAAS,sBAAsB;AAGxB,IAAM,YAAN,cAAwB,WAAW;AAAA,EAOnB,SAAS;AACxB,UAAM,SAAS,KAAK;AACpB,WAAO;AAAA,sCACuB,cAAc,YAAY,KAAK,aAAa;AAAA,kBAChE,OAAO,QAAQ,4BAA4B,OAAO,KAAK,WAAW,EAAE;AAAA,kBACpE,OAAO,OACH;AAAA,4BACM,OAAO,eAAe,OAAO,OAAO,SAAS,WACzC,aAAa,OAAO,IAAI,YACxB,OAAO,IAAI;AAAA,gCAErB,EAAE;AAAA;AAAA,sBAEF,KAAK,SAAS,WACV;AAAA,uDAC6B,KAAK,OAAO,IAAI,OAAO,cAAc,QAAQ;AAAA,8BAE1E,EAAE;AAAA,6CACiB,KAAK,QAAQ,IAAI,OAAO,eAAe,IAAI;AAAA;AAAA;AAAA;AAAA,EAIpF;AAAA,EAEQ,UAAU;AACd,SAAK,WAAW,KAAK;AAAA,EACzB;AAAA,EAEQ,WAAW;AACf,SAAK,WAAW,IAAI;AAAA,EACxB;AAAA,EAEA,WAAW,QAAiB;AACxB,SAAK,aAAa,MAAM;AACxB,SAAK,WAAY,cAAwB,WAAW,EAAG,MAAM;AAAA,EACjE;AAAA,EAEQ,gBAAgB;AACpB,SAAK,cAAe,YAAY,IAAI;AAAA,EACxC;AACJ;AA9C2C;AAAA,EAAtC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GADrB,UAC8B;AAEA;AAAA,EAAtC,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAHrB,UAG8B;AAEpB;AAAA,EAAlB,SAAS;AAAA,GALD,UAKU;AALV,YAAN;AAAA,EADN,cAAc,YAAY;AAAA,GACd;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"show-dialog-box.d.ts","sourceRoot":"","sources":["../../../../src/components/dialog-box/show-dialog-box.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAE1C,UAAU,mBAAmB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"show-dialog-box.d.ts","sourceRoot":"","sources":["../../../../src/components/dialog-box/show-dialog-box.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAE1C,UAAU,mBAAmB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB;AAaD,eAAO,MAAM,eAAe,GAAI,cAAc,mBAAmB,qBAAyC,CAAC;AAE3G,eAAO,MAAM,gBAAgB,GAAI,cAAc,mBAAmB,qBAA0C,CAAC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
const showDialogBox = async (type, dialogParams) => {
|
|
7
7
|
await import("./dialog-box.js");
|
|
8
8
|
return new Promise((resolve) => {
|
|
9
|
-
const dialog = document.createElement("
|
|
9
|
+
const dialog = document.createElement("dialog-box");
|
|
10
10
|
dialog.params = dialogParams;
|
|
11
11
|
dialog.dialogResult = resolve;
|
|
12
12
|
dialog.type = type;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/dialog-box/show-dialog-box.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAmBA,MAAM,gBAAgB,OAAO,MAA0B,iBAAwC;AAC3F,QAAM,OAAO,iBAAiB;AAC9B,SAAO,IAAI,QAAiB,aAAW;AACnC,UAAM,SAAS,SAAS,cAAc,YAAY;AAClD,WAAO,SAAS;AAChB,WAAO,eAAe;AACtB,WAAO,OAAO;AACd,aAAS,KAAK,YAAY,MAAM;AAAA,EACpC,CAAC;AACL;AAEO,MAAM,kBAAkB,CAAC,iBAAsC,cAAc,SAAS,YAAY;AAElG,MAAM,mBAAmB,CAAC,iBAAsC,cAAc,UAAU,YAAY;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -16,7 +16,7 @@ async function main() {
|
|
|
16
16
|
const suggestedUrl = urlParams.get("url");
|
|
17
17
|
storageUrl = prompt(
|
|
18
18
|
"Enter Websocket URL to a running Matter Server",
|
|
19
|
-
suggestedUrl
|
|
19
|
+
suggestedUrl ?? "ws://localhost:5580/ws"
|
|
20
20
|
);
|
|
21
21
|
if (!storageUrl) {
|
|
22
22
|
alert("Unable to connect without URL");
|
|
@@ -79,7 +79,7 @@ let DashboardHeader = class extends LitElement {
|
|
|
79
79
|
</md-icon-button>
|
|
80
80
|
</a>` : ""}
|
|
81
81
|
|
|
82
|
-
<div class="title">${this.title
|
|
82
|
+
<div class="title">${this.title ?? ""}</div>
|
|
83
83
|
<div class="actions">
|
|
84
84
|
${this.actions?.map((action) => {
|
|
85
85
|
return html`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-details.d.ts","sourceRoot":"","sources":["../../../../src/pages/components/node-details.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,oCAAoC,CAAC;AAC5C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAKrD,OAAO,8BAA8B,CAAC;AAqCtC,qBACa,WAAY,SAAQ,UAAU;IAChC,MAAM,EAAG,YAAY,CAAC;IAEV,IAAI,CAAC,EAAE,UAAU,CAAC;IAGrC,OAAO,CAAC,gBAAgB,CAAkB;IAI1C,QAAQ,EAAG,MAAM,CAAC;cAEC,MAAM;
|
|
1
|
+
{"version":3,"file":"node-details.d.ts","sourceRoot":"","sources":["../../../../src/pages/components/node-details.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,oCAAoC,CAAC;AAC5C,OAAO,sCAAsC,CAAC;AAC9C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AAItC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAKrD,OAAO,8BAA8B,CAAC;AAqCtC,qBACa,WAAY,SAAQ,UAAU;IAChC,MAAM,EAAG,YAAY,CAAC;IAEV,IAAI,CAAC,EAAE,UAAU,CAAC;IAGrC,OAAO,CAAC,gBAAgB,CAAkB;IAI1C,QAAQ,EAAG,MAAM,CAAC;cAEC,MAAM;YA+EX,YAAY;YAyBZ,OAAO;YAsBP,QAAQ;YAQR,aAAa;YAmCb,wBAAwB;IAwBtC,OAAgB,MAAM,0BAgCpB;CACL"}
|
|
@@ -41,7 +41,7 @@ const UPDATE_STATE_LABELS = {
|
|
|
41
41
|
8: "Waiting for consent"
|
|
42
42
|
};
|
|
43
43
|
function getUpdateStateLabel(state2, progress) {
|
|
44
|
-
const label = UPDATE_STATE_LABELS[state2]
|
|
44
|
+
const label = UPDATE_STATE_LABELS[state2] ?? `Unknown (${state2})`;
|
|
45
45
|
if (state2 === 4 && progress !== void 0) {
|
|
46
46
|
return `${label} (${progress}%)`;
|
|
47
47
|
}
|
|
@@ -75,7 +75,7 @@ let NodeDetails = class extends LitElement {
|
|
|
75
75
|
</md-list-item>
|
|
76
76
|
<md-list-item>
|
|
77
77
|
<div slot="supporting-text"><span class="left">VendorName: </span>${this.node.vendorName}</div>
|
|
78
|
-
<div slot="supporting-text"><span class="left">
|
|
78
|
+
<div slot="supporting-text"><span class="left">ProductName: </span>${this.node.productName}</div>
|
|
79
79
|
<div slot="supporting-text">
|
|
80
80
|
<span class="left">Commissioned: </span>${this.node.date_commissioned}
|
|
81
81
|
</div>
|
|
@@ -84,6 +84,9 @@ let NodeDetails = class extends LitElement {
|
|
|
84
84
|
</div>
|
|
85
85
|
<div slot="supporting-text"><span class="left">Is bridge: </span>${this.node.is_bridge}</div>
|
|
86
86
|
<div slot="supporting-text"><span class="left">Serialnumber: </span>${this.node.serialNumber}</div>
|
|
87
|
+
${this.node.matter_version ? html`<div slot="supporting-text">
|
|
88
|
+
<span class="left">Matter version: </span>${this.node.matter_version}
|
|
89
|
+
</div>` : nothing}
|
|
87
90
|
${this.node.is_bridge ? "" : html` <div slot="supporting-text">
|
|
88
91
|
<span class="left">All device types: </span>${getNodeDeviceTypes(this.node).map((deviceType) => {
|
|
89
92
|
return deviceType.label;
|
|
@@ -97,7 +100,7 @@ let NodeDetails = class extends LitElement {
|
|
|
97
100
|
></md-outlined-button>
|
|
98
101
|
${this._updateInitiated ? html` <md-outlined-button disabled
|
|
99
102
|
>Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
100
|
-
></md-outlined-button>` : (this.node.updateState
|
|
103
|
+
></md-outlined-button>` : (this.node.updateState ?? 0) > 1 ? html` <md-outlined-button disabled
|
|
101
104
|
>${getUpdateStateLabel(
|
|
102
105
|
this.node.updateState,
|
|
103
106
|
this.node.updateStateProgress
|
|
@@ -184,7 +187,7 @@ let NodeDetails = class extends LitElement {
|
|
|
184
187
|
text: `Found a firmware update for this node on ${nodeUpdate.update_source}.
|
|
185
188
|
Do you want to update this node to version ${nodeUpdate.software_version_string}?
|
|
186
189
|
Note that updating firmware is at your own risk and may cause the device to
|
|
187
|
-
malfunction or needs additional handling such as power cycling it and/or
|
|
190
|
+
malfunction or needs additional handling such as power cycling it and/or recommissioning it.
|
|
188
191
|
Use with care.
|
|
189
192
|
${nodeUpdate.firmware_information}`,
|
|
190
193
|
confirmText: "Start Update"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/pages/components/node-details.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["state"]
|
|
6
6
|
}
|
|
@@ -38,7 +38,7 @@ let ServerDetails = class extends LitElement {
|
|
|
38
38
|
reader.readAsText(selectedFile, "UTF-8");
|
|
39
39
|
reader.onload = async () => {
|
|
40
40
|
try {
|
|
41
|
-
await this.client.importTestNode(reader.result?.toString()
|
|
41
|
+
await this.client.importTestNode(reader.result?.toString() ?? "");
|
|
42
42
|
} catch (err) {
|
|
43
43
|
showAlertDialog({
|
|
44
44
|
title: "Failed to import test node",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matter-cluster-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-cluster-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAqB,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAM1C,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ;AA+BD,cACM,iBAAkB,SAAQ,UAAU;IAC/B,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAIlB,QAAQ,EAAG,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM;YAkED,mBAAmB;
|
|
1
|
+
{"version":3,"file":"matter-cluster-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-cluster-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAqB,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAK5C,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAM1C,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ;AA+BD,cACM,iBAAkB,SAAQ,UAAU;IAC/B,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAIlB,QAAQ,EAAG,MAAM,CAAC;IAGlB,OAAO,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM;YAkED,mBAAmB;IAQjC,OAAO,CAAC,sBAAsB;IAkBrB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAgBxD,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BAwCpB;CACL"}
|
|
@@ -76,7 +76,7 @@ let MatterClusterView = class extends LitElement {
|
|
|
76
76
|
<md-list-item>
|
|
77
77
|
<div slot="headline">
|
|
78
78
|
<b
|
|
79
|
-
>Attributes of ${clusters[this.cluster]?.label
|
|
79
|
+
>Attributes of ${clusters[this.cluster]?.label ?? "Custom/Unknown Cluster"} Cluster on
|
|
80
80
|
Endpoint ${this.endpoint}</b
|
|
81
81
|
>
|
|
82
82
|
</div>
|
|
@@ -87,11 +87,11 @@ let MatterClusterView = class extends LitElement {
|
|
|
87
87
|
(attribute, index) => html`
|
|
88
88
|
<md-list-item class=${index % 2 === 1 ? "alternate-row" : ""}>
|
|
89
89
|
<div slot="headline">
|
|
90
|
-
${clusters[this.cluster]?.attributes[attribute.key]?.label
|
|
90
|
+
${clusters[this.cluster]?.attributes[attribute.key]?.label ?? "Custom/Unknown Attribute"}
|
|
91
91
|
</div>
|
|
92
92
|
<div slot="supporting-text">
|
|
93
93
|
AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
|
|
94
|
-
${clusters[this.cluster]?.attributes[attribute.key]?.type
|
|
94
|
+
${clusters[this.cluster]?.attributes[attribute.key]?.type ?? "unknown"}
|
|
95
95
|
</div>
|
|
96
96
|
<div slot="end">
|
|
97
97
|
${toBigIntAwareJson(attribute.value).length > 20 ? html`<button
|
|
@@ -100,7 +100,7 @@ let MatterClusterView = class extends LitElement {
|
|
|
100
100
|
}}
|
|
101
101
|
>
|
|
102
102
|
Show value
|
|
103
|
-
</button>` : toBigIntAwareJson(attribute.value)}
|
|
103
|
+
</button>` : html`<code>${toBigIntAwareJson(attribute.value)}</code>`}
|
|
104
104
|
</div>
|
|
105
105
|
</md-list-item>
|
|
106
106
|
`
|
|
@@ -112,7 +112,8 @@ let MatterClusterView = class extends LitElement {
|
|
|
112
112
|
async _showAttributeValue(value) {
|
|
113
113
|
showAlertDialog({
|
|
114
114
|
title: "Attribute value",
|
|
115
|
-
text: toBigIntAwareJson(value)
|
|
115
|
+
text: toBigIntAwareJson(value),
|
|
116
|
+
asCodeBlock: true
|
|
116
117
|
});
|
|
117
118
|
}
|
|
118
119
|
_renderClusterCommands() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/pages/matter-cluster-view.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,eAAe;AACxB,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AACP,SAAmC,yBAAyB;AAC5D,SAAS,YAAY,KAAK,YAAY;AACtC,SAAS,eAAe,gBAAgB;AACxC,SAAS,kBAAkB;AAC3B,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAChC,OAAO;AACP,OAAO;AACP,SAAS,sBAAsB;AAE/B,SAAS,iBAAiB;AAC1B,SAAS,6BAA6B;AAStC,MAAM,uBAAuB;AAC7B,MAAM,uBAAuB;AAE7B,SAAS,kBAAkB,IAAqB;AAC5C,SAAO,MAAM,wBAAwB,MAAM;AAC/C;AAEA,SAAS,kBAAkB,YAAoC,UAAkB,SAAiB;AAE9F,SAAO,OAAO,KAAK,UAAU,EACxB,OAAO,SAAO,IAAI,WAAW,GAAG,QAAQ,IAAI,OAAO,GAAG,CAAC,EACvD,IAAI,SAAO;AACR,UAAM,eAAe,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC;AAC7C,WAAO,EAAE,KAAK,cAAc,OAAO,WAAW,GAAG,EAAE;AAAA,EACvD,CAAC,EACA,KAAK,CAAC,GAAG,MAAM;AACZ,UAAM,YAAY,kBAAkB,EAAE,GAAG;AACzC,UAAM,YAAY,kBAAkB,EAAE,GAAG;AAGzC,QAAI,cAAc,WAAW;AACzB,aAAO,YAAY,IAAI;AAAA,IAC3B;AAEA,WAAO,EAAE,MAAM,EAAE;AAAA,EACrB,CAAC;AACT;AAGA,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAa9B,SAAS;AACd,QAAI,CAAC,KAAK,QAAQ,KAAK,YAAY,UAAa,KAAK,WAAW,QAAW;AACvE,aAAO;AAAA;AAAA,iCAEc,KAAK,OAAO;AAAA;AAAA,IAErC;AAEA,WAAO;AAAA;AAAA,yBAEU,QAAQ,KAAK,KAAK,OAAO,iBAAiB,KAAK,QAAQ,gBAAgB,KAAK,OAAO,EAAE;AAAA,8BAChF,SAAS,KAAK,KAAK,OAAO,IAAI,KAAK,QAAQ,EAAE;AAAA,0BACjD,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,sCAKC,KAAK,IAAI,YAAY,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA,cAIxD,KAAK,uBAAuB,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iDAQM,SAAS,KAAK,OAAO,GAAG,SAAS,wBAAwB;AAAA,2CAC/D,KAAK,QAAQ;AAAA;AAAA;AAAA,gEAGQ,KAAK,OAAO,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA;AAAA;AAAA,sBAGlF,kBAAkB,KAAK,KAAK,YAAY,KAAK,UAAU,KAAK,OAAO,EAAE;AAAA,MACnE,CAAC,WAAW,UAAU;AAAA,kDACI,QAAQ,MAAM,IAAI,kBAAkB,EAAE;AAAA;AAAA,sCAElD,SAAS,KAAK,OAAQ,GAAG,WAAW,UAAU,GAAG,GAAG,SACtD,0BAA0B;AAAA;AAAA;AAAA,mDAGX,UAAU,GAAG,KAAK,UAAU,UAAU,GAAG,CAAC;AAAA,sCACvD,SAAS,KAAK,OAAQ,GAAG,WAAW,UAAU,GAAG,GAAG,QAAQ,SAAS;AAAA;AAAA;AAAA,sCAGrE,kBAAkB,UAAU,KAAK,EAAE,SAAS,KACxC;AAAA,uDACa,MAAM;AACX,aAAK,oBAAoB,UAAU,KAAK;AAAA,MAC5C,CAAC;AAAA;AAAA;AAAA,uDAIL,kBAAkB,UAAU,KAAK,CAAC;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -38,7 +38,7 @@ function getEndpointDeviceTypes(node, endpoint) {
|
|
|
38
38
|
if (!rawValues) return [];
|
|
39
39
|
return rawValues.map((rawValue) => {
|
|
40
40
|
const id = rawValue["0"] ?? rawValue["deviceType"];
|
|
41
|
-
return device_types[id]
|
|
41
|
+
return device_types[id] ?? { id: id ?? -1, label: `Unknown Device Type (${id})`, clusters: [] };
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
44
|
let MatterEndpointView = class extends LitElement {
|
|
@@ -83,7 +83,7 @@ let MatterEndpointView = class extends LitElement {
|
|
|
83
83
|
type="link"
|
|
84
84
|
href=${`#node/${this.node.node_id}/${this.endpoint}/${cluster}`}
|
|
85
85
|
>
|
|
86
|
-
<div slot="headline">${clusters[cluster]?.label
|
|
86
|
+
<div slot="headline">${clusters[cluster]?.label ?? "Custom/Unknown Cluster"}</div>
|
|
87
87
|
<div slot="supporting-text">ClusterId ${cluster} (${formatHex(cluster)})</div>
|
|
88
88
|
<ha-svg-icon slot="end" .path=${mdiChevronRight}></ha-svg-icon>
|
|
89
89
|
</md-list-item>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
const fireEvent = (node, type, detail, options) => {
|
|
7
|
-
options = options
|
|
7
|
+
options = options ?? {};
|
|
8
8
|
const event = new Event(type, {
|
|
9
9
|
bubbles: options.bubbles === void 0 ? true : options.bubbles,
|
|
10
10
|
cancelable: Boolean(options.cancelable),
|
package/dist/web/js/{commission-node-dialog-BBmcax4x.js → commission-node-dialog-CBSDiqRW.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r, n, t, i, h as b } from './matter-dashboard-app-
|
|
2
|
-
import { p as preventDefault } from './prevent_default-
|
|
1
|
+
import { r, n, t, i, h as b } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { p as preventDefault } from './prevent_default-BPgSQsuY.js';
|
|
3
3
|
import './main.js';
|
|
4
4
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
@@ -44,18 +44,18 @@ let ComissionNodeDialog = class extends i {
|
|
|
44
44
|
if (!this.client.serverInfo.bluetooth_enabled) {
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
|
-
import('./commission-node-wifi-
|
|
47
|
+
import('./commission-node-wifi-tzavmk1j.js');
|
|
48
48
|
this._mode = "wifi";
|
|
49
49
|
}
|
|
50
50
|
_commissionThread() {
|
|
51
51
|
if (!this.client.serverInfo.bluetooth_enabled) {
|
|
52
52
|
return;
|
|
53
53
|
}
|
|
54
|
-
import('./commission-node-thread-
|
|
54
|
+
import('./commission-node-thread-DOB8pu6x.js');
|
|
55
55
|
this._mode = "thread";
|
|
56
56
|
}
|
|
57
57
|
_commissionExisting() {
|
|
58
|
-
import('./commission-node-existing-
|
|
58
|
+
import('./commission-node-existing-TP6s8Tez.js');
|
|
59
59
|
this._mode = "existing";
|
|
60
60
|
}
|
|
61
61
|
_nodeCommissioned(ev) {
|
package/dist/web/js/{commission-node-existing-BpZvHj-g.js → commission-node-existing-TP6s8Tez.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r, s as c, v as clientContext, n, a as e, t, i, A, q as handleAsync, h as b } from './matter-dashboard-app-
|
|
2
|
-
import { f as fireEvent } from './fire_event-
|
|
3
|
-
import './outlined-text-field-
|
|
1
|
+
import { r, s as c, v as clientContext, n, a as e, t, i, A, q as handleAsync, h as b } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { f as fireEvent } from './fire_event-DRpOSjJR.js';
|
|
3
|
+
import './outlined-text-field-D1DyKQY-.js';
|
|
4
4
|
import './main.js';
|
|
5
|
-
import './validator-
|
|
6
|
-
import './prevent_default-
|
|
5
|
+
import './validator-C735j770.js';
|
|
6
|
+
import './prevent_default-BPgSQsuY.js';
|
|
7
7
|
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
9
9
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
package/dist/web/js/{commission-node-thread-r1tiXZpS.js → commission-node-thread-DOB8pu6x.js}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r, s as c, v as clientContext, n, a as e, t, i, A, q as handleAsync, h as b } from './matter-dashboard-app-
|
|
2
|
-
import { f as fireEvent } from './fire_event-
|
|
3
|
-
import './outlined-text-field-
|
|
1
|
+
import { r, s as c, v as clientContext, n, a as e, t, i, A, q as handleAsync, h as b } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { f as fireEvent } from './fire_event-DRpOSjJR.js';
|
|
3
|
+
import './outlined-text-field-D1DyKQY-.js';
|
|
4
4
|
import './main.js';
|
|
5
|
-
import './validator-
|
|
6
|
-
import './prevent_default-
|
|
5
|
+
import './validator-C735j770.js';
|
|
6
|
+
import './prevent_default-BPgSQsuY.js';
|
|
7
7
|
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
9
9
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { r, s as c, v as clientContext, n, a as e, t, i, A, q as handleAsync, h as b } from './matter-dashboard-app-
|
|
2
|
-
import { f as fireEvent } from './fire_event-
|
|
3
|
-
import './outlined-text-field-
|
|
1
|
+
import { r, s as c, v as clientContext, n, a as e, t, i, A, q as handleAsync, h as b } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { f as fireEvent } from './fire_event-DRpOSjJR.js';
|
|
3
|
+
import './outlined-text-field-D1DyKQY-.js';
|
|
4
4
|
import './main.js';
|
|
5
|
-
import './validator-
|
|
6
|
-
import './prevent_default-
|
|
5
|
+
import './validator-C735j770.js';
|
|
6
|
+
import './prevent_default-BPgSQsuY.js';
|
|
7
7
|
|
|
8
8
|
var __defProp = Object.defineProperty;
|
|
9
9
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n, t, i, h as b } from './matter-dashboard-app-
|
|
2
|
-
import { p as preventDefault } from './prevent_default-
|
|
1
|
+
import { n, t, i, h as b } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { p as preventDefault } from './prevent_default-BPgSQsuY.js';
|
|
3
3
|
import './main.js';
|
|
4
4
|
|
|
5
5
|
var __defProp = Object.defineProperty;
|
|
@@ -16,12 +16,14 @@ let DialogBox = class extends i {
|
|
|
16
16
|
return b`
|
|
17
17
|
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
18
18
|
${params.title ? b`<div slot="headline">${params.title}</div>` : ""}
|
|
19
|
-
${params.text ? b`<div slot="content"
|
|
19
|
+
${params.text ? b`<div slot="content">
|
|
20
|
+
${params.asCodeBlock && typeof params.text === "string" ? b`<code>${params.text}</code>` : params.text}
|
|
21
|
+
</div>` : ""}
|
|
20
22
|
<div slot="actions">
|
|
21
23
|
${this.type === "prompt" ? b`
|
|
22
|
-
<md-text-button @click=${this._cancel}
|
|
24
|
+
<md-text-button @click=${this._cancel}>${params.cancelText ?? "Cancel"}</md-text-button>
|
|
23
25
|
` : ""}
|
|
24
|
-
<md-text-button @click=${this._confirm}
|
|
26
|
+
<md-text-button @click=${this._confirm}>${params.confirmText ?? "OK"}</md-text-button>
|
|
25
27
|
</div>
|
|
26
28
|
</md-dialog>
|
|
27
29
|
`;
|
|
@@ -47,6 +49,6 @@ __decorateClass([n({
|
|
|
47
49
|
attribute: false
|
|
48
50
|
})], DialogBox.prototype, "dialogResult", 2);
|
|
49
51
|
__decorateClass([n()], DialogBox.prototype, "type", 2);
|
|
50
|
-
DialogBox = __decorateClass([t("
|
|
52
|
+
DialogBox = __decorateClass([t("dialog-box")], DialogBox);
|
|
51
53
|
|
|
52
54
|
export { DialogBox };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, h as b, j as i$1, t } from './matter-dashboard-app-
|
|
1
|
+
import { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, h as b, j as i$1, t } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @license
|
|
@@ -154,7 +154,7 @@ MdCircularProgress = __decorate([t('md-circular-progress')], MdCircularProgress)
|
|
|
154
154
|
* SPDX-License-Identifier: Apache-2.0
|
|
155
155
|
*/
|
|
156
156
|
const fireEvent = (node, type, detail, options) => {
|
|
157
|
-
options = options
|
|
157
|
+
options = options ?? {};
|
|
158
158
|
const event = new Event(type, {
|
|
159
159
|
bubbles: options.bubbles === void 0 ? true : options.bubbles,
|
|
160
160
|
cancelable: Boolean(options.cancelable),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { e, N as NavigableKeys, _ as __decorate, a as e$1, n as n$1, o, r, i, c as createAnimationSignal, L as ListController, g as getActiveItem, b as getLastActivatableItem, d as getFirstActivatableItem, A, f as e$2, h as b, E as EASING, j as i$1, t, D, m as mixinDelegatesAria, k as mixinElementInternals, u, l as i$2, p as fireAndForget, q as handleAsync } from './matter-dashboard-app-
|
|
2
|
-
import { r as redispatchEvent, p as preventDefault } from './prevent_default-
|
|
3
|
-
import { o as o$1, V as Validator, m as mixinOnReportValidity, a as mixinConstraintValidation, b as mixinFormAssociated, c as onReportValidity, g as getFormValue, d as createValidator, e as getValidityAnchor } from './validator-
|
|
1
|
+
import { e, N as NavigableKeys, _ as __decorate, a as e$1, n as n$1, o, r, i, c as createAnimationSignal, L as ListController, g as getActiveItem, b as getLastActivatableItem, d as getFirstActivatableItem, A, f as e$2, h as b, E as EASING, j as i$1, t, D, m as mixinDelegatesAria, k as mixinElementInternals, u, l as i$2, p as fireAndForget, q as handleAsync } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { r as redispatchEvent, p as preventDefault } from './prevent_default-BPgSQsuY.js';
|
|
3
|
+
import { o as o$1, V as Validator, m as mixinOnReportValidity, a as mixinConstraintValidation, b as mixinFormAssociated, c as onReportValidity, g as getFormValue, d as createValidator, e as getValidityAnchor } from './validator-C735j770.js';
|
|
4
4
|
import './main.js';
|
|
5
5
|
|
|
6
6
|
/**
|
package/dist/web/js/main.js
CHANGED
|
@@ -221,6 +221,7 @@ class MatterNode {
|
|
|
221
221
|
this.is_bridge = data.is_bridge;
|
|
222
222
|
this.attributes = data.attributes;
|
|
223
223
|
this.attribute_subscriptions = data.attribute_subscriptions;
|
|
224
|
+
this.matter_version = data.matter_version;
|
|
224
225
|
}
|
|
225
226
|
node_id;
|
|
226
227
|
date_commissioned;
|
|
@@ -230,6 +231,11 @@ class MatterNode {
|
|
|
230
231
|
is_bridge;
|
|
231
232
|
attributes;
|
|
232
233
|
attribute_subscriptions;
|
|
234
|
+
/**
|
|
235
|
+
* Matter specification version of the node (e.g., "1.2.0", "1.3.0", "1.4.0").
|
|
236
|
+
* Optional - not available in Python Matter Server.
|
|
237
|
+
*/
|
|
238
|
+
matter_version;
|
|
233
239
|
get nodeLabel() {
|
|
234
240
|
const label = this.attributes["0/40/5"];
|
|
235
241
|
if (typeof label !== "string") return "";
|
|
@@ -285,7 +291,7 @@ class MatterClient {
|
|
|
285
291
|
this.url = url;
|
|
286
292
|
this.url = url;
|
|
287
293
|
this.connection = new Connection(this.url, wsFactory);
|
|
288
|
-
this.serverBaseAddress = this.url.split("://")[1].split(":")[0]
|
|
294
|
+
this.serverBaseAddress = this.url.split("://")[1].split(":")[0] ?? "";
|
|
289
295
|
}
|
|
290
296
|
connection;
|
|
291
297
|
nodes = {};
|
|
@@ -742,7 +748,7 @@ const ThemeService = new ThemeServiceImpl();
|
|
|
742
748
|
* SPDX-License-Identifier: Apache-2.0
|
|
743
749
|
*/
|
|
744
750
|
async function main() {
|
|
745
|
-
import('./matter-dashboard-app-
|
|
751
|
+
import('./matter-dashboard-app-B7GUghkC.js').then(function (n) { return n.C; });
|
|
746
752
|
let url = "";
|
|
747
753
|
const isProductionServer = location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
|
|
748
754
|
if (!isProductionServer) {
|
|
@@ -750,7 +756,7 @@ async function main() {
|
|
|
750
756
|
if (!storageUrl) {
|
|
751
757
|
const urlParams = new URLSearchParams(window.location.search);
|
|
752
758
|
const suggestedUrl = urlParams.get("url");
|
|
753
|
-
storageUrl = prompt("Enter Websocket URL to a running Matter Server", suggestedUrl
|
|
759
|
+
storageUrl = prompt("Enter Websocket URL to a running Matter Server", suggestedUrl ?? "ws://localhost:5580/ws");
|
|
754
760
|
if (!storageUrl) {
|
|
755
761
|
alert("Unable to connect without URL");
|
|
756
762
|
return;
|
|
@@ -1086,7 +1086,7 @@ let HaSvgIcon = class extends i$3 {
|
|
|
1086
1086
|
render() {
|
|
1087
1087
|
return w`
|
|
1088
1088
|
<svg
|
|
1089
|
-
viewBox=${this.viewBox
|
|
1089
|
+
viewBox=${this.viewBox ?? "0 0 24 24"}
|
|
1090
1090
|
preserveAspectRatio="xMidYMid meet"
|
|
1091
1091
|
focusable="false"
|
|
1092
1092
|
role="img"
|
|
@@ -4020,7 +4020,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
|
|
|
4020
4020
|
*/
|
|
4021
4021
|
const showLogLevelDialog = async client => {
|
|
4022
4022
|
var _document$querySelect;
|
|
4023
|
-
await import('./log-level-dialog-
|
|
4023
|
+
await import('./log-level-dialog-TXkma-7Z.js');
|
|
4024
4024
|
const dialog = document.createElement("log-level-dialog");
|
|
4025
4025
|
dialog.client = client;
|
|
4026
4026
|
(_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
|
|
@@ -4091,7 +4091,7 @@ let DashboardHeader = class extends i$3 {
|
|
|
4091
4091
|
</md-icon-button>
|
|
4092
4092
|
</a>` : ""}
|
|
4093
4093
|
|
|
4094
|
-
<div class="title">${this.title
|
|
4094
|
+
<div class="title">${this.title ?? ""}</div>
|
|
4095
4095
|
<div class="actions">
|
|
4096
4096
|
${(_this$actions = this.actions) === null || _this$actions === void 0 ? void 0 : _this$actions.map(action => {
|
|
4097
4097
|
return b`
|
|
@@ -15601,9 +15601,9 @@ const clusters = {
|
|
|
15601
15601
|
* SPDX-License-Identifier: Apache-2.0
|
|
15602
15602
|
*/
|
|
15603
15603
|
const showDialogBox = async (type, dialogParams) => {
|
|
15604
|
-
await import('./dialog-box-
|
|
15604
|
+
await import('./dialog-box-Dknil_Be.js');
|
|
15605
15605
|
return new Promise(resolve => {
|
|
15606
|
-
const dialog = document.createElement("
|
|
15606
|
+
const dialog = document.createElement("dialog-box");
|
|
15607
15607
|
dialog.params = dialogParams;
|
|
15608
15608
|
dialog.dialogResult = resolve;
|
|
15609
15609
|
dialog.type = type;
|
|
@@ -15775,7 +15775,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
|
|
|
15775
15775
|
*/
|
|
15776
15776
|
const showNodeBindingDialog = async (client, node, endpoint) => {
|
|
15777
15777
|
var _document$querySelect;
|
|
15778
|
-
await import('./node-binding-dialog-
|
|
15778
|
+
await import('./node-binding-dialog-D52FCBFP.js');
|
|
15779
15779
|
const dialog = document.createElement("node-binding-dialog");
|
|
15780
15780
|
dialog.client = client;
|
|
15781
15781
|
dialog.node = node;
|
|
@@ -15859,7 +15859,7 @@ function getEndpointDeviceTypes(node, endpoint) {
|
|
|
15859
15859
|
if (!rawValues) return [];
|
|
15860
15860
|
return rawValues.map(rawValue => {
|
|
15861
15861
|
const id = rawValue["0"] ?? rawValue["deviceType"];
|
|
15862
|
-
return device_types[id]
|
|
15862
|
+
return device_types[id] ?? {
|
|
15863
15863
|
id: id ?? -1,
|
|
15864
15864
|
label: `Unknown Device Type (${id})`,
|
|
15865
15865
|
clusters: []
|
|
@@ -15908,7 +15908,7 @@ let MatterEndpointView = class extends i$3 {
|
|
|
15908
15908
|
type="link"
|
|
15909
15909
|
href=${`#node/${this.node.node_id}/${this.endpoint}/${cluster}`}
|
|
15910
15910
|
>
|
|
15911
|
-
<div slot="headline">${((_clusters$cluster = clusters[cluster]) === null || _clusters$cluster === void 0 ? void 0 : _clusters$cluster.label)
|
|
15911
|
+
<div slot="headline">${((_clusters$cluster = clusters[cluster]) === null || _clusters$cluster === void 0 ? void 0 : _clusters$cluster.label) ?? "Custom/Unknown Cluster"}</div>
|
|
15912
15912
|
<div slot="supporting-text">ClusterId ${cluster} (${formatHex(cluster)})</div>
|
|
15913
15913
|
<ha-svg-icon slot="end" .path=${mdiChevronRight}></ha-svg-icon>
|
|
15914
15914
|
</md-list-item>
|
|
@@ -15989,7 +15989,7 @@ const UPDATE_STATE_LABELS = {
|
|
|
15989
15989
|
8: "Waiting for consent"
|
|
15990
15990
|
};
|
|
15991
15991
|
function getUpdateStateLabel(state2, progress) {
|
|
15992
|
-
const label = UPDATE_STATE_LABELS[state2]
|
|
15992
|
+
const label = UPDATE_STATE_LABELS[state2] ?? `Unknown (${state2})`;
|
|
15993
15993
|
if (state2 === 4 && progress !== void 0) {
|
|
15994
15994
|
return `${label} (${progress}%)`;
|
|
15995
15995
|
}
|
|
@@ -16023,7 +16023,7 @@ let NodeDetails = class extends i$3 {
|
|
|
16023
16023
|
</md-list-item>
|
|
16024
16024
|
<md-list-item>
|
|
16025
16025
|
<div slot="supporting-text"><span class="left">VendorName: </span>${this.node.vendorName}</div>
|
|
16026
|
-
<div slot="supporting-text"><span class="left">
|
|
16026
|
+
<div slot="supporting-text"><span class="left">ProductName: </span>${this.node.productName}</div>
|
|
16027
16027
|
<div slot="supporting-text">
|
|
16028
16028
|
<span class="left">Commissioned: </span>${this.node.date_commissioned}
|
|
16029
16029
|
</div>
|
|
@@ -16032,6 +16032,9 @@ let NodeDetails = class extends i$3 {
|
|
|
16032
16032
|
</div>
|
|
16033
16033
|
<div slot="supporting-text"><span class="left">Is bridge: </span>${this.node.is_bridge}</div>
|
|
16034
16034
|
<div slot="supporting-text"><span class="left">Serialnumber: </span>${this.node.serialNumber}</div>
|
|
16035
|
+
${this.node.matter_version ? b`<div slot="supporting-text">
|
|
16036
|
+
<span class="left">Matter version: </span>${this.node.matter_version}
|
|
16037
|
+
</div>` : A}
|
|
16035
16038
|
${this.node.is_bridge ? "" : b` <div slot="supporting-text">
|
|
16036
16039
|
<span class="left">All device types: </span>${getNodeDeviceTypes(this.node).map(deviceType => {
|
|
16037
16040
|
return deviceType.label;
|
|
@@ -16045,7 +16048,7 @@ let NodeDetails = class extends i$3 {
|
|
|
16045
16048
|
></md-outlined-button>
|
|
16046
16049
|
${this._updateInitiated ? b` <md-outlined-button disabled
|
|
16047
16050
|
>Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
16048
|
-
></md-outlined-button>` : (this.node.updateState
|
|
16051
|
+
></md-outlined-button>` : (this.node.updateState ?? 0) > 1 ? b` <md-outlined-button disabled
|
|
16049
16052
|
>${getUpdateStateLabel(this.node.updateState, this.node.updateStateProgress)}<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
16050
16053
|
></md-outlined-button>` : b`<md-outlined-button @click=${handleAsync(() => this._searchUpdate())}
|
|
16051
16054
|
>Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
@@ -16129,7 +16132,7 @@ let NodeDetails = class extends i$3 {
|
|
|
16129
16132
|
text: `Found a firmware update for this node on ${nodeUpdate.update_source}.
|
|
16130
16133
|
Do you want to update this node to version ${nodeUpdate.software_version_string}?
|
|
16131
16134
|
Note that updating firmware is at your own risk and may cause the device to
|
|
16132
|
-
malfunction or needs additional handling such as power cycling it and/or
|
|
16135
|
+
malfunction or needs additional handling such as power cycling it and/or recommissioning it.
|
|
16133
16136
|
Use with care.
|
|
16134
16137
|
${nodeUpdate.firmware_information}`,
|
|
16135
16138
|
confirmText: "Start Update"
|
|
@@ -16552,7 +16555,7 @@ let MatterClusterView = class extends i$3 {
|
|
|
16552
16555
|
<md-list-item>
|
|
16553
16556
|
<div slot="headline">
|
|
16554
16557
|
<b
|
|
16555
|
-
>Attributes of ${((_clusters$this$cluste = clusters[this.cluster]) === null || _clusters$this$cluste === void 0 ? void 0 : _clusters$this$cluste.label)
|
|
16558
|
+
>Attributes of ${((_clusters$this$cluste = clusters[this.cluster]) === null || _clusters$this$cluste === void 0 ? void 0 : _clusters$this$cluste.label) ?? "Custom/Unknown Cluster"} Cluster on
|
|
16556
16559
|
Endpoint ${this.endpoint}</b
|
|
16557
16560
|
>
|
|
16558
16561
|
</div>
|
|
@@ -16564,11 +16567,11 @@ let MatterClusterView = class extends i$3 {
|
|
|
16564
16567
|
return b`
|
|
16565
16568
|
<md-list-item class=${index % 2 === 1 ? "alternate-row" : ""}>
|
|
16566
16569
|
<div slot="headline">
|
|
16567
|
-
${((_clusters$this$cluste2 = clusters[this.cluster]) === null || _clusters$this$cluste2 === void 0 || (_clusters$this$cluste2 = _clusters$this$cluste2.attributes[attribute.key]) === null || _clusters$this$cluste2 === void 0 ? void 0 : _clusters$this$cluste2.label)
|
|
16570
|
+
${((_clusters$this$cluste2 = clusters[this.cluster]) === null || _clusters$this$cluste2 === void 0 || (_clusters$this$cluste2 = _clusters$this$cluste2.attributes[attribute.key]) === null || _clusters$this$cluste2 === void 0 ? void 0 : _clusters$this$cluste2.label) ?? "Custom/Unknown Attribute"}
|
|
16568
16571
|
</div>
|
|
16569
16572
|
<div slot="supporting-text">
|
|
16570
16573
|
AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
|
|
16571
|
-
${((_clusters$this$cluste3 = clusters[this.cluster]) === null || _clusters$this$cluste3 === void 0 || (_clusters$this$cluste3 = _clusters$this$cluste3.attributes[attribute.key]) === null || _clusters$this$cluste3 === void 0 ? void 0 : _clusters$this$cluste3.type)
|
|
16574
|
+
${((_clusters$this$cluste3 = clusters[this.cluster]) === null || _clusters$this$cluste3 === void 0 || (_clusters$this$cluste3 = _clusters$this$cluste3.attributes[attribute.key]) === null || _clusters$this$cluste3 === void 0 ? void 0 : _clusters$this$cluste3.type) ?? "unknown"}
|
|
16572
16575
|
</div>
|
|
16573
16576
|
<div slot="end">
|
|
16574
16577
|
${toBigIntAwareJson(attribute.value).length > 20 ? b`<button
|
|
@@ -16577,7 +16580,7 @@ let MatterClusterView = class extends i$3 {
|
|
|
16577
16580
|
}}
|
|
16578
16581
|
>
|
|
16579
16582
|
Show value
|
|
16580
|
-
</button>` : toBigIntAwareJson(attribute.value)}
|
|
16583
|
+
</button>` : b`<code>${toBigIntAwareJson(attribute.value)}</code>`}
|
|
16581
16584
|
</div>
|
|
16582
16585
|
</md-list-item>
|
|
16583
16586
|
`;
|
|
@@ -16589,7 +16592,8 @@ let MatterClusterView = class extends i$3 {
|
|
|
16589
16592
|
async _showAttributeValue(value) {
|
|
16590
16593
|
showAlertDialog({
|
|
16591
16594
|
title: "Attribute value",
|
|
16592
|
-
text: toBigIntAwareJson(value)
|
|
16595
|
+
text: toBigIntAwareJson(value),
|
|
16596
|
+
asCodeBlock: true
|
|
16593
16597
|
});
|
|
16594
16598
|
}
|
|
16595
16599
|
_renderClusterCommands() {
|
|
@@ -16812,7 +16816,7 @@ DashboardFooter = __decorateClass$3([t$1("dashboard-footer")], DashboardFooter);
|
|
|
16812
16816
|
*/
|
|
16813
16817
|
const showCommissionNodeDialog = async client => {
|
|
16814
16818
|
var _document$querySelect;
|
|
16815
|
-
await import('./commission-node-dialog-
|
|
16819
|
+
await import('./commission-node-dialog-CBSDiqRW.js');
|
|
16816
16820
|
const dialog = document.createElement("commission-node-dialog");
|
|
16817
16821
|
dialog.client = client;
|
|
16818
16822
|
(_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
|
|
@@ -16836,7 +16840,7 @@ let ServerDetails = class extends i$3 {
|
|
|
16836
16840
|
reader.onload = async () => {
|
|
16837
16841
|
try {
|
|
16838
16842
|
var _reader$result;
|
|
16839
|
-
await this.client.importTestNode(((_reader$result = reader.result) === null || _reader$result === void 0 ? void 0 : _reader$result.toString())
|
|
16843
|
+
await this.client.importTestNode(((_reader$result = reader.result) === null || _reader$result === void 0 ? void 0 : _reader$result.toString()) ?? "");
|
|
16840
16844
|
} catch (err) {
|
|
16841
16845
|
showAlertDialog({
|
|
16842
16846
|
title: "Failed to import test node",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { j as i, s as c, v as clientContext, n, a as e, i as i$1, A, h as b, q as handleAsync, t } from './matter-dashboard-app-
|
|
2
|
-
import { p as preventDefault } from './prevent_default-
|
|
3
|
-
import './outlined-text-field-
|
|
1
|
+
import { j as i, s as c, v as clientContext, n, a as e, i as i$1, A, h as b, q as handleAsync, t } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { p as preventDefault } from './prevent_default-BPgSQsuY.js';
|
|
3
|
+
import './outlined-text-field-D1DyKQY-.js';
|
|
4
4
|
import './main.js';
|
|
5
|
-
import './validator-
|
|
5
|
+
import './validator-C735j770.js';
|
|
6
6
|
|
|
7
7
|
var _staticBlock$1;
|
|
8
8
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { j as i, w as e, x as i$1, y as t, z as E, A, m as mixinDelegatesAria, k as mixinElementInternals, i as i$2, _ as __decorate, n, r as r$1, a as e$1, o, f as e$2, h as b, u, l as i$3, t as t$1 } from './matter-dashboard-app-
|
|
2
|
-
import { V as Validator, m as mixinOnReportValidity, a as mixinConstraintValidation, b as mixinFormAssociated, o as o$1, g as getFormValue, d as createValidator, e as getValidityAnchor, c as onReportValidity } from './validator-
|
|
3
|
-
import { r as redispatchEvent } from './prevent_default-
|
|
1
|
+
import { j as i, w as e, x as i$1, y as t, z as E, A, m as mixinDelegatesAria, k as mixinElementInternals, i as i$2, _ as __decorate, n, r as r$1, a as e$1, o, f as e$2, h as b, u, l as i$3, t as t$1 } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
|
+
import { V as Validator, m as mixinOnReportValidity, a as mixinConstraintValidation, b as mixinFormAssociated, o as o$1, g as getFormValue, d as createValidator, e as getValidityAnchor, c as onReportValidity } from './validator-C735j770.js';
|
|
3
|
+
import { r as redispatchEvent } from './prevent_default-BPgSQsuY.js';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @license
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { E as EASING, m as mixinDelegatesAria, i, _ as __decorate, n, a as e, r, h as b, A, f as e$1, j as i$1, t } from './matter-dashboard-app-
|
|
1
|
+
import { E as EASING, m as mixinDelegatesAria, i, _ as __decorate, n, a as e, r, h as b, A, f as e$1, j as i$1, t } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @license
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { _ as __decorate, n as n$1, o as o$1, r, a as e, i as i$1, A, f as e$1, h as b, D, E as EASING, j as i$2, t, w as e$2, x as i$3, y as t$1, z as E, B as internals } from './matter-dashboard-app-
|
|
1
|
+
import { _ as __decorate, n as n$1, o as o$1, r, a as e, i as i$1, A, f as e$1, h as b, D, E as EASING, j as i$2, t, w as e$2, x as i$3, y as t$1, z as E, B as internals } from './matter-dashboard-app-B7GUghkC.js';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* @license
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter-server/dashboard",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"description": "Dashboard for OHF Matter Server",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/matter-js/matterjs-server/issues"
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@babel/preset-env": "^7.28.6",
|
|
26
|
-
"@matter/main": "0.16.8-alpha.0-
|
|
26
|
+
"@matter/main": "0.16.8-alpha.0-20260130-2554cb6e2",
|
|
27
27
|
"@rollup/plugin-babel": "^6.1.0",
|
|
28
28
|
"@rollup/plugin-commonjs": "^29.0.0",
|
|
29
29
|
"rollup-plugin-copy": "^3.5.0",
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@lit/context": "^1.1.6",
|
|
39
39
|
"@material/web": "^2.4.1",
|
|
40
|
-
"@matter-server/ws-client": "0.3.
|
|
41
|
-
"@matter-server/custom-clusters": "0.3.
|
|
40
|
+
"@matter-server/ws-client": "0.3.2",
|
|
41
|
+
"@matter-server/custom-clusters": "0.3.2",
|
|
42
42
|
"@mdi/js": "^7.4.47",
|
|
43
43
|
"lit": "^3.3.2",
|
|
44
44
|
"tslib": "^2.8.1"
|
|
@@ -11,7 +11,7 @@ import { html, LitElement } from "lit";
|
|
|
11
11
|
import { customElement, property } from "lit/decorators.js";
|
|
12
12
|
import { preventDefault } from "../../util/prevent_default.js";
|
|
13
13
|
import type { PromptDialogBoxParams } from "./show-dialog-box.js";
|
|
14
|
-
@customElement("
|
|
14
|
+
@customElement("dialog-box")
|
|
15
15
|
export class DialogBox extends LitElement {
|
|
16
16
|
@property({ attribute: false }) public params!: PromptDialogBoxParams;
|
|
17
17
|
|
|
@@ -24,14 +24,20 @@ export class DialogBox extends LitElement {
|
|
|
24
24
|
return html`
|
|
25
25
|
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
26
26
|
${params.title ? html`<div slot="headline">${params.title}</div>` : ""}
|
|
27
|
-
${params.text
|
|
27
|
+
${params.text
|
|
28
|
+
? html`<div slot="content">
|
|
29
|
+
${params.asCodeBlock && typeof params.text === "string"
|
|
30
|
+
? html`<code>${params.text}</code>`
|
|
31
|
+
: params.text}
|
|
32
|
+
</div>`
|
|
33
|
+
: ""}
|
|
28
34
|
<div slot="actions">
|
|
29
35
|
${this.type === "prompt"
|
|
30
36
|
? html`
|
|
31
|
-
<md-text-button @click=${this._cancel}
|
|
37
|
+
<md-text-button @click=${this._cancel}>${params.cancelText ?? "Cancel"}</md-text-button>
|
|
32
38
|
`
|
|
33
39
|
: ""}
|
|
34
|
-
<md-text-button @click=${this._confirm}
|
|
40
|
+
<md-text-button @click=${this._confirm}>${params.confirmText ?? "OK"}</md-text-button>
|
|
35
41
|
</div>
|
|
36
42
|
</md-dialog>
|
|
37
43
|
`;
|
|
@@ -57,6 +63,6 @@ export class DialogBox extends LitElement {
|
|
|
57
63
|
|
|
58
64
|
declare global {
|
|
59
65
|
interface HTMLElementTagNameMap {
|
|
60
|
-
"
|
|
66
|
+
"dialog-box": DialogBox;
|
|
61
67
|
}
|
|
62
68
|
}
|
|
@@ -10,6 +10,7 @@ interface BaseDialogBoxParams {
|
|
|
10
10
|
confirmText?: string;
|
|
11
11
|
text: string | TemplateResult;
|
|
12
12
|
title: string;
|
|
13
|
+
asCodeBlock?: boolean;
|
|
13
14
|
}
|
|
14
15
|
|
|
15
16
|
export interface PromptDialogBoxParams extends BaseDialogBoxParams {
|
|
@@ -19,7 +20,7 @@ export interface PromptDialogBoxParams extends BaseDialogBoxParams {
|
|
|
19
20
|
const showDialogBox = async (type: "alert" | "prompt", dialogParams: PromptDialogBoxParams) => {
|
|
20
21
|
await import("./dialog-box.js");
|
|
21
22
|
return new Promise<boolean>(resolve => {
|
|
22
|
-
const dialog = document.createElement("
|
|
23
|
+
const dialog = document.createElement("dialog-box");
|
|
23
24
|
dialog.params = dialogParams;
|
|
24
25
|
dialog.dialogResult = resolve;
|
|
25
26
|
dialog.type = type;
|
|
@@ -18,7 +18,7 @@ export class HaSvgIcon extends LitElement {
|
|
|
18
18
|
protected override render(): SVGTemplateResult {
|
|
19
19
|
return svg`
|
|
20
20
|
<svg
|
|
21
|
-
viewBox=${this.viewBox
|
|
21
|
+
viewBox=${this.viewBox ?? "0 0 24 24"}
|
|
22
22
|
preserveAspectRatio="xMidYMid meet"
|
|
23
23
|
focusable="false"
|
|
24
24
|
role="img"
|
package/src/entrypoint/main.ts
CHANGED
|
@@ -26,7 +26,7 @@ async function main() {
|
|
|
26
26
|
const suggestedUrl = urlParams.get("url");
|
|
27
27
|
storageUrl = prompt(
|
|
28
28
|
"Enter Websocket URL to a running Matter Server",
|
|
29
|
-
suggestedUrl
|
|
29
|
+
suggestedUrl ?? "ws://localhost:5580/ws",
|
|
30
30
|
);
|
|
31
31
|
if (!storageUrl) {
|
|
32
32
|
alert("Unable to connect without URL");
|
|
@@ -38,7 +38,7 @@ const UPDATE_STATE_LABELS: Record<number, string> = {
|
|
|
38
38
|
};
|
|
39
39
|
|
|
40
40
|
function getUpdateStateLabel(state: number, progress?: number): string {
|
|
41
|
-
const label = UPDATE_STATE_LABELS[state]
|
|
41
|
+
const label = UPDATE_STATE_LABELS[state] ?? `Unknown (${state})`;
|
|
42
42
|
// Show progress only for downloading state
|
|
43
43
|
if (state === 4 && progress !== undefined) {
|
|
44
44
|
return `${label} (${progress}%)`;
|
|
@@ -85,7 +85,7 @@ export class NodeDetails extends LitElement {
|
|
|
85
85
|
</md-list-item>
|
|
86
86
|
<md-list-item>
|
|
87
87
|
<div slot="supporting-text"><span class="left">VendorName: </span>${this.node.vendorName}</div>
|
|
88
|
-
<div slot="supporting-text"><span class="left">
|
|
88
|
+
<div slot="supporting-text"><span class="left">ProductName: </span>${this.node.productName}</div>
|
|
89
89
|
<div slot="supporting-text">
|
|
90
90
|
<span class="left">Commissioned: </span>${this.node.date_commissioned}
|
|
91
91
|
</div>
|
|
@@ -94,6 +94,11 @@ export class NodeDetails extends LitElement {
|
|
|
94
94
|
</div>
|
|
95
95
|
<div slot="supporting-text"><span class="left">Is bridge: </span>${this.node.is_bridge}</div>
|
|
96
96
|
<div slot="supporting-text"><span class="left">Serialnumber: </span>${this.node.serialNumber}</div>
|
|
97
|
+
${this.node.matter_version
|
|
98
|
+
? html`<div slot="supporting-text">
|
|
99
|
+
<span class="left">Matter version: </span>${this.node.matter_version}
|
|
100
|
+
</div>`
|
|
101
|
+
: nothing}
|
|
97
102
|
${this.node.is_bridge
|
|
98
103
|
? ""
|
|
99
104
|
: html` <div slot="supporting-text">
|
|
@@ -113,7 +118,7 @@ export class NodeDetails extends LitElement {
|
|
|
113
118
|
? html` <md-outlined-button disabled
|
|
114
119
|
>Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
|
|
115
120
|
></md-outlined-button>`
|
|
116
|
-
: (this.node.updateState
|
|
121
|
+
: (this.node.updateState ?? 0) > 1
|
|
117
122
|
? html` <md-outlined-button disabled
|
|
118
123
|
>${getUpdateStateLabel(
|
|
119
124
|
this.node.updateState!,
|
|
@@ -214,7 +219,7 @@ export class NodeDetails extends LitElement {
|
|
|
214
219
|
text: `Found a firmware update for this node on ${nodeUpdate.update_source}.
|
|
215
220
|
Do you want to update this node to version ${nodeUpdate.software_version_string}?
|
|
216
221
|
Note that updating firmware is at your own risk and may cause the device to
|
|
217
|
-
malfunction or needs additional handling such as power cycling it and/or
|
|
222
|
+
malfunction or needs additional handling such as power cycling it and/or recommissioning it.
|
|
218
223
|
Use with care.\n${nodeUpdate.firmware_information}`,
|
|
219
224
|
confirmText: "Start Update",
|
|
220
225
|
}))
|
|
@@ -97,7 +97,7 @@ export class ServerDetails extends LitElement {
|
|
|
97
97
|
reader.readAsText(selectedFile, "UTF-8");
|
|
98
98
|
reader.onload = async () => {
|
|
99
99
|
try {
|
|
100
|
-
await this.client!.importTestNode(reader.result?.toString()
|
|
100
|
+
await this.client!.importTestNode(reader.result?.toString() ?? "");
|
|
101
101
|
} catch (err: any) {
|
|
102
102
|
showAlertDialog({
|
|
103
103
|
title: "Failed to import test node",
|
|
@@ -100,7 +100,7 @@ class MatterClusterView extends LitElement {
|
|
|
100
100
|
<md-list-item>
|
|
101
101
|
<div slot="headline">
|
|
102
102
|
<b
|
|
103
|
-
>Attributes of ${clusters[this.cluster]?.label
|
|
103
|
+
>Attributes of ${clusters[this.cluster]?.label ?? "Custom/Unknown Cluster"} Cluster on
|
|
104
104
|
Endpoint ${this.endpoint}</b
|
|
105
105
|
>
|
|
106
106
|
</div>
|
|
@@ -111,12 +111,12 @@ class MatterClusterView extends LitElement {
|
|
|
111
111
|
(attribute, index) => html`
|
|
112
112
|
<md-list-item class=${index % 2 === 1 ? "alternate-row" : ""}>
|
|
113
113
|
<div slot="headline">
|
|
114
|
-
${clusters[this.cluster!]?.attributes[attribute.key]?.label
|
|
114
|
+
${clusters[this.cluster!]?.attributes[attribute.key]?.label ??
|
|
115
115
|
"Custom/Unknown Attribute"}
|
|
116
116
|
</div>
|
|
117
117
|
<div slot="supporting-text">
|
|
118
118
|
AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
|
|
119
|
-
${clusters[this.cluster!]?.attributes[attribute.key]?.type
|
|
119
|
+
${clusters[this.cluster!]?.attributes[attribute.key]?.type ?? "unknown"}
|
|
120
120
|
</div>
|
|
121
121
|
<div slot="end">
|
|
122
122
|
${toBigIntAwareJson(attribute.value).length > 20
|
|
@@ -127,7 +127,7 @@ class MatterClusterView extends LitElement {
|
|
|
127
127
|
>
|
|
128
128
|
Show value
|
|
129
129
|
</button>`
|
|
130
|
-
: toBigIntAwareJson(attribute.value)}
|
|
130
|
+
: html`<code>${toBigIntAwareJson(attribute.value)}</code>`}
|
|
131
131
|
</div>
|
|
132
132
|
</md-list-item>
|
|
133
133
|
`,
|
|
@@ -141,6 +141,7 @@ class MatterClusterView extends LitElement {
|
|
|
141
141
|
showAlertDialog({
|
|
142
142
|
title: "Attribute value",
|
|
143
143
|
text: toBigIntAwareJson(value),
|
|
144
|
+
asCodeBlock: true,
|
|
144
145
|
});
|
|
145
146
|
}
|
|
146
147
|
|
|
@@ -40,7 +40,7 @@ export function getEndpointDeviceTypes(node: MatterNode, endpoint: number): Devi
|
|
|
40
40
|
if (!rawValues) return [];
|
|
41
41
|
return rawValues.map(rawValue => {
|
|
42
42
|
const id = rawValue["0"] ?? rawValue["deviceType"];
|
|
43
|
-
return device_types[id]
|
|
43
|
+
return device_types[id] ?? { id: id ?? -1, label: `Unknown Device Type (${id})`, clusters: [] };
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
|
|
@@ -97,7 +97,7 @@ class MatterEndpointView extends LitElement {
|
|
|
97
97
|
type="link"
|
|
98
98
|
href=${`#node/${this.node!.node_id}/${this.endpoint}/${cluster}`}
|
|
99
99
|
>
|
|
100
|
-
<div slot="headline">${clusters[cluster]?.label
|
|
100
|
+
<div slot="headline">${clusters[cluster]?.label ?? "Custom/Unknown Cluster"}</div>
|
|
101
101
|
<div slot="supporting-text">ClusterId ${cluster} (${formatHex(cluster)})</div>
|
|
102
102
|
<ha-svg-icon slot="end" .path=${mdiChevronRight}></ha-svg-icon>
|
|
103
103
|
</md-list-item>
|
package/src/util/fire_event.ts
CHANGED
|
@@ -69,7 +69,7 @@ export const fireEvent = <HassEvent extends ValidHassDomEvent>(
|
|
|
69
69
|
composed?: boolean;
|
|
70
70
|
},
|
|
71
71
|
) => {
|
|
72
|
-
options = options
|
|
72
|
+
options = options ?? {};
|
|
73
73
|
const event = new Event(type, {
|
|
74
74
|
bubbles: options.bubbles === undefined ? true : options.bubbles,
|
|
75
75
|
cancelable: Boolean(options.cancelable),
|