@matter-server/dashboard 0.3.7 → 0.3.8-alpha.0-20260216-643457e

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 (24) hide show
  1. package/dist/esm/client/models/descriptions.d.ts.map +1 -1
  2. package/dist/esm/client/models/descriptions.js +42 -0
  3. package/dist/esm/client/models/descriptions.js.map +1 -1
  4. package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
  5. package/dist/esm/pages/matter-node-view.js +10 -1
  6. package/dist/esm/pages/matter-node-view.js.map +1 -1
  7. package/dist/esm/util/device-icons.d.ts +5 -0
  8. package/dist/esm/util/device-icons.d.ts.map +1 -1
  9. package/dist/esm/util/device-icons.js +20 -0
  10. package/dist/esm/util/device-icons.js.map +1 -1
  11. package/dist/web/js/{commission-node-dialog-h9QTg0uL.js → commission-node-dialog-f01-yuK8.js} +4 -4
  12. package/dist/web/js/{commission-node-existing-TnFjP70Q.js → commission-node-existing-7MkbwKC8.js} +2 -2
  13. package/dist/web/js/{commission-node-thread-DumLBlyw.js → commission-node-thread-BYlj6zWm.js} +2 -2
  14. package/dist/web/js/{commission-node-wifi-CbT2wQDc.js → commission-node-wifi-CyVmjFUU.js} +2 -2
  15. package/dist/web/js/{dialog-box-DVtkVga3.js → dialog-box-Dt2qiFiq.js} +1 -1
  16. package/dist/web/js/{fire_event-D_gZK7cY.js → fire_event-D_kDkiQt.js} +1 -1
  17. package/dist/web/js/{log-level-dialog-ChcYXgfz.js → log-level-dialog-Dtg5a3Em.js} +1 -1
  18. package/dist/web/js/main.js +1 -1
  19. package/dist/web/js/{matter-dashboard-app-Dpr9EPlS.js → matter-dashboard-app-BFqsHXYm.js} +74 -4
  20. package/dist/web/js/{node-binding-dialog-BI9spkUK.js → node-binding-dialog-Bg_Q649-.js} +1 -1
  21. package/package.json +3 -3
  22. package/src/client/models/descriptions.ts +42 -0
  23. package/src/pages/matter-node-view.ts +10 -1
  24. package/src/util/device-icons.ts +30 -0
@@ -1 +1 @@
1
- {"version":3,"file":"matter-node-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-node-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAgB,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,OAAO,2BAA2B,CAAC;AAGnC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,2BAA2B,CAAC;AAInC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,kBAAkB,EAAE,cAAc,CAAC;KACtC;CACJ;AASD,cACM,cAAe,SAAQ,UAAU;IAC5B,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAEhB,MAAM;IAiFf,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BA8FpB;CACL"}
1
+ {"version":3,"file":"matter-node-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-node-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAgB,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAElF,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAG5C,OAAO,2BAA2B,CAAC;AAGnC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,2BAA2B,CAAC;AAInC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,kBAAkB,EAAE,cAAc,CAAC;KACtC;CACJ;AASD,cACM,cAAe,SAAQ,UAAU;IAC5B,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAEhB,MAAM;IAsFf,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BAkGpB;CACL"}
@@ -23,7 +23,7 @@ import { css, html, LitElement } from "lit";
23
23
  import { customElement, property } from "lit/decorators.js";
24
24
  import { guard } from "lit/directives/guard.js";
25
25
  import "../components/ha-svg-icon";
26
- import { getDeviceIcon } from "../util/device-icons.js";
26
+ import { getDeviceIcon, getEndpointIcon } from "../util/device-icons.js";
27
27
  import { formatNodeAddress, getEffectiveFabricIndex } from "../util/format_hex.js";
28
28
  import "./components/header";
29
29
  import "./components/node-details";
