@matter-server/dashboard 0.3.6 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/dist/esm/components/dialog-box/dialog-box.d.ts.map +1 -1
  2. package/dist/esm/components/dialog-box/dialog-box.js.map +1 -1
  3. package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
  4. package/dist/esm/components/dialogs/binding/node-binding-dialog.js +4 -4
  5. package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
  6. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts.map +1 -1
  7. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +7 -1
  8. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +1 -1
  9. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -1
  10. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +3 -1
  11. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +1 -1
  12. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -1
  13. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +6 -2
  14. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +1 -1
  15. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -1
  16. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +3 -1
  17. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
  18. package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
  19. package/dist/esm/components/dialogs/settings/log-level-dialog.js +3 -1
  20. package/dist/esm/components/dialogs/settings/log-level-dialog.js.map +1 -1
  21. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts.map +1 -1
  22. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js +3 -1
  23. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +1 -1
  24. package/dist/esm/pages/components/footer.d.ts.map +1 -1
  25. package/dist/esm/pages/components/footer.js +1 -3
  26. package/dist/esm/pages/components/footer.js.map +1 -1
  27. package/dist/esm/pages/components/header.d.ts.map +1 -1
  28. package/dist/esm/pages/components/header.js.map +1 -1
  29. package/dist/esm/pages/components/node-details.d.ts.map +1 -1
  30. package/dist/esm/pages/components/node-details.js +6 -4
  31. package/dist/esm/pages/components/node-details.js.map +1 -1
  32. package/dist/esm/pages/components/server-details.d.ts.map +1 -1
  33. package/dist/esm/pages/components/server-details.js +3 -1
  34. package/dist/esm/pages/components/server-details.js.map +1 -1
  35. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  36. package/dist/esm/pages/matter-cluster-view.js +1 -1
  37. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  38. package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
  39. package/dist/esm/pages/matter-node-view.js.map +1 -1
  40. package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
  41. package/dist/esm/pages/matter-server-view.js +3 -1
  42. package/dist/esm/pages/matter-server-view.js.map +1 -1
  43. package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
  44. package/dist/esm/pages/network/device-panel.js.map +1 -1
  45. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  46. package/dist/esm/pages/network/network-details.js +9 -3
  47. package/dist/esm/pages/network/network-details.js.map +1 -1
  48. package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
  49. package/dist/esm/pages/network/thread-graph.js +3 -1
  50. package/dist/esm/pages/network/thread-graph.js.map +1 -1
  51. package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
  52. package/dist/esm/pages/network/update-connections-dialog.js +6 -2
  53. package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
  54. package/dist/esm/pages/network/wifi-graph.d.ts.map +1 -1
  55. package/dist/esm/pages/network/wifi-graph.js +3 -1
  56. package/dist/esm/pages/network/wifi-graph.js.map +1 -1
  57. package/dist/web/js/{commission-node-dialog-DOtOjWT7.js → commission-node-dialog-h9QTg0uL.js} +11 -5
  58. package/dist/web/js/{commission-node-existing-B0e6xZeB.js → commission-node-existing-TnFjP70Q.js} +5 -3
  59. package/dist/web/js/{commission-node-thread-CetoXqfb.js → commission-node-thread-DumLBlyw.js} +8 -4
  60. package/dist/web/js/{commission-node-wifi-B69SoNfD.js → commission-node-wifi-CbT2wQDc.js} +5 -3
  61. package/dist/web/js/{dialog-box-RdFIn1hd.js → dialog-box-DVtkVga3.js} +1 -1
  62. package/dist/web/js/{fire_event-DTKKR48v.js → fire_event-D_gZK7cY.js} +1 -1
  63. package/dist/web/js/{log-level-dialog-BheZgiD2.js → log-level-dialog-ChcYXgfz.js} +4 -2
  64. package/dist/web/js/main.js +1 -1
  65. package/dist/web/js/{matter-dashboard-app-Dq3JvQBw.js → matter-dashboard-app-Dpr9EPlS.js} +70 -50
  66. package/dist/web/js/{node-binding-dialog-CtmtVf1D.js → node-binding-dialog-BI9spkUK.js} +115 -115
  67. package/package.json +3 -3
  68. package/src/components/dialog-box/dialog-box.ts +15 -9
  69. package/src/components/dialogs/binding/node-binding-dialog.ts +6 -9
  70. package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +15 -7
  71. package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +7 -1
  72. package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +14 -2
  73. package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +12 -4
  74. package/src/components/dialogs/settings/log-level-dialog.ts +13 -7
  75. package/src/pages/cluster-commands/clusters/basic-information-commands.ts +7 -3
  76. package/src/pages/components/footer.ts +1 -3
  77. package/src/pages/components/header.ts +25 -15
  78. package/src/pages/components/node-details.ts +34 -21
  79. package/src/pages/components/server-details.ts +7 -1
  80. package/src/pages/matter-cluster-view.ts +10 -6
  81. package/src/pages/matter-node-view.ts +5 -3
  82. package/src/pages/matter-server-view.ts +7 -1
  83. package/src/pages/network/device-panel.ts +5 -3
  84. package/src/pages/network/network-details.ts +134 -82
  85. package/src/pages/network/thread-graph.ts +3 -1
  86. package/src/pages/network/update-connections-dialog.ts +31 -17
  87. package/src/pages/network/wifi-graph.ts +3 -1
