@matter-server/dashboard 0.5.10 → 0.5.12

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 (86) 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/commission-node-dialog/commission-node-dialog.d.ts.map +1 -1
  4. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +1 -7
  5. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +1 -1
  6. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -1
  7. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +1 -3
  8. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +1 -1
  9. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -1
  10. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +7 -7
  11. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +1 -1
  12. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -1
  13. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +1 -3
  14. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
  15. package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
  16. package/dist/esm/components/dialogs/settings/log-level-dialog.js +1 -3
  17. package/dist/esm/components/dialogs/settings/log-level-dialog.js.map +1 -1
  18. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts.map +1 -1
  19. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js +1 -3
  20. package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +1 -1
  21. package/dist/esm/pages/components/footer.d.ts.map +1 -1
  22. package/dist/esm/pages/components/footer.js +3 -1
  23. package/dist/esm/pages/components/footer.js.map +1 -1
  24. package/dist/esm/pages/components/header.d.ts.map +1 -1
  25. package/dist/esm/pages/components/header.js.map +1 -1
  26. package/dist/esm/pages/components/node-details.d.ts.map +1 -1
  27. package/dist/esm/pages/components/node-details.js +10 -13
  28. package/dist/esm/pages/components/node-details.js.map +1 -1
  29. package/dist/esm/pages/components/server-details.d.ts.map +1 -1
  30. package/dist/esm/pages/components/server-details.js +1 -3
  31. package/dist/esm/pages/components/server-details.js.map +1 -1
  32. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  33. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  34. package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
  35. package/dist/esm/pages/matter-network-view.js +2 -2
  36. package/dist/esm/pages/matter-network-view.js.map +1 -1
  37. package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
  38. package/dist/esm/pages/matter-node-view.js.map +1 -1
  39. package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
  40. package/dist/esm/pages/matter-server-view.js +1 -3
  41. package/dist/esm/pages/matter-server-view.js.map +1 -1
  42. package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
  43. package/dist/esm/pages/network/device-panel.js.map +1 -1
  44. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  45. package/dist/esm/pages/network/network-details.js +73 -74
  46. package/dist/esm/pages/network/network-details.js.map +1 -1
  47. package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
  48. package/dist/esm/pages/network/thread-graph.js +1 -3
  49. package/dist/esm/pages/network/thread-graph.js.map +1 -1
  50. package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
  51. package/dist/esm/pages/network/update-connections-dialog.js +2 -6
  52. package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
  53. package/dist/esm/pages/network/wifi-graph.d.ts.map +1 -1
  54. package/dist/esm/pages/network/wifi-graph.js +1 -3
  55. package/dist/esm/pages/network/wifi-graph.js.map +1 -1
  56. package/dist/web/js/{commission-node-dialog-B8btRo-u.js → commission-node-dialog-C3vakpfo.js} +5 -11
  57. package/dist/web/js/{commission-node-existing-DV3Mdryb.js → commission-node-existing-D3r5Plch.js} +3 -5
  58. package/dist/web/js/{commission-node-thread-CRmXG-l7.js → commission-node-thread-C9ECK9dL.js} +9 -9
  59. package/dist/web/js/{commission-node-wifi-B9czrkgM.js → commission-node-wifi-DlG5s0i_.js} +3 -5
  60. package/dist/web/js/{dialog-box-D1T172PR.js → dialog-box-Bi0vD6U9.js} +1 -1
  61. package/dist/web/js/{fire_event-CpzR8zJR.js → fire_event-Cy9Y-JEv.js} +1 -1
  62. package/dist/web/js/{log-level-dialog-Dlvacuei.js → log-level-dialog-B7jqYNxe.js} +2 -4
  63. package/dist/web/js/main.js +1 -1
  64. package/dist/web/js/{matter-dashboard-app-CJAvDfru.js → matter-dashboard-app-BiNu4m8W.js} +97 -115
  65. package/dist/web/js/{node-binding-dialog-CTsnRoFC.js → node-binding-dialog-BmjRJ8c2.js} +1 -1
  66. package/package.json +5 -5
  67. package/src/components/dialog-box/dialog-box.ts +9 -15
  68. package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +7 -15
  69. package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +1 -7
  70. package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +7 -15
  71. package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +4 -12
  72. package/src/components/dialogs/settings/log-level-dialog.ts +7 -13
  73. package/src/pages/cluster-commands/clusters/basic-information-commands.ts +3 -7
  74. package/src/pages/components/footer.ts +3 -1
  75. package/src/pages/components/header.ts +15 -25
  76. package/src/pages/components/node-details.ts +29 -46
  77. package/src/pages/components/server-details.ts +1 -7
  78. package/src/pages/matter-cluster-view.ts +5 -9
  79. package/src/pages/matter-network-view.ts +7 -11
  80. package/src/pages/matter-node-view.ts +3 -5
  81. package/src/pages/matter-server-view.ts +1 -7
  82. package/src/pages/network/device-panel.ts +3 -5
  83. package/src/pages/network/network-details.ts +146 -192
  84. package/src/pages/network/thread-graph.ts +1 -3
  85. package/src/pages/network/update-connections-dialog.ts +17 -31
  86. package/src/pages/network/wifi-graph.ts +1 -3