@@ -86,6 +86,11 @@ let MatterNodeView = class extends LitElement {
86
86
  () => getUniqueEndpoints(this.node).map((endPointId) => {
87
87
  return html`
88
88
  <md-list-item type="link" href=${`#node/${this.node.node_id}/${endPointId}`}>
89
+ <ha-svg-icon
90
+ slot="start"
91
+ class="endpoint-icon"
92
+ .path=${getEndpointIcon(this.node, endPointId)}
93
+ ></ha-svg-icon>
89
94
  <div slot="headline">Endpoint ${endPointId}</div>
90
95
  <div slot="supporting-text">
91
96
  Device Type(s):
@@ -148,6 +153,10 @@ MatterNodeView.styles = css`
148
153
  --mdc-icon-size: 28px;
149
154
  }
150
155
 
156
+ .endpoint-icon {
157
+ --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
158
+ }
159
+
151
160
  .node-title-bar h2 {
152
161
  margin: 0;
153
162
  font-size: 1.25rem;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/pages/matter-node-view.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -11,6 +11,11 @@ import type { MatterNode } from "@matter-server/ws-client";
11
11
  * the first type found on any endpoint.
12
12
  */
13
13
  export declare function getPrimaryDeviceType(node: MatterNode): number | undefined;
14
+ /**
15
+ * Gets the appropriate MDI icon path for a specific endpoint on a node.
16
+ * Prefers non-utility device types when present.
17
+ */
18
+ export declare function getEndpointIcon(node: MatterNode, endpoint: number): string;
14
19
  /**
15
20
  * Gets the appropriate MDI icon path for a node.
16
21
  * Considers device type and Thread role.
@@ -1 +1 @@
1
- {"version":3,"file":"device-icons.d.ts","sourceRoot":"","sources":["../../../src/util/device-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAmU3D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAiCzE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAU5F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,GAAE,OAAe,EAC3B,SAAS,GAAE,OAAe,GAC3B,MAAM,CAWR;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,GAAE,OAAe,EAAE,UAAU,GAAE,OAAe,GAAG,MAAM,CAI7G;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,GAAE,OAAe,GAAG,MAAM,CAG/E"}
1
+ {"version":3,"file":"device-icons.d.ts","sourceRoot":"","sources":["../../../src/util/device-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAmU3D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CAiCzE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAwB1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAU5F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,GAAE,OAAe,EAC3B,SAAS,GAAE,OAAe,GAC3B,MAAM,CAWR;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,GAAE,OAAe,EAAE,UAAU,GAAE,OAAe,GAAG,MAAM,CAI7G;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,GAAE,OAAe,GAAG,MAAM,CAG/E"}
@@ -298,6 +298,25 @@ function getPrimaryDeviceType(node) {
298
298
  }
299
299
  return firstFound;
300
300
  }
301
+ function getEndpointIcon(node, endpoint) {
302
+ const deviceTypeList = node.attributes[`${endpoint}/29/0`];
303
+ if (!deviceTypeList?.length) {
304
+ return mdiChip;
305
+ }
306
+ let firstFound;
307
+ for (const entry of deviceTypeList) {
308
+ const deviceType = extractDeviceType(entry);
309
+ if (deviceType === void 0) continue;
310
+ firstFound ??= deviceType;
311
+ if (deviceTypeToIcon[deviceType] && !UTILITY_TYPES.has(deviceType)) {
312
+ return deviceTypeToIcon[deviceType];
313
+ }
314
+ }
315
+ if (firstFound !== void 0 && deviceTypeToIcon[firstFound]) {
316
+ return deviceTypeToIcon[firstFound];
317
+ }
318
+ return mdiChip;
319
+ }
301
320
  function getDeviceIcon(node, threadRole) {
302
321
  if (threadRole !== void 0 && threadRoleToIcon[threadRole]) {
303
322
  const deviceType2 = getPrimaryDeviceType(node);
@@ -362,6 +381,7 @@ export {
362
381
  createUnknownDeviceIconDataUrl,
363
382
  createWiFiRouterIconDataUrl,
364
383
  getDeviceIcon,
384
+ getEndpointIcon,
365
385
  getNetworkTypeIcon,
366
386
  getPrimaryDeviceType
367
387
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/device-icons.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["deviceType"]
6
6
  }
@@ -1,4 +1,4 @@
1
- import { r, n, t, i, j as b } from './matter-dashboard-app-Dpr9EPlS.js';
1
+ import { r, n, t, i, j as b } from './matter-dashboard-app-BFqsHXYm.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -50,18 +50,18 @@ let ComissionNodeDialog = class extends i {
50
50
  if (!this.client.serverInfo.bluetooth_enabled) {
51
51
  return;
52
52
  }
53
- import('./commission-node-wifi-CbT2wQDc.js');
53
+ import('./commission-node-wifi-CyVmjFUU.js');
54
54
  this._mode = "wifi";
55
55
  }
56
56
  _commissionThread() {
57
57
  if (!this.client.serverInfo.bluetooth_enabled) {
58
58
  return;
59
59
  }
60
- import('./commission-node-thread-DumLBlyw.js');
60
+ import('./commission-node-thread-BYlj6zWm.js');
61
61
  this._mode = "thread";
62
62
  }
63
63
  _commissionExisting() {
64
- import('./commission-node-existing-TnFjP70Q.js');
64
+ import('./commission-node-existing-7MkbwKC8.js');
65
65
  this._mode = "existing";
66
66
  }
67
67
  _nodeCommissioned(ev) {
@@ -1,5 +1,5 @@
1
- import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-Dpr9EPlS.js';
2
- import { f as fireEvent } from './fire_event-D_gZK7cY.js';
1
+ import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-BFqsHXYm.js';
2
+ import { f as fireEvent } from './fire_event-D_kDkiQt.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-Dpr9EPlS.js';
2
- import { f as fireEvent } from './fire_event-D_gZK7cY.js';
1
+ import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-BFqsHXYm.js';
2
+ import { f as fireEvent } from './fire_event-D_kDkiQt.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-Dpr9EPlS.js';
2
- import { f as fireEvent } from './fire_event-D_gZK7cY.js';
1
+ import { r, G as c, H as clientContext, n, a as e, t, i, A, F as handleAsync, j as b } from './matter-dashboard-app-BFqsHXYm.js';
2
+ import { f as fireEvent } from './fire_event-D_kDkiQt.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- import { n, t, i, j as b } from './matter-dashboard-app-Dpr9EPlS.js';
1
+ import { n, t, i, j as b } from './matter-dashboard-app-BFqsHXYm.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, j as b, k as i$1, t } from './matter-dashboard-app-Dpr9EPlS.js';
1
+ import { m as mixinDelegatesAria, i, _ as __decorate, n, A, f as e, j as b, k as i$1, t } from './matter-dashboard-app-BFqsHXYm.js';
2
2
 
3
3
  /**
4
4
  * @license
@@ -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-Dpr9EPlS.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-BFqsHXYm.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -748,7 +748,7 @@ const ThemeService = new ThemeServiceImpl();
748
748
  * SPDX-License-Identifier: Apache-2.0
749
749
  */
750
750
  async function main() {
751
- import('./matter-dashboard-app-Dpr9EPlS.js').then(function (n) { return n.I; });
751
+ import('./matter-dashboard-app-BFqsHXYm.js').then(function (n) { return n.I; });
752
752
  let url = "";
753
753
  const isProductionServer = window.__MATTERJS_PRODUCTION_MODE__ === true || location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
754
754
  if (!isProductionServer) {
@@ -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-ChcYXgfz.js');
4023
+ await import('./log-level-dialog-Dtg5a3Em.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);
@@ -15526,12 +15526,42 @@ const clusters = {
15526
15526
  "label": "ClusterRevision",
15527
15527
  "type": "uint16"
15528
15528
  },
15529
+ "319422464": {
15530
+ "id": 319422464,
15531
+ "cluster_id": 319486977,
15532
+ "label": "GetConfig",
15533
+ "type": "Optional[bytes]"
15534
+ },
15535
+ "319422465": {
15536
+ "id": 319422465,
15537
+ "cluster_id": 319486977,
15538
+ "label": "SetConfig",
15539
+ "type": "Optional[bytes]"
15540
+ },
15541
+ "319422466": {
15542
+ "id": 319422466,
15543
+ "cluster_id": 319486977,
15544
+ "label": "LoggingMetadata",
15545
+ "type": "Optional[bytes]"
15546
+ },
15547
+ "319422467": {
15548
+ "id": 319422467,
15549
+ "cluster_id": 319486977,
15550
+ "label": "LoggingData",
15551
+ "type": "Optional[bytes]"
15552
+ },
15529
15553
  "319422470": {
15530
15554
  "id": 319422470,
15531
15555
  "cluster_id": 319486977,
15532
15556
  "label": "TimesOpened",
15533
15557
  "type": "Optional[unknown]"
15534
15558
  },
15559
+ "319422471": {
15560
+ "id": 319422471,
15561
+ "cluster_id": 319486977,
15562
+ "label": "LastEventTime",
15563
+ "type": "Optional[uint32]"
15564
+ },
15535
15565
  "319422472": {
15536
15566
  "id": 319422472,
15537
15567
  "cluster_id": 319486977,
@@ -15556,6 +15586,12 @@ const clusters = {
15556
15586
  "label": "WattAccumulated",
15557
15587
  "type": "Optional[unknown]"
15558
15588
  },
15589
+ "319422476": {
15590
+ "id": 319422476,
15591
+ "cluster_id": 319486977,
15592
+ "label": "StatusFault",
15593
+ "type": "Optional[uint8]"
15594
+ },
15559
15595
  "319422477": {
15560
15596
  "id": 319422477,
15561
15597
  "cluster_id": 319486977,
@@ -15580,6 +15616,12 @@ const clusters = {
15580
15616
  "label": "ChildLock",
15581
15617
  "type": "Optional[bool]"
15582
15618
  },
15619
+ "319422482": {
15620
+ "id": 319422482,
15621
+ "cluster_id": 319486977,
15622
+ "label": "Rloc16",
15623
+ "type": "Optional[uint16]"
15624
+ },
15583
15625
  "319422483": {
15584
15626
  "id": 319422483,
15585
15627
  "cluster_id": 319486977,
@@ -15680,7 +15722,7 @@ const clusters = {
15680
15722
  * SPDX-License-Identifier: Apache-2.0
15681
15723
  */
15682
15724
  const showDialogBox = async (type, dialogParams) => {
15683
- await import('./dialog-box-DVtkVga3.js');
15725
+ await import('./dialog-box-Dt2qiFiq.js');
15684
15726
  return new Promise(resolve => {
15685
15727
  const dialog = document.createElement("dialog-box");
15686
15728
  dialog.params = dialogParams;
@@ -15854,7 +15896,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
15854
15896
  */
15855
15897
  const showNodeBindingDialog = async (client, node, endpoint) => {
15856
15898
  var _document$querySelect;
15857
- await import('./node-binding-dialog-BI9spkUK.js');
15899
+ await import('./node-binding-dialog-Bg_Q649-.js');
15858
15900
  const dialog = document.createElement("node-binding-dialog");
15859
15901
  dialog.client = client;
15860
15902
  dialog.node = node;
@@ -16118,6 +16160,25 @@ function getPrimaryDeviceType(node) {
16118
16160
  }
16119
16161
  return firstFound;
16120
16162
  }
16163
+ function getEndpointIcon(node, endpoint) {
16164
+ const deviceTypeList = node.attributes[`${endpoint}/29/0`];
16165
+ if (!(deviceTypeList !== null && deviceTypeList !== void 0 && deviceTypeList.length)) {
16166
+ return mdiChip;
16167
+ }
16168
+ let firstFound;
16169
+ for (const entry of deviceTypeList) {
16170
+ const deviceType = extractDeviceType(entry);
16171
+ if (deviceType === void 0) continue;
16172
+ firstFound ?? (firstFound = deviceType);
16173
+ if (deviceTypeToIcon[deviceType] && !UTILITY_TYPES.has(deviceType)) {
16174
+ return deviceTypeToIcon[deviceType];
16175
+ }
16176
+ }
16177
+ if (firstFound !== void 0 && deviceTypeToIcon[firstFound]) {
16178
+ return deviceTypeToIcon[firstFound];
16179
+ }
16180
+ return mdiChip;
16181
+ }
16121
16182
  function getDeviceIcon(node, threadRole) {
16122
16183
  if (threadRole !== void 0 && threadRoleToIcon[threadRole]) {
16123
16184
  const deviceType2 = getPrimaryDeviceType(node);
@@ -31235,6 +31296,11 @@ let MatterNodeView = class extends i$4 {
31235
31296
  ${i$1([(_this$node = this.node) === null || _this$node === void 0 ? void 0 : _this$node.attributes.length], () => getUniqueEndpoints(this.node).map(endPointId => {
31236
31297
  return b`
31237
31298
  <md-list-item type="link" href=${`#node/${this.node.node_id}/${endPointId}`}>
31299
+ <ha-svg-icon
31300
+ slot="start"
31301
+ class="endpoint-icon"
31302
+ .path=${getEndpointIcon(this.node, endPointId)}
31303
+ ></ha-svg-icon>
31238
31304
  <div slot="headline">Endpoint ${endPointId}</div>
31239
31305
  <div slot="supporting-text">
31240
31306
  Device Type(s):
@@ -31296,6 +31362,10 @@ MatterNodeView.styles = i$7`
31296
31362
  --mdc-icon-size: 28px;
31297
31363
  }
31298
31364
 
31365
+ .endpoint-icon {
31366
+ --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
31367
+ }
31368
+
31299
31369
  .node-title-bar h2 {
31300
31370
  margin: 0;
31301
31371
  font-size: 1.25rem;
@@ -31361,7 +31431,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
31361
31431
  */
31362
31432
  const showCommissionNodeDialog = async client => {
31363
31433
  var _document$querySelect;
31364
- await import('./commission-node-dialog-h9QTg0uL.js');
31434
+ await import('./commission-node-dialog-f01-yuK8.js');
31365
31435
  const dialog = document.createElement("commission-node-dialog");
31366
31436
  dialog.client = client;
31367
31437
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -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-Dpr9EPlS.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-BFqsHXYm.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.3.7",
3
+ "version": "0.3.8-alpha.0-20260216-643457e",
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.7",
41
- "@matter-server/custom-clusters": "0.3.7",
40
+ "@matter-server/ws-client": "0.3.8-alpha.0-20260216-643457e",
41
+ "@matter-server/custom-clusters": "0.3.8-alpha.0-20260216-643457e",
42
42
  "@mdi/js": "^7.4.47",
43
43
  "lit": "^3.3.2",
44
44
  "tslib": "^2.8.1",
@@ -11291,12 +11291,42 @@ export const clusters: Record<number, ClusterDescription> = {
11291
11291
  "label": "ClusterRevision",
11292
11292
  "type": "uint16"
11293
11293
  },
11294
+ "319422464": {
11295
+ "id": 319422464,
11296
+ "cluster_id": 319486977,
11297
+ "label": "GetConfig",
11298
+ "type": "Optional[bytes]"
11299
+ },
11300
+ "319422465": {
11301
+ "id": 319422465,
11302
+ "cluster_id": 319486977,
11303
+ "label": "SetConfig",
11304
+ "type": "Optional[bytes]"
11305
+ },
11306
+ "319422466": {
11307
+ "id": 319422466,
11308
+ "cluster_id": 319486977,
11309
+ "label": "LoggingMetadata",
11310
+ "type": "Optional[bytes]"
11311
+ },
11312
+ "319422467": {
11313
+ "id": 319422467,
11314
+ "cluster_id": 319486977,
11315
+ "label": "LoggingData",
11316
+ "type": "Optional[bytes]"
11317
+ },
11294
11318
  "319422470": {
11295
11319
  "id": 319422470,
11296
11320
  "cluster_id": 319486977,
11297
11321
  "label": "TimesOpened",
11298
11322
  "type": "Optional[unknown]"
11299
11323
  },
11324
+ "319422471": {
11325
+ "id": 319422471,
11326
+ "cluster_id": 319486977,
11327
+ "label": "LastEventTime",
11328
+ "type": "Optional[uint32]"
11329
+ },
11300
11330
  "319422472": {
11301
11331
  "id": 319422472,
11302
11332
  "cluster_id": 319486977,
@@ -11321,6 +11351,12 @@ export const clusters: Record<number, ClusterDescription> = {
11321
11351
  "label": "WattAccumulated",
11322
11352
  "type": "Optional[unknown]"
11323
11353
  },
11354
+ "319422476": {
11355
+ "id": 319422476,
11356
+ "cluster_id": 319486977,
11357
+ "label": "StatusFault",
11358
+ "type": "Optional[uint8]"
11359
+ },
11324
11360
  "319422477": {
11325
11361
  "id": 319422477,
11326
11362
  "cluster_id": 319486977,
@@ -11345,6 +11381,12 @@ export const clusters: Record<number, ClusterDescription> = {
11345
11381
  "label": "ChildLock",
11346
11382
  "type": "Optional[bool]"
11347
11383
  },
11384
+ "319422482": {
11385
+ "id": 319422482,
11386
+ "cluster_id": 319486977,
11387
+ "label": "Rloc16",
11388
+ "type": "Optional[uint16]"
11389
+ },
11348
11390
  "319422483": {
11349
11391
  "id": 319422483,
11350
11392
  "cluster_id": 319486977,
@@ -14,7 +14,7 @@ import { css, html, LitElement } from "lit";
14
14
  import { customElement, property } from "lit/decorators.js";
15
15
  import { guard } from "lit/directives/guard.js";
16
16
  import "../components/ha-svg-icon";
17
- import { getDeviceIcon } from "../util/device-icons.js";
17
+ import { getDeviceIcon, getEndpointIcon } from "../util/device-icons.js";
18
18
  import { formatNodeAddress, getEffectiveFabricIndex } from "../util/format_hex.js";
19
19
  import "./components/header";
20
20
  import "./components/node-details";
@@ -101,6 +101,11 @@ class MatterNodeView extends LitElement {
101
101
  getUniqueEndpoints(this.node!).map(endPointId => {
102
102
  return html`
103
103
  <md-list-item type="link" href=${`#node/${this.node!.node_id}/${endPointId}`}>
104
+ <ha-svg-icon
105
+ slot="start"
106
+ class="endpoint-icon"
107
+ .path=${getEndpointIcon(this.node!, endPointId)}
108
+ ></ha-svg-icon>
104
109
  <div slot="headline">Endpoint ${endPointId}</div>
105
110
  <div slot="supporting-text">
106
111
  Device Type(s):
@@ -166,6 +171,10 @@ class MatterNodeView extends LitElement {
166
171
  --mdc-icon-size: 28px;
167
172
  }
168
173
 
174
+ .endpoint-icon {
175
+ --icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
176
+ }
177
+
169
178
  .node-title-bar h2 {
170
179
  margin: 0;
171
180
  font-size: 1.25rem;
@@ -368,6 +368,36 @@ export function getPrimaryDeviceType(node: MatterNode): number | undefined {
368
368
  return firstFound;
369
369
  }
370
370
 
371
+ /**
372
+ * Gets the appropriate MDI icon path for a specific endpoint on a node.
373
+ * Prefers non-utility device types when present.
374
+ */
375
+ export function getEndpointIcon(node: MatterNode, endpoint: number): string {
376
+ const deviceTypeList = node.attributes[`${endpoint}/29/0`] as Array<Record<string, number>> | undefined;
377
+ if (!deviceTypeList?.length) {
378
+ return mdiChip;
379
+ }
380
+
381
+ let firstFound: number | undefined;
382
+
383
+ for (const entry of deviceTypeList) {
384
+ const deviceType = extractDeviceType(entry);
385
+ if (deviceType === undefined) continue;
386
+
387
+ firstFound ??= deviceType;
388
+
389
+ if (deviceTypeToIcon[deviceType] && !UTILITY_TYPES.has(deviceType)) {
390
+ return deviceTypeToIcon[deviceType];
391
+ }
392
+ }
393
+
394
+ if (firstFound !== undefined && deviceTypeToIcon[firstFound]) {
395
+ return deviceTypeToIcon[firstFound];
396
+ }
397
+
398
+ return mdiChip;
399
+ }
400
+
371
401
  /**
372
402
  * Gets the appropriate MDI icon path for a node.
373
403
  * Considers device type and Thread role.