@@ -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-BheZgiD2.js');
4023
+ await import('./log-level-dialog-ChcYXgfz.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);
@@ -15680,7 +15680,7 @@ const clusters = {
15680
15680
  * SPDX-License-Identifier: Apache-2.0
15681
15681
  */
15682
15682
  const showDialogBox = async (type, dialogParams) => {
15683
- await import('./dialog-box-RdFIn1hd.js');
15683
+ await import('./dialog-box-DVtkVga3.js');
15684
15684
  return new Promise(resolve => {
15685
15685
  const dialog = document.createElement("dialog-box");
15686
15686
  dialog.params = dialogParams;
@@ -15847,6 +15847,39 @@ let MdTextButton = class MdTextButton extends TextButton {};
15847
15847
  MdTextButton.styles = [styles$g, styles$6];
15848
15848
  MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
15849
15849
 
15850
+ /**
15851
+ * @license
15852
+ * Copyright 2025-2026 Open Home Foundation
15853
+ * SPDX-License-Identifier: Apache-2.0
15854
+ */
15855
+ const showNodeBindingDialog = async (client, node, endpoint) => {
15856
+ var _document$querySelect;
15857
+ await import('./node-binding-dialog-BI9spkUK.js');
15858
+ const dialog = document.createElement("node-binding-dialog");
15859
+ dialog.client = client;
15860
+ dialog.node = node;
15861
+ dialog.endpoint = endpoint;
15862
+ (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
15863
+ };
15864
+
15865
+ /**
15866
+ * @license
15867
+ * Copyright 2025-2026 Open Home Foundation
15868
+ * SPDX-License-Identifier: Apache-2.0
15869
+ */
15870
+ function handleAsync(fn, onError) {
15871
+ return () => {
15872
+ fn().catch(error => {
15873
+ console.error("Async operation failed:", error);
15874
+ });
15875
+ };
15876
+ }
15877
+ function fireAndForget(promise, onError) {
15878
+ promise.catch(error => {
15879
+ console.error("Async operation failed:", error);
15880
+ });
15881
+ }
15882
+
15850
15883
  /**
15851
15884
  * @license
15852
15885
  * Copyright 2025-2026 Open Home Foundation
@@ -16132,39 +16165,6 @@ function createWiFiRouterIconDataUrl(isSelected = false) {
16132
16165
  return createIconDataUrl(mdiWifi, color);
16133
16166
  }
16134
16167
 
16135
- /**
16136
- * @license
16137
- * Copyright 2025-2026 Open Home Foundation
16138
- * SPDX-License-Identifier: Apache-2.0
16139
- */
16140
- const showNodeBindingDialog = async (client, node, endpoint) => {
16141
- var _document$querySelect;
16142
- await import('./node-binding-dialog-CtmtVf1D.js');
16143
- const dialog = document.createElement("node-binding-dialog");
16144
- dialog.client = client;
16145
- dialog.node = node;
16146
- dialog.endpoint = endpoint;
16147
- (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
16148
- };
16149
-
16150
- /**
16151
- * @license
16152
- * Copyright 2025-2026 Open Home Foundation
16153
- * SPDX-License-Identifier: Apache-2.0
16154
- */
16155
- function handleAsync(fn, onError) {
16156
- return () => {
16157
- fn().catch(error => {
16158
- console.error("Async operation failed:", error);
16159
- });
16160
- };
16161
- }
16162
- function fireAndForget(promise, onError) {
16163
- promise.catch(error => {
16164
- console.error("Async operation failed:", error);
16165
- });
16166
- }
16167
-
16168
16168
  /**
16169
16169
  * @license
16170
16170
  * Copyright 2018 Google LLC
@@ -16403,7 +16403,9 @@ let NodeDetails = class extends i$4 {
16403
16403
  <ha-svg-icon slot="start" class="device-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
16404
16404
  <div slot="headline">
16405
16405
  <b>${this.node.nodeLabel || "Node Info"}</b>
16406
- ${this.node.available ? A : b`<span class="status">OFFLINE</span>`}
16406
+ ${this.node.available ? A : b`
16407
+ <span class="status">OFFLINE</span>
16408
+ `}
16407
16409
  </div>
16408
16410
  </md-list-item>
16409
16411
  <md-list-item>
@@ -18910,7 +18912,9 @@ let BasicInformationClusterCommands = class extends BaseClusterCommands {
18910
18912
  <details class="command-panel">
18911
18913
  <summary>Node Label</summary>
18912
18914
  <div class="command-content">
18913
- ${!this._isNodeAvailable ? b`<div class="offline-warning">Node is offline - cannot edit label</div>` : A}
18915
+ ${!this._isNodeAvailable ? b`
18916
+ <div class="offline-warning">Node is offline - cannot edit label</div>
18917
+ ` : A}
18914
18918
  <div class="command-row">
18915
18919
  <md-outlined-text-field
18916
18920
  label="Node Label"
@@ -19334,9 +19338,7 @@ let DashboardFooter = class extends i$4 {
19334
19338
  return b`
19335
19339
  <div class="footer">
19336
19340
  The OHF Matter Server is a project by the Open Home Foundation.
19337
- <a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank"
19338
- >Support development</a
19339
- >
19341
+ <a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank">Support development</a>
19340
19342
  </div>
19341
19343
  `;
19342
19344
  }
@@ -21156,7 +21158,9 @@ let UpdateConnectionsDialog = class extends i$4 {
21156
21158
  Update network data from its ${this.onlineNeighborIds.length} online
21157
21159
  neighbor${this.onlineNeighborIds.length !== 1 ? "s" : ""} to refresh connection info.
21158
21160
  </p>
21159
- ` : b` <p>No online neighbors available to update.</p> `}
21161
+ ` : b`
21162
+ <p>No online neighbors available to update.</p>
21163
+ `}
21160
21164
  `;
21161
21165
  }
21162
21166
  _renderUnknownContent() {
@@ -21168,7 +21172,9 @@ let UpdateConnectionsDialog = class extends i$4 {
21168
21172
  node${this.onlineNeighborIds.length !== 1 ? "s" : ""} that
21169
21173
  see${this.onlineNeighborIds.length === 1 ? "s" : ""} this device to refresh info.
21170
21174
  </p>
21171
- ` : b` <p>No online nodes available that see this device.</p> `}
21175
+ ` : b`
21176
+ <p>No online nodes available that see this device.</p>
21177
+ `}
21172
21178
  `;
21173
21179
  }
21174
21180
  render() {
@@ -21451,7 +21457,9 @@ let NetworkDetails = class extends i$4 {
21451
21457
  ${conn.rssi !== null ? b`RSSI: ${conn.rssi} dBm` : A}${conn.rssi !== null && conn.lqi !== null ? ", " : A}${conn.lqi !== null ? b`LQI: ${conn.lqi}` : A}${conn.bidirectionalLqi !== void 0 ? b`<span class="route-info"
21452
21458
  >, Bidir: ${conn.bidirectionalLqi}</span
21453
21459
  >` : A}${conn.pathCost !== void 0 ? b`<span class="route-info">, Cost: ${conn.pathCost}</span>` : A}
21454
- ${!conn.isOutgoing ? b`<span class="direction-hint">(reverse)</span>` : A}
21460
+ ${!conn.isOutgoing ? b`
21461
+ <span class="direction-hint">(reverse)</span>
21462
+ ` : A}
21455
21463
  </div>
21456
21464
  </div>
21457
21465
  </div>
@@ -21523,7 +21531,9 @@ let NetworkDetails = class extends i$4 {
21523
21531
  _renderUnknownDeviceInfo(deviceId) {
21524
21532
  const unknown = this.unknownDevices.get(deviceId);
21525
21533
  if (!unknown) {
21526
- return b`<p>Unknown device data not available</p>`;
21534
+ return b`
21535
+ <p>Unknown device data not available</p>
21536
+ `;
21527
21537
  }
21528
21538
  return b`
21529
21539
  <div class="section">
@@ -21683,7 +21693,9 @@ let NetworkDetails = class extends i$4 {
21683
21693
  _renderWiFiAccessPointInfo(apId) {
21684
21694
  const ap = this.wifiAccessPoints.get(apId);
21685
21695
  if (!ap) {
21686
- return b`<p>Access point data not available</p>`;
21696
+ return b`
21697
+ <p>Access point data not available</p>
21698
+ `;
21687
21699
  }
21688
21700
  return b`
21689
21701
  <div class="section">
@@ -30639,7 +30651,9 @@ let ThreadGraph = class extends BaseNetworkGraph {
30639
30651
  </div>
30640
30652
  `;
30641
30653
  }
30642
- return b`<div class="graph-container"></div>`;
30654
+ return b`
30655
+ <div class="graph-container"></div>
30656
+ `;
30643
30657
  }
30644
30658
  };
30645
30659
  ThreadGraph = __decorateClass$6([t$1("thread-graph")], ThreadGraph);
@@ -30783,7 +30797,9 @@ let WiFiGraph = class extends BaseNetworkGraph {
30783
30797
  </div>
30784
30798
  `;
30785
30799
  }
30786
- return b`<div class="graph-container"></div>`;
30800
+ return b`
30801
+ <div class="graph-container"></div>
30802
+ `;
30787
30803
  }
30788
30804
  };
30789
30805
  WiFiGraph = __decorateClass$5([t$1("wifi-graph")], WiFiGraph);
@@ -31345,7 +31361,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
31345
31361
  */
31346
31362
  const showCommissionNodeDialog = async client => {
31347
31363
  var _document$querySelect;
31348
- await import('./commission-node-dialog-DOtOjWT7.js');
31364
+ await import('./commission-node-dialog-h9QTg0uL.js');
31349
31365
  const dialog = document.createElement("commission-node-dialog");
31350
31366
  dialog.client = client;
31351
31367
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -31388,7 +31404,9 @@ let ServerDetails = class extends i$4 {
31388
31404
  <md-list-item>
31389
31405
  <div slot="headline">
31390
31406
  <b>Open Home Foundation Matter Server ${this.client.isProduction ? "" : `(${this.client.serverBaseAddress})`}</b>
31391
- ${this.client.connection.connected ? A : b`<span class="status">OFFLINE</span>`}
31407
+ ${this.client.connection.connected ? A : b`
31408
+ <span class="status">OFFLINE</span>
31409
+ `}
31392
31410
  </div>
31393
31411
  </md-list-item>
31394
31412
  <md-list-item>
@@ -31528,7 +31546,9 @@ let MatterServerView = class extends i$4 {
31528
31546
  <span class="hex-id"
31529
31547
  >(${formatNodeAddress(isTestNodeId(node.node_id) || this.client.serverInfo.fabric_index === void 0 ? void 0 : this.client.serverInfo.fabric_index, node.node_id)})</span
31530
31548
  >
31531
- ${node.available ? "" : b`<span class="status">OFFLINE</span>`}
31549
+ ${node.available ? "" : b`
31550
+ <span class="status">OFFLINE</span>
31551
+ `}
31532
31552
  </div>
31533
31553
  <div slot="supporting-text">
31534
31554
  ${node.nodeLabel ? `${node.nodeLabel} | ` : A} ${node.vendorName} |
@@ -1,121 +1,7 @@
1
- import { k as i, G as c, H as clientContext, n, a as e, i as i$1, A, j as b, F as handleAsync, t } from './matter-dashboard-app-Dq3JvQBw.js';
1
+ import { k as i, G as c, H as clientContext, n, a as e, i as i$1, A, j as b, F as handleAsync, t } from './matter-dashboard-app-Dpr9EPlS.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
5
- var _staticBlock$1;
6
- /**
7
- * @license
8
- * Copyright 2025-2026 Open Home Foundation
9
- * SPDX-License-Identifier: Apache-2.0
10
- */
11
- class BindingEntryDataTransformer {
12
- static transform(input) {
13
- if (!input || typeof input !== "object") {
14
- throw new Error("Invalid input: expected an object");
15
- }
16
- const result = {};
17
- const keyMapping = BindingEntryDataTransformer.KEY_MAPPING;
18
- for (const key in input) {
19
- if (key in keyMapping) {
20
- const mappedKey = keyMapping[key];
21
- if (mappedKey) {
22
- const value = input[key];
23
- if (value === void 0) {
24
- continue;
25
- }
26
- if (mappedKey === "fabricIndex") {
27
- result[mappedKey] = value === void 0 ? void 0 : Number(value);
28
- } else if (mappedKey === "node" || mappedKey === "endpoint") {
29
- result[mappedKey] = Number(value);
30
- } else {
31
- result[mappedKey] = value;
32
- }
33
- }
34
- }
35
- }
36
- return result;
37
- }
38
- static #_ = _staticBlock$1 = () => this.KEY_MAPPING = {
39
- "1": "node",
40
- "3": "endpoint",
41
- "4": "cluster",
42
- "254": "fabricIndex"
43
- };
44
- }
45
- _staticBlock$1();
46
-
47
- var _staticBlock, _staticBlock2;
48
- /**
49
- * @license
50
- * Copyright 2025-2026 Open Home Foundation
51
- * SPDX-License-Identifier: Apache-2.0
52
- */
53
- class AccessControlTargetTransformer {
54
- static transform(input) {
55
- if (!input || typeof input !== "object") {
56
- throw new Error("Invalid input: expected an object");
57
- }
58
- const result = {};
59
- const keyMapping = AccessControlTargetTransformer.KEY_MAPPING;
60
- for (const key in input) {
61
- if (key in keyMapping) {
62
- const mappedKey = keyMapping[key];
63
- if (mappedKey) {
64
- const value = input[key];
65
- if (value === void 0) continue;
66
- result[mappedKey] = value;
67
- }
68
- }
69
- }
70
- return result;
71
- }
72
- static #_ = _staticBlock = () => this.KEY_MAPPING = {
73
- "0": "cluster",
74
- "1": "endpoint",
75
- "2": "deviceType"
76
- };
77
- }
78
- _staticBlock();
79
- class AccessControlEntryDataTransformer {
80
- static transform(input) {
81
- if (!input || typeof input !== "object") {
82
- throw new Error("Invalid input: expected an object");
83
- }
84
- const result = {};
85
- const keyMapping = AccessControlEntryDataTransformer.KEY_MAPPING;
86
- for (const key in input) {
87
- if (key in keyMapping) {
88
- const mappedKey = keyMapping[key];
89
- if (mappedKey) {
90
- const value = input[key];
91
- if (value === void 0) continue;
92
- if (mappedKey === "subjects") {
93
- result[mappedKey] = Array.isArray(value) ? value : void 0;
94
- } else if (mappedKey === "targets") {
95
- if (Array.isArray(value)) {
96
- const _targets = Object.values(value).map(val => AccessControlTargetTransformer.transform(val));
97
- result[mappedKey] = _targets;
98
- } else {
99
- result[mappedKey] = void 0;
100
- }
101
- } else {
102
- result[mappedKey] = value;
103
- }
104
- }
105
- }
106
- }
107
- return result;
108
- }
109
- static #_ = _staticBlock2 = () => this.KEY_MAPPING = {
110
- "1": "privilege",
111
- "2": "authMode",
112
- "3": "subjects",
113
- "4": "targets",
114
- "254": "fabricIndex"
115
- };
116
- }
117
- _staticBlock2();
118
-
119
5
  /**
120
6
  * @license
121
7
  * Copyright 2025-2026 Open Home Foundation
@@ -214,6 +100,120 @@ function formatBatchMessage(outcome, successCount, failureCount, errorCounts) {
214
100
  return `Partial failure: ${successCount} ${entryWord(successCount)} succeeded, ${failureCount} failed (${errorParts}). Please verify.`;
215
101
  }
216
102
 
103
+ var _staticBlock$1, _staticBlock2;
104
+ /**
105
+ * @license
106
+ * Copyright 2025-2026 Open Home Foundation
107
+ * SPDX-License-Identifier: Apache-2.0
108
+ */
109
+ class AccessControlTargetTransformer {
110
+ static transform(input) {
111
+ if (!input || typeof input !== "object") {
112
+ throw new Error("Invalid input: expected an object");
113
+ }
114
+ const result = {};
115
+ const keyMapping = AccessControlTargetTransformer.KEY_MAPPING;
116
+ for (const key in input) {
117
+ if (key in keyMapping) {
118
+ const mappedKey = keyMapping[key];
119
+ if (mappedKey) {
120
+ const value = input[key];
121
+ if (value === void 0) continue;
122
+ result[mappedKey] = value;
123
+ }
124
+ }
125
+ }
126
+ return result;
127
+ }
128
+ static #_ = _staticBlock$1 = () => this.KEY_MAPPING = {
129
+ "0": "cluster",
130
+ "1": "endpoint",
131
+ "2": "deviceType"
132
+ };
133
+ }
134
+ _staticBlock$1();
135
+ class AccessControlEntryDataTransformer {
136
+ static transform(input) {
137
+ if (!input || typeof input !== "object") {
138
+ throw new Error("Invalid input: expected an object");
139
+ }
140
+ const result = {};
141
+ const keyMapping = AccessControlEntryDataTransformer.KEY_MAPPING;
142
+ for (const key in input) {
143
+ if (key in keyMapping) {
144
+ const mappedKey = keyMapping[key];
145
+ if (mappedKey) {
146
+ const value = input[key];
147
+ if (value === void 0) continue;
148
+ if (mappedKey === "subjects") {
149
+ result[mappedKey] = Array.isArray(value) ? value : void 0;
150
+ } else if (mappedKey === "targets") {
151
+ if (Array.isArray(value)) {
152
+ const _targets = Object.values(value).map(val => AccessControlTargetTransformer.transform(val));
153
+ result[mappedKey] = _targets;
154
+ } else {
155
+ result[mappedKey] = void 0;
156
+ }
157
+ } else {
158
+ result[mappedKey] = value;
159
+ }
160
+ }
161
+ }
162
+ }
163
+ return result;
164
+ }
165
+ static #_ = _staticBlock2 = () => this.KEY_MAPPING = {
166
+ "1": "privilege",
167
+ "2": "authMode",
168
+ "3": "subjects",
169
+ "4": "targets",
170
+ "254": "fabricIndex"
171
+ };
172
+ }
173
+ _staticBlock2();
174
+
175
+ var _staticBlock;
176
+ /**
177
+ * @license
178
+ * Copyright 2025-2026 Open Home Foundation
179
+ * SPDX-License-Identifier: Apache-2.0
180
+ */
181
+ class BindingEntryDataTransformer {
182
+ static transform(input) {
183
+ if (!input || typeof input !== "object") {
184
+ throw new Error("Invalid input: expected an object");
185
+ }
186
+ const result = {};
187
+ const keyMapping = BindingEntryDataTransformer.KEY_MAPPING;
188
+ for (const key in input) {
189
+ if (key in keyMapping) {
190
+ const mappedKey = keyMapping[key];
191
+ if (mappedKey) {
192
+ const value = input[key];
193
+ if (value === void 0) {
194
+ continue;
195
+ }
196
+ if (mappedKey === "fabricIndex") {
197
+ result[mappedKey] = value === void 0 ? void 0 : Number(value);
198
+ } else if (mappedKey === "node" || mappedKey === "endpoint") {
199
+ result[mappedKey] = Number(value);
200
+ } else {
201
+ result[mappedKey] = value;
202
+ }
203
+ }
204
+ }
205
+ }
206
+ return result;
207
+ }
208
+ static #_ = _staticBlock = () => this.KEY_MAPPING = {
209
+ "1": "node",
210
+ "3": "endpoint",
211
+ "4": "cluster",
212
+ "254": "fabricIndex"
213
+ };
214
+ }
215
+ _staticBlock();
216
+
217
217
  var __defProp = Object.defineProperty;
218
218
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
219
219
  var __decorateClass = (decorators, target, key, kind) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/dashboard",
3
- "version": "0.3.6",
3
+ "version": "0.3.7",
4
4
  "description": "Dashboard for OHF Matter Server",
5
5
  "bugs": {
6
6
  "url": "https://github.com/matter-js/matterjs-server/issues"
@@ -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.6",
41
- "@matter-server/custom-clusters": "0.3.6",
40
+ "@matter-server/ws-client": "0.3.7",
41
+ "@matter-server/custom-clusters": "0.3.7",
42
42
  "@mdi/js": "^7.4.47",
43
43
  "lit": "^3.3.2",
44
44
  "tslib": "^2.8.1",
@@ -24,19 +24,25 @@ 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
28
- ? html`<div slot="content">
29
- ${params.asCodeBlock && typeof params.text === "string"
30
- ? html`<code>${params.text}</code>`
31
- : params.text}
27
+ ${
28
+ params.text
29
+ ? html`<div slot="content">
30
+ ${
31
+ params.asCodeBlock && typeof params.text === "string"
32
+ ? html`<code>${params.text}</code>`
33
+ : params.text
34
+ }
32
35
  </div>`
33
- : ""}
36
+ : ""
37
+ }
34
38
  <div slot="actions">
35
- ${this.type === "prompt"
36
- ? html`
39
+ ${
40
+ this.type === "prompt"
41
+ ? html`
37
42
  <md-text-button @click=${this._cancel}>${params.cancelText ?? "Cancel"}</md-text-button>
38
43
  `
39
- : ""}
44
+ : ""
45
+ }
40
46
  <md-text-button @click=${this._confirm}>${params.confirmText ?? "OK"}</md-text-button>
41
47
  </div>
42
48
  </md-dialog>
@@ -6,29 +6,26 @@
6
6
 
7
7
  import "@material/web/button/text-button";
8
8
  import "@material/web/dialog/dialog";
9
- import type { MdDialog } from "@material/web/dialog/dialog.js";
9
+ import { consume } from "@lit/context";
10
10
  import "@material/web/list/list";
11
11
  import "@material/web/list/list-item";
12
12
  import "@material/web/textfield/outlined-text-field";
13
- import type { MdOutlinedTextField } from "@material/web/textfield/outlined-text-field.js";
13
+ import type { MdDialog } from "@material/web/dialog/dialog.js";
14
14
  import "../../../components/ha-svg-icon";
15
-
15
+ import type { MdOutlinedTextField } from "@material/web/textfield/outlined-text-field.js";
16
16
  import { AccessControlEntry, BindingTarget, MatterClient, MatterNode } from "@matter-server/ws-client";
17
17
  import { css, html, LitElement, nothing } from "lit";
18
18
  import { customElement, property, query } from "lit/decorators.js";
19
+ import { clientContext } from "../../../client/client-context.js";
19
20
  import { handleAsync } from "../../../util/async-handler.js";
21
+ import { analyzeBatchResults, type MatterBatchResult } from "../../../util/matter-status.js";
20
22
  import { preventDefault } from "../../../util/prevent_default.js";
21
- import { BindingEntryDataTransformer, BindingEntryStruct, InputType } from "./model.js";
22
-
23
23
  import {
24
24
  AccessControlEntryDataTransformer,
25
25
  AccessControlEntryStruct,
26
26
  AccessControlTargetStruct,
27
27
  } from "../acl/model.js";
28
-
29
- import { consume } from "@lit/context";
30
- import { clientContext } from "../../../client/client-context.js";
31
- import { analyzeBatchResults, type MatterBatchResult } from "../../../util/matter-status.js";
28
+ import { BindingEntryDataTransformer, BindingEntryStruct, InputType } from "./model.js";
32
29
 
33
30
  @customElement("node-binding-dialog")
34
31
  export class NodeBindingDialog extends LitElement {
@@ -25,8 +25,9 @@ export class ComissionNodeDialog extends LitElement {
25
25
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
26
26
  <div slot="headline">Commission node</div>
27
27
  <div slot="content" @node-commissioned=${this._nodeCommissioned}>
28
- ${!this._mode
29
- ? html`<md-list>
28
+ ${
29
+ !this._mode
30
+ ? html`<md-list>
30
31
  <md-list-item
31
32
  type="button"
32
33
  .disabled=${!this.client.serverInfo.bluetooth_enabled}
@@ -43,11 +44,18 @@ export class ComissionNodeDialog extends LitElement {
43
44
  >Commission existing device</md-list-item
44
45
  >
45
46
  </md-list>`
46
- : this._mode === "wifi"
47
- ? html`<commission-node-wifi></commission-node-wifi>`
48
- : this._mode === "thread"
49
- ? html`<commission-node-thread></commission-node-thread>`
50
- : html`<commission-node-existing></commission-node-existing>`}
47
+ : this._mode === "wifi"
48
+ ? html`
49
+ <commission-node-wifi></commission-node-wifi>
50
+ `
51
+ : this._mode === "thread"
52
+ ? html`
53
+ <commission-node-thread></commission-node-thread>
54
+ `
55
+ : html`
56
+ <commission-node-existing></commission-node-existing>
57
+ `
58
+ }
51
59
  </div>
52
60
  <div slot="actions">
53
61
  <md-text-button @click=${this._close}>Cancel</md-text-button>
@@ -33,7 +33,13 @@ export class CommissionNodeExisting extends LitElement {
33
33
  <br />
34
34
  <md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
35
35
  >Commission</md-outlined-button
36
- >${this._loading ? html`<md-circular-progress indeterminate></md-circular-progress>` : nothing}`;
36
+ >${
37
+ this._loading
38
+ ? html`
39
+ <md-circular-progress indeterminate></md-circular-progress>
40
+ `
41
+ : nothing
42
+ }`;
37
43
  }
38
44
 
39
45
  private async _commissionNode() {
@@ -37,14 +37,26 @@ export class CommissionNodeThread extends LitElement {
37
37
  <br />
38
38
  <md-outlined-button @click=${handleAsync(() => this._setThreadDataset())} .disabled="${this._loading}"
39
39
  >Set Thread Dataset</md-outlined-button
40
- >${this._loading ? html`<md-circular-progress indeterminate></md-circular-progress>` : nothing}`;
40
+ >${
41
+ this._loading
42
+ ? html`
43
+ <md-circular-progress indeterminate></md-circular-progress>
44
+ `
45
+ : nothing
46
+ }`;
41
47
  }
42
48
  return html`<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
43
49
  <br />
44
50
  <br />
45
51
  <md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
46
52
  >Commission</md-outlined-button
47
- >${this._loading ? html`<md-circular-progress indeterminate></md-circular-progress>` : nothing}`;
53
+ >${
54
+ this._loading
55
+ ? html`
56
+ <md-circular-progress indeterminate></md-circular-progress>
57
+ `
58
+ : nothing
59
+ }`;
48
60
  }
49
61
 
50
62
  private async _setThreadDataset() {