@@ -1,4 +1,4 @@
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 o$1, j as b, E as EASING, k as i$1, t, V as Validator, D, m as mixinDelegatesAria, l as mixinOnReportValidity, p as mixinConstraintValidation, q as mixinFormAssociated, s as mixinElementInternals, u as onReportValidity, v as u, w as redispatchEvent, x as getFormValue, y as createValidator, z as getValidityAnchor, B as i$2, C as fireAndForget, F as handleAsync } from './matter-dashboard-app-CJAvDfru.js';
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 o$1, j as b, E as EASING, k as i$1, t, V as Validator, D, m as mixinDelegatesAria, l as mixinOnReportValidity, p as mixinConstraintValidation, q as mixinFormAssociated, s as mixinElementInternals, u as onReportValidity, v as u, w as redispatchEvent, x as getFormValue, y as createValidator, z as getValidityAnchor, B as i$2, C as fireAndForget, F as handleAsync } from './matter-dashboard-app-BiNu4m8W.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -3146,9 +3146,7 @@ let LogLevelDialog = class extends i {
3146
3146
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
3147
3147
  <div slot="headline">Server Log Settings</div>
3148
3148
  <div slot="content">
3149
- ${this._loading ? b`
3150
- <p class="loading">Loading...</p>
3151
- ` : b`
3149
+ ${this._loading ? b` <p class="loading">Loading...</p> ` : b`
3152
3150
  <p class="hint">Changes are temporary and will be reset on the next server restart.</p>
3153
3151
  <div class="form-field">
3154
3152
  <label>Console Log Level</label>
@@ -752,7 +752,7 @@ const ThemeService = new ThemeServiceImpl();
752
752
  * SPDX-License-Identifier: Apache-2.0
753
753
  */
754
754
  async function main() {
755
- import('./matter-dashboard-app-CJAvDfru.js').then(function (n) { return n.I; });
755
+ import('./matter-dashboard-app-BiNu4m8W.js').then(function (n) { return n.I; });
756
756
  let url = "";
757
757
  const isProductionServer = window.__MATTERJS_PRODUCTION_MODE__ === true || location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
758
758
  if (!isProductionServer) {
@@ -4026,7 +4026,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
4026
4026
  */
4027
4027
  const showLogLevelDialog = async client => {
4028
4028
  var _document$querySelect;
4029
- await import('./log-level-dialog-Dlvacuei.js');
4029
+ await import('./log-level-dialog-B7jqYNxe.js');
4030
4030
  const dialog = document.createElement("log-level-dialog");
4031
4031
  dialog.client = client;
4032
4032
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -15728,7 +15728,7 @@ const clusters = {
15728
15728
  * SPDX-License-Identifier: Apache-2.0
15729
15729
  */
15730
15730
  const showDialogBox = async (type, dialogParams) => {
15731
- await import('./dialog-box-D1T172PR.js');
15731
+ await import('./dialog-box-Bi0vD6U9.js');
15732
15732
  return new Promise(resolve => {
15733
15733
  const dialog = document.createElement("dialog-box");
15734
15734
  dialog.params = dialogParams;
@@ -15902,7 +15902,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
15902
15902
  */
15903
15903
  const showNodeBindingDialog = async (client, node, endpoint) => {
15904
15904
  var _document$querySelect;
15905
- await import('./node-binding-dialog-CTsnRoFC.js');
15905
+ await import('./node-binding-dialog-BmjRJ8c2.js');
15906
15906
  const dialog = document.createElement("node-binding-dialog");
15907
15907
  dialog.client = client;
15908
15908
  dialog.node = node;
@@ -16469,9 +16469,7 @@ let NodeDetails = class extends i$4 {
16469
16469
  <ha-svg-icon slot="start" class="device-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
16470
16470
  <div slot="headline">
16471
16471
  <b>${this.node.nodeLabel || "Node Info"}</b>
16472
- ${this.node.available ? A : b`
16473
- <span class="status">OFFLINE</span>
16474
- `}
16472
+ ${this.node.available ? A : b` <span class="status">OFFLINE</span> `}
16475
16473
  </div>
16476
16474
  </md-list-item>
16477
16475
  <md-list-item>
@@ -16583,23 +16581,22 @@ let NodeDetails = class extends i$4 {
16583
16581
  const isUnverifiedSource = nodeUpdate.update_source !== UpdateSource.MAIN_NET_DCL;
16584
16582
  if (!(await showPromptDialog({
16585
16583
  title: "Firmware update available",
16586
- text: b`Found a firmware update for this node on
16587
- <b>${nodeUpdate.update_source}</b>.
16584
+ text: b`Found a firmware update for this node on <b>${nodeUpdate.update_source}</b>.
16588
16585
  ${isUnverifiedSource ? b`
16589
- <p
16590
- style="
16586
+ <p
16587
+ style="
16591
16588
  background: var(--md-sys-color-error, #b3261e);
16592
16589
  color: var(--md-sys-color-on-error, #fff);
16593
16590
  padding: 8px 12px;
16594
16591
  border-radius: 4px;
16595
16592
  font-weight: bold;
16596
16593
  "
16597
- >
16598
- Warning: This update was found on an unverified source. Updates from test-net or local sources have not been
16599
- certified and may contain untested firmware that could result in non-functional devices. Applying these updates is
16600
- entirely at your own risk.
16601
- </p>
16602
- ` : A}
16594
+ >
16595
+ Warning: This update was found on an unverified source. Updates from test-net or local
16596
+ sources have not been certified and may contain untested firmware that could result in
16597
+ non-functional devices. Applying these updates is entirely at your own risk.
16598
+ </p>
16599
+ ` : A}
16603
16600
  <p>
16604
16601
  Do you want to update this node to version
16605
16602
  <b>${nodeUpdate.software_version_string}</b>?
@@ -18999,9 +18996,7 @@ let BasicInformationClusterCommands = class extends BaseClusterCommands {
18999
18996
  <details class="command-panel">
19000
18997
  <summary>Node Label</summary>
19001
18998
  <div class="command-content">
19002
- ${!this._isNodeAvailable ? b`
19003
- <div class="offline-warning">Node is offline - cannot edit label</div>
19004
- ` : A}
18999
+ ${!this._isNodeAvailable ? b` <div class="offline-warning">Node is offline - cannot edit label</div> ` : A}
19005
19000
  <div class="command-row">
19006
19001
  <md-outlined-text-field
19007
19002
  label="Node Label"
@@ -19425,7 +19420,9 @@ let DashboardFooter = class extends i$4 {
19425
19420
  return b`
19426
19421
  <div class="footer">
19427
19422
  The OHF Matter Server is a project by the Open Home Foundation.
19428
- <a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank">Support development</a>
19423
+ <a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank"
19424
+ >Support development</a
19425
+ >
19429
19426
  </div>
19430
19427
  `;
19431
19428
  }
@@ -21275,9 +21272,7 @@ let UpdateConnectionsDialog = class extends i$4 {
21275
21272
  Update network data from its ${this.onlineNeighborIds.length} online
21276
21273
  neighbor${this.onlineNeighborIds.length !== 1 ? "s" : ""} to refresh connection info.
21277
21274
  </p>
21278
- ` : b`
21279
- <p>No online neighbors available to update.</p>
21280
- `}
21275
+ ` : b` <p>No online neighbors available to update.</p> `}
21281
21276
  `;
21282
21277
  }
21283
21278
  _renderUnknownContent() {
@@ -21289,9 +21284,7 @@ let UpdateConnectionsDialog = class extends i$4 {
21289
21284
  node${this.onlineNeighborIds.length !== 1 ? "s" : ""} that
21290
21285
  see${this.onlineNeighborIds.length === 1 ? "s" : ""} this device to refresh info.
21291
21286
  </p>
21292
- ` : b`
21293
- <p>No online nodes available that see this device.</p>
21294
- `}
21287
+ ` : b` <p>No online nodes available that see this device.</p> `}
21295
21288
  `;
21296
21289
  }
21297
21290
  render() {
@@ -21564,35 +21557,36 @@ let NetworkDetails = class extends i$4 {
21564
21557
  return score(b) - score(a);
21565
21558
  }).map(conn => {
21566
21559
  return b`
21567
- <div
21568
- class="neighbor-item clickable"
21569
- role="button"
21570
- tabindex="0"
21571
- @click=${() => this._handleSelectNode(conn.connectedNodeId)}
21572
- @keydown=${e => this._handleKeyDown(e, conn.connectedNodeId)}
21573
- >
21574
- <ha-svg-icon
21575
- .path=${this._getSignalIconFromColor(conn.signalColor)}
21576
- style="--icon-primary-color: ${conn.signalColor}"
21577
- ></ha-svg-icon>
21578
- <div class="neighbor-info">
21579
- <div class="neighbor-name">
21580
- ${conn.connectedNode ? b`Node ${conn.connectedNodeId}
21581
- <span class="node-id-hex"
21582
- >${this._formatNodeIdHex(conn.connectedNodeId)}</span
21583
- >: ${getDeviceName(conn.connectedNode)}` : b`External: <span class="mono">${conn.extAddressHex}</span>`}
21584
- </div>
21585
- <div class="neighbor-signal">
21586
- ${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"
21587
- >, Bidir: ${conn.bidirectionalLqi}</span
21588
- >` : A}${conn.pathCost !== void 0 ? b`<span class="route-info">, Cost: ${conn.pathCost}</span>` : A}
21589
- ${!conn.isOutgoing ? b`
21590
- <span class="direction-hint">(reverse)</span>
21591
- ` : A}
21560
+ <div
21561
+ class="neighbor-item clickable"
21562
+ role="button"
21563
+ tabindex="0"
21564
+ @click=${() => this._handleSelectNode(conn.connectedNodeId)}
21565
+ @keydown=${e => this._handleKeyDown(e, conn.connectedNodeId)}
21566
+ >
21567
+ <ha-svg-icon
21568
+ .path=${this._getSignalIconFromColor(conn.signalColor)}
21569
+ style="--icon-primary-color: ${conn.signalColor}"
21570
+ ></ha-svg-icon>
21571
+ <div class="neighbor-info">
21572
+ <div class="neighbor-name">
21573
+ ${conn.connectedNode ? b`Node ${conn.connectedNodeId}
21574
+ <span class="node-id-hex"
21575
+ >${this._formatNodeIdHex(conn.connectedNodeId)}</span
21576
+ >: ${getDeviceName(conn.connectedNode)}` : b`External:
21577
+ <span class="mono">${conn.extAddressHex}</span>`}
21578
+ </div>
21579
+ <div class="neighbor-signal">
21580
+ ${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"
21581
+ >, Bidir: ${conn.bidirectionalLqi}</span
21582
+ >` : A}${conn.pathCost !== void 0 ? b`<span class="route-info"
21583
+ >, Cost: ${conn.pathCost}</span
21584
+ >` : A}
21585
+ ${!conn.isOutgoing ? b` <span class="direction-hint">(reverse)</span> ` : A}
21586
+ </div>
21592
21587
  </div>
21593
21588
  </div>
21594
- </div>
21595
- `;
21589
+ `;
21596
21590
  })}
21597
21591
  </div>
21598
21592
  </div>
@@ -21660,9 +21654,7 @@ let NetworkDetails = class extends i$4 {
21660
21654
  _renderUnknownDeviceInfo(deviceId) {
21661
21655
  const unknown = this.unknownDevices.get(deviceId);
21662
21656
  if (!unknown) {
21663
- return b`
21664
- <p>Unknown device data not available</p>
21665
- `;
21657
+ return b` <p>Unknown device data not available</p> `;
21666
21658
  }
21667
21659
  return b`
21668
21660
  <div class="section">
@@ -21708,34 +21700,34 @@ let NetworkDetails = class extends i$4 {
21708
21700
  const rssi = (neighborEntry === null || neighborEntry === void 0 ? void 0 : neighborEntry.avgRssi) ?? (neighborEntry === null || neighborEntry === void 0 ? void 0 : neighborEntry.lastRssi) ?? null;
21709
21701
  const lqi = neighborEntry === null || neighborEntry === void 0 ? void 0 : neighborEntry.lqi;
21710
21702
  return b`
21711
- <div
21712
- class="neighbor-item clickable"
21713
- role="button"
21714
- tabindex="0"
21715
- @click=${() => this._handleSelectNode(nodeId)}
21716
- @keydown=${e => this._handleKeyDown(e, nodeId)}
21717
- >
21718
- ${neighborEntry ? b`
21719
- <ha-svg-icon
21720
- .path=${this._getSignalIcon(neighborEntry)}
21721
- style="--icon-primary-color: ${signalColor}"
21722
- ></ha-svg-icon>
21723
- ` : A}
21724
- <div class="neighbor-info">
21725
- <div class="neighbor-name">
21726
- Node ${nodeId}
21727
- <span class="node-id-hex">${this._formatNodeIdHex(nodeId)}</span>:
21728
- ${getDeviceName(node)}
21729
- </div>
21703
+ <div
21704
+ class="neighbor-item clickable"
21705
+ role="button"
21706
+ tabindex="0"
21707
+ @click=${() => this._handleSelectNode(nodeId)}
21708
+ @keydown=${e => this._handleKeyDown(e, nodeId)}
21709
+ >
21730
21710
  ${neighborEntry ? b`
21731
- <div class="neighbor-signal">
21732
- ${rssi !== null ? b`RSSI: ${rssi} dBm, ` : A}
21733
- ${lqi !== void 0 ? b`LQI: ${lqi}` : A}
21734
- </div>
21711
+ <ha-svg-icon
21712
+ .path=${this._getSignalIcon(neighborEntry)}
21713
+ style="--icon-primary-color: ${signalColor}"
21714
+ ></ha-svg-icon>
21735
21715
  ` : A}
21716
+ <div class="neighbor-info">
21717
+ <div class="neighbor-name">
21718
+ Node ${nodeId}
21719
+ <span class="node-id-hex">${this._formatNodeIdHex(nodeId)}</span>:
21720
+ ${getDeviceName(node)}
21721
+ </div>
21722
+ ${neighborEntry ? b`
21723
+ <div class="neighbor-signal">
21724
+ ${rssi !== null ? b`RSSI: ${rssi} dBm, ` : A}
21725
+ ${lqi !== void 0 ? b`LQI: ${lqi}` : A}
21726
+ </div>
21727
+ ` : A}
21728
+ </div>
21736
21729
  </div>
21737
- </div>
21738
- `;
21730
+ `;
21739
21731
  })}
21740
21732
  </div>
21741
21733
  </div>
@@ -21837,9 +21829,7 @@ let NetworkDetails = class extends i$4 {
21837
21829
  _renderWiFiAccessPointInfo(apId) {
21838
21830
  const ap = this.wifiAccessPoints.get(apId);
21839
21831
  if (!ap) {
21840
- return b`
21841
- <p>Access point data not available</p>
21842
- `;
21832
+ return b` <p>Access point data not available</p> `;
21843
21833
  }
21844
21834
  return b`
21845
21835
  <div class="section">
@@ -21871,23 +21861,23 @@ let NetworkDetails = class extends i$4 {
21871
21861
  const wifiDiag = getWiFiDiagnostics(node);
21872
21862
  const signalColor = getSignalColorFromRssi(wifiDiag.rssi);
21873
21863
  return b`
21874
- <div
21875
- class="connected-node-item clickable"
21876
- role="button"
21877
- tabindex="0"
21878
- @click=${() => this._handleSelectNode(nodeId)}
21879
- @keydown=${e => this._handleKeyDown(e, nodeId)}
21880
- >
21881
- <div class="node-name">
21882
- Node ${nodeId}
21883
- <span class="node-id-hex">${this._formatNodeIdHex(nodeId)}</span>:
21884
- ${getDeviceName(node)}
21864
+ <div
21865
+ class="connected-node-item clickable"
21866
+ role="button"
21867
+ tabindex="0"
21868
+ @click=${() => this._handleSelectNode(nodeId)}
21869
+ @keydown=${e => this._handleKeyDown(e, nodeId)}
21870
+ >
21871
+ <div class="node-name">
21872
+ Node ${nodeId}
21873
+ <span class="node-id-hex">${this._formatNodeIdHex(nodeId)}</span>:
21874
+ ${getDeviceName(node)}
21875
+ </div>
21876
+ ${wifiDiag.rssi !== null ? b`<div class="node-signal" style="color: ${signalColor}">
21877
+ ${wifiDiag.rssi} dBm
21878
+ </div>` : A}
21885
21879
  </div>
21886
- ${wifiDiag.rssi !== null ? b`<div class="node-signal" style="color: ${signalColor}">
21887
- ${wifiDiag.rssi} dBm
21888
- </div>` : A}
21889
- </div>
21890
- `;
21880
+ `;
21891
21881
  })}
21892
21882
  </div>
21893
21883
  </div>
@@ -30835,9 +30825,7 @@ let ThreadGraph = class extends BaseNetworkGraph {
30835
30825
  </div>
30836
30826
  `;
30837
30827
  }
30838
- return b`
30839
- <div class="graph-container"></div>
30840
- `;
30828
+ return b` <div class="graph-container"></div> `;
30841
30829
  }
30842
30830
  };
30843
30831
  ThreadGraph = __decorateClass$6([t$1("thread-graph")], ThreadGraph);
@@ -30993,9 +30981,7 @@ let WiFiGraph = class extends BaseNetworkGraph {
30993
30981
  </div>
30994
30982
  `;
30995
30983
  }
30996
- return b`
30997
- <div class="graph-container"></div>
30998
- `;
30984
+ return b` <div class="graph-container"></div> `;
30999
30985
  }
31000
30986
  };
31001
30987
  WiFiGraph = __decorateClass$5([t$1("wifi-graph")], WiFiGraph);
@@ -31170,8 +31156,8 @@ let MatterNetworkView = class extends i$4 {
31170
31156
  </div>
31171
31157
  </div>
31172
31158
  ${this._threadAddressSearchStatus === "idle" ? "" : b`<div class="thread-search-status ${this._threadAddressSearchStatus}">
31173
- ${this._threadAddressSearchStatus === "found" ? "Node highlighted." : "No matching extended address found."}
31174
- </div>`}
31159
+ ${this._threadAddressSearchStatus === "found" ? "Node highlighted." : "No matching extended address found."}
31160
+ </div>`}
31175
31161
  <thread-graph
31176
31162
  .nodes=${this.nodes}
31177
31163
  @node-selected=${this._handleNodeSelected}
@@ -31693,7 +31679,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
31693
31679
  */
31694
31680
  const showCommissionNodeDialog = async client => {
31695
31681
  var _document$querySelect;
31696
- await import('./commission-node-dialog-B8btRo-u.js');
31682
+ await import('./commission-node-dialog-C3vakpfo.js');
31697
31683
  const dialog = document.createElement("commission-node-dialog");
31698
31684
  dialog.client = client;
31699
31685
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -31736,9 +31722,7 @@ let ServerDetails = class extends i$4 {
31736
31722
  <md-list-item>
31737
31723
  <div slot="headline">
31738
31724
  <b>Open Home Foundation Matter Server ${this.client.isProduction ? "" : `(${this.client.serverBaseAddress})`}</b>
31739
- ${this.client.connection.connected ? A : b`
31740
- <span class="status">OFFLINE</span>
31741
- `}
31725
+ ${this.client.connection.connected ? A : b` <span class="status">OFFLINE</span> `}
31742
31726
  </div>
31743
31727
  </md-list-item>
31744
31728
  <md-list-item>
@@ -31878,9 +31862,7 @@ let MatterServerView = class extends i$4 {
31878
31862
  <span class="hex-id"
31879
31863
  >(${formatNodeAddress(isTestNodeId(node.node_id) || this.client.serverInfo.fabric_index === void 0 ? void 0 : this.client.serverInfo.fabric_index, node.node_id)})</span
31880
31864
  >
31881
- ${node.available ? "" : b`
31882
- <span class="status">OFFLINE</span>
31883
- `}
31865
+ ${node.available ? "" : b` <span class="status">OFFLINE</span> `}
31884
31866
  </div>
31885
31867
  <div slot="supporting-text">
31886
31868
  ${node.nodeLabel ? `${node.nodeLabel} | ` : A} ${node.vendorName} |
@@ -1,4 +1,4 @@
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-CJAvDfru.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-BiNu4m8W.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/dashboard",
3
- "version": "0.5.10",
3
+ "version": "0.5.12",
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.29.2",
26
- "@matter/main": "0.17.0-alpha.0-20260326-42b6f59b7",
26
+ "@matter/main": "0.17.0-alpha.0-20260401-1edc54c9a",
27
27
  "@rollup/plugin-babel": "^7.0.0",
28
28
  "@rollup/plugin-commonjs": "^29.0.2",
29
29
  "rollup-plugin-copy": "^3.5.0",
@@ -31,14 +31,14 @@
31
31
  "@rollup/plugin-node-resolve": "^16.0.3",
32
32
  "@rollup/plugin-terser": "^1.0.0",
33
33
  "@rollup/plugin-typescript": "^12.3.0",
34
- "rollup": "^4.60.0",
34
+ "rollup": "^4.60.1",
35
35
  "serve": "^14.2.6"
36
36
  },
37
37
  "dependencies": {
38
38
  "@lit/context": "^1.1.6",
39
39
  "@material/web": "^2.4.1",
40
- "@matter-server/ws-client": "0.5.10",
41
- "@matter-server/custom-clusters": "0.5.10",
40
+ "@matter-server/ws-client": "0.5.12",
41
+ "@matter-server/custom-clusters": "0.5.12",
42
42
  "@mdi/js": "^7.4.47",
43
43
  "lit": "^3.3.2",
44
44
  "tslib": "^2.8.1",
@@ -24,25 +24,19 @@ 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
- ${
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
- }
27
+ ${params.text
28
+ ? html`<div slot="content">
29
+ ${params.asCodeBlock && typeof params.text === "string"
30
+ ? html`<code>${params.text}</code>`
31
+ : params.text}
35
32
  </div>`
36
- : ""
37
- }
33
+ : ""}
38
34
  <div slot="actions">
39
- ${
40
- this.type === "prompt"
41
- ? html`
35
+ ${this.type === "prompt"
36
+ ? html`
42
37
  <md-text-button @click=${this._cancel}>${params.cancelText ?? "Cancel"}</md-text-button>
43
38
  `
44
- : ""
45
- }
39
+ : ""}
46
40
  <md-text-button @click=${this._confirm}>${params.confirmText ?? "OK"}</md-text-button>
47
41
  </div>
48
42
  </md-dialog>
@@ -25,9 +25,8 @@ 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
- ${
29
- !this._mode
30
- ? html`<md-list>
28
+ ${!this._mode
29
+ ? html`<md-list>
31
30
  <md-list-item
32
31
  type="button"
33
32
  .disabled=${!this.client.serverInfo.bluetooth_enabled}
@@ -44,18 +43,11 @@ export class ComissionNodeDialog extends LitElement {
44
43
  >Commission existing device</md-list-item
45
44
  >
46
45
  </md-list>`
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
- }
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> `}
59
51
  </div>
60
52
  <div slot="actions">
61
53
  <md-text-button @click=${this._close}>Cancel</md-text-button>
@@ -33,13 +33,7 @@ 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
- >${
37
- this._loading
38
- ? html`
39
- <md-circular-progress indeterminate></md-circular-progress>
40
- `
41
- : nothing
42
- }`;
36
+ >${this._loading ? html` <md-circular-progress indeterminate></md-circular-progress> ` : nothing}`;
43
37
  }
44
38
 
45
39
  private async _commissionNode() {
@@ -37,34 +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
- >${
41
- this._loading
42
- ? html`
43
- <md-circular-progress indeterminate></md-circular-progress>
44
- `
45
- : nothing
46
- }`;
40
+ >${this._loading ? html` <md-circular-progress indeterminate></md-circular-progress> ` : nothing}`;
47
41
  }
48
42
  return html`<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
49
43
  <br />
50
44
  <br />
51
45
  <md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
52
46
  >Commission</md-outlined-button
53
- >${
54
- this._loading
55
- ? html`
56
- <md-circular-progress indeterminate></md-circular-progress>
57
- `
58
- : nothing
59
- }`;
47
+ >${this._loading ? html` <md-circular-progress indeterminate></md-circular-progress> ` : nothing}`;
60
48
  }
61
49
 
62
50
  private async _setThreadDataset() {
63
- const dataset = this._datasetField.value;
51
+ const dataset = this._datasetField.value.trim();
64
52
  if (!dataset) {
65
53
  alert("Dataset is required");
66
54
  return;
67
55
  }
56
+ if (!/^[0-9a-fA-F]*$/.test(dataset) || dataset.length % 2 !== 0) {
57
+ alert("Invalid Thread dataset: must be a hex string with even length (each byte is two hex characters)");
58
+ return;
59
+ }
68
60
  this._loading = true;
69
61
  try {
70
62
  await this.client.setThreadOperationalDataset(dataset);
@@ -40,24 +40,16 @@ export class CommissionNodeWifi extends LitElement {
40
40
  <br />
41
41
  <md-outlined-button @click=${handleAsync(() => this._setWifiCredentials())} .disabled="${this._loading}"
42
42
  >Set WiFi Credentials</md-outlined-button
43
- >${
44
- this._loading
45
- ? html`<md-circular-progress indeterminate .visible="${this._loading}"></md-circular-progress>`
46
- : nothing
47
- }`;
43
+ >${this._loading
44
+ ? html`<md-circular-progress indeterminate .visible="${this._loading}"></md-circular-progress>`
45
+ : nothing}`;
48
46
  }
49
47
  return html`<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
50
48
  <br />
51
49
  <br />
52
50
  <md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
53
51
  >Commission</md-outlined-button
54
- >${
55
- this._loading
56
- ? html`
57
- <md-circular-progress indeterminate></md-circular-progress>
58
- `
59
- : nothing
60
- }`;
52
+ >${this._loading ? html` <md-circular-progress indeterminate></md-circular-progress> ` : nothing}`;
61
53
  }
62
54
 
63
55
  private async _setWifiCredentials() {