@matter-server/dashboard 0.2.5 → 0.2.6

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 (29) hide show
  1. package/dist/esm/pages/components/node-details.d.ts.map +1 -1
  2. package/dist/esm/pages/components/node-details.js +27 -8
  3. package/dist/esm/pages/components/node-details.js.map +2 -2
  4. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  5. package/dist/esm/pages/matter-cluster-view.js +3 -2
  6. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  7. package/dist/esm/pages/matter-endpoint-view.d.ts.map +1 -1
  8. package/dist/esm/pages/matter-endpoint-view.js +2 -1
  9. package/dist/esm/pages/matter-endpoint-view.js.map +1 -1
  10. package/dist/esm/util/format_hex.d.ts +17 -0
  11. package/dist/esm/util/format_hex.d.ts.map +1 -0
  12. package/dist/esm/util/format_hex.js +18 -0
  13. package/dist/esm/util/format_hex.js.map +6 -0
  14. package/dist/web/js/{commission-node-dialog-30lGnJcb.js → commission-node-dialog--19-sX9D.js} +5 -5
  15. package/dist/web/js/{commission-node-existing-RgaziosB.js → commission-node-existing-DY6SnsHb.js} +4 -4
  16. package/dist/web/js/{commission-node-thread-CJn6OYQX.js → commission-node-thread-CXquVvK5.js} +4 -4
  17. package/dist/web/js/{commission-node-wifi-CCBBvBEh.js → commission-node-wifi-VQGVOrr7.js} +4 -4
  18. package/dist/web/js/{dialog-box-CFO9GMyG.js → dialog-box-qX-alVZJ.js} +2 -2
  19. package/dist/web/js/{fire_event-CdvT7FSP.js → fire_event-B13DcOc9.js} +1 -1
  20. package/dist/web/js/main.js +1 -1
  21. package/dist/web/js/{matter-dashboard-app-DwI2RvT1.js → matter-dashboard-app-CU3-L2nl.js} +45 -14
  22. package/dist/web/js/{node-binding-dialog-CmTgtqz1.js → node-binding-dialog-D4rr_G9I.js} +3 -3
  23. package/dist/web/js/{outlined-text-field-DeeCilzP.js → outlined-text-field-CtlEkpbk.js} +2 -2
  24. package/dist/web/js/{prevent_default--haJaAsZ.js → prevent_default-Dw7ifAL-.js} +1 -1
  25. package/package.json +3 -3
  26. package/src/pages/components/node-details.ts +33 -8
  27. package/src/pages/matter-cluster-view.ts +3 -2
  28. package/src/pages/matter-endpoint-view.ts +2 -1
  29. package/src/util/format_hex.ts +30 -0
@@ -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;AAetC,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;YAoEX,YAAY;YAyBZ,OAAO;YAsBP,QAAQ;YAQR,aAAa;YAmCb,wBAAwB;IAwBtC,OAAgB,MAAM,0BAkBpB;CACL"}
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;AAoCtC,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;YAwEX,YAAY;YAyBZ,OAAO;YAsBP,QAAQ;YAQR,aAAa;YAmCb,wBAAwB;IAwBtC,OAAgB,MAAM,0BAkBpB;CACL"}
@@ -29,6 +29,23 @@ import { showNodeBindingDialog } from "../../components/dialogs/binding/show-nod
29
29
  import "../../components/ha-svg-icon";
30
30
  import { getEndpointDeviceTypes } from "../matter-endpoint-view.js";
31
31
  import { bindingContext } from "./context.js";
32
+ const UPDATE_STATE_LABELS = {
33
+ 1: "Idle",
34
+ 2: "Querying",
35
+ 3: "Waiting (Querying)",
36
+ 4: "Downloading",
37
+ 5: "Applying",
38
+ 6: "Waiting (Applying)",
39
+ 7: "Rolling back",
40
+ 8: "Waiting for consent"
41
+ };
42
+ function getUpdateStateLabel(state2, progress) {
43
+ const label = UPDATE_STATE_LABELS[state2] || `Unknown (${state2})`;
44
+ if (state2 === 4 && progress !== void 0) {
45
+ return `${label} (${progress}%)`;
46
+ }
47
+ return label;
48
+ }
32
49
  function getNodeDeviceTypes(node) {
33
50
  const uniqueEndpoints = new Set(Object.keys(node.attributes).map((key) => Number(key.split("/")[0])));
34
51
  const allDeviceTypes = /* @__PURE__ */ new Set();
@@ -76,14 +93,16 @@ let NodeDetails = class extends LitElement {
76
93
  <md-outlined-button @click=${this._reinterview}
77
94
  >Interview<ha-svg-icon slot="icon" .path=${mdiChatProcessing}></ha-svg-icon
78
95
  ></md-outlined-button>
79
- ${this._updateInitiated || (this.node.updateState || 0) > 1 ? html` <md-outlined-button disabled
80
- >Update in progress (${this.node.updateStateProgress || 0}%)<ha-svg-icon
81
- slot="icon"
82
- .path=${mdiUpdate}
83
- ></ha-svg-icon
84
- ></md-outlined-button>` : html`<md-outlined-button @click=${this._searchUpdate}
85
- >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
86
- ></md-outlined-button>`}
96
+ ${this._updateInitiated ? html` <md-outlined-button disabled
97
+ >Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
98
+ ></md-outlined-button>` : (this.node.updateState || 0) > 1 ? html` <md-outlined-button disabled
99
+ >${getUpdateStateLabel(
100
+ this.node.updateState,
101
+ this.node.updateStateProgress
102
+ )}<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
103
+ ></md-outlined-button>` : html`<md-outlined-button @click=${this._searchUpdate}
104
+ >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
105
+ ></md-outlined-button>`}
87
106
  ${bindings ? html`
88
107
  <md-outlined-button @click=${this._binding}>
89
108
  Binding
@@ -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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",
5
- "names": []
4
+ "mappings": "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",
5
+ "names": ["state"]
6
6
  }
@@ -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;AAK1C,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;IAOjC,OAAO,CAAC,sBAAsB;IAkBrB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAgBxD,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BAwCpB;CACL"}
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;IAOjC,OAAO,CAAC,sBAAsB;IAkBrB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC;IAgBxD,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BAwCpB;CACL"}
@@ -27,6 +27,7 @@ import { showAlertDialog } from "../components/dialog-box/show-dialog-box.js";
27
27
  import "../components/ha-svg-icon";
28
28
  import "../pages/components/node-details";
29
29
  import { bindingContext } from "./components/context.js";
30
+ import { formatHex } from "../util/format_hex.js";
30
31
  import { getClusterCommandsTag } from "./cluster-commands/index.js";
31
32
  const GLOBAL_ATTRIBUTE_MIN = 65520;
32
33
  const GLOBAL_ATTRIBUTE_MAX = 65535;
@@ -79,7 +80,7 @@ let MatterClusterView = class extends LitElement {
79
80
  Endpoint ${this.endpoint}</b
80
81
  >
81
82
  </div>
82
- <div slot="supporting-text">ClusterId ${this.cluster} (0x00${this.cluster.toString(16)})</div>
83
+ <div slot="supporting-text">ClusterId ${this.cluster} (${formatHex(this.cluster)})</div>
83
84
  </md-list-item>
84
85
  <md-divider></md-divider>
85
86
  ${clusterAttributes(this.node.attributes, this.endpoint, this.cluster).map(
@@ -89,7 +90,7 @@ let MatterClusterView = class extends LitElement {
89
90
  ${clusters[this.cluster]?.attributes[attribute.key]?.label || "Custom/Unknown Attribute"}
90
91
  </div>
91
92
  <div slot="supporting-text">
92
- AttributeId: ${attribute.key} (0x00${attribute.key.toString(16)}) - Value type:
93
+ AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
93
94
  ${clusters[this.cluster]?.attributes[attribute.key]?.type || "unknown"}
94
95
  </div>
95
96
  <div slot="end">
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/pages/matter-cluster-view.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"matter-endpoint-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-endpoint-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,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,EAAE,UAAU,EAA0B,MAAM,kCAAkC,CAAC;AACtF,OAAO,2BAA2B,CAAC;AAEnC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,sBAAsB,EAAE,kBAAkB,CAAC;KAC9C;CACJ;AAcD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAOvF;AAED,cACM,kBAAmB,SAAQ,UAAU;IAChC,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM;IAuDf,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BAoCpB;CACL"}
1
+ {"version":3,"file":"matter-endpoint-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-endpoint-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,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAa,MAAM,KAAK,CAAC;AAG5C,OAAO,EAAE,UAAU,EAA0B,MAAM,kCAAkC,CAAC;AACtF,OAAO,2BAA2B,CAAC;AAGnC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,sBAAsB,EAAE,kBAAkB,CAAC;KAC9C;CACJ;AAcD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAOvF;AAED,cACM,kBAAmB,SAAQ,UAAU;IAChC,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAEhB,MAAM;IAuDf,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,0BAoCpB;CACL"}
@@ -23,6 +23,7 @@ import { customElement, property } from "lit/decorators.js";
23
23
  import { guard } from "lit/directives/guard.js";
24
24
  import { clusters, device_types } from "../client/models/descriptions.js";
25
25
  import "../components/ha-svg-icon";
26
+ import { formatHex } from "../util/format_hex.js";
26
27
  function getUniqueClusters(node, endpoint) {
27
28
  return Array.from(
28
29
  new Set(
@@ -83,7 +84,7 @@ let MatterEndpointView = class extends LitElement {
83
84
  href=${`#node/${this.node.node_id}/${this.endpoint}/${cluster}`}
84
85
  >
85
86
  <div slot="headline">${clusters[cluster]?.label || "Custom/Unknown Cluster"}</div>
86
- <div slot="supporting-text">ClusterId ${cluster} (0x00${cluster.toString(16)})</div>
87
+ <div slot="supporting-text">ClusterId ${cluster} (${formatHex(cluster)})</div>
87
88
  <ha-svg-icon slot="end" .path=${mdiChevronRight}></ha-svg-icon>
88
89
  </md-list-item>
89
90
  `;
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/pages/matter-endpoint-view.ts"],
4
- "mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,SAAS,uBAAuB;AAChC,SAAS,YAAY,KAAK,YAAY;AACtC,SAAS,eAAe,gBAAgB;AACxC,SAAS,aAAa;AACtB,SAAqB,UAAU,oBAAoB;AACnD,OAAO;AAQP,SAAS,kBAAkB,MAAkB,UAAkB;AAC3D,SAAO,MAAM;AAAA,IACT,IAAI;AAAA,MACA,OAAO,KAAK,KAAK,UAAU,EACtB,OAAO,SAAO,IAAI,WAAW,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC,EACvD,IAAI,SAAO,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,IAC7C;AAAA,EACJ,EAAE,KAAK,CAAC,GAAG,MAAM;AACb,WAAO,IAAI;AAAA,EACf,CAAC;AACL;AAEO,SAAS,uBAAuB,MAAkB,UAAgC;AACrF,QAAM,YAAY,KAAK,WAAW,GAAG,QAAQ,OAAO;AACpD,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,SAAO,UAAU,IAAI,cAAY;AAC7B,UAAM,KAAK,SAAS,GAAG,KAAK,SAAS,YAAY;AACjD,WAAO,aAAa,EAAE,KAAK,EAAE,IAAI,MAAM,IAAI,OAAO,wBAAwB,EAAE,KAAK,UAAU,CAAC,EAAE;AAAA,EAClG,CAAC;AACL;AAGA,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAS/B,SAAS;AACd,QAAI,CAAC,KAAK,QAAQ,KAAK,YAAY,QAAW;AAC1C,aAAO;AAAA;AAAA,iCAEc,KAAK,OAAO;AAAA;AAAA,IAErC;AAEA,WAAO;AAAA;AAAA,yBAEU,QAAQ,KAAK,KAAK,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AAAA,8BACpD,SAAS,KAAK,KAAK,OAAO,EAAE;AAAA,0BAChC,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,sCAKC,KAAK,IAAI,YAAY,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sDAQhB,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,8BAIrC,uBAAuB,KAAK,MAAM,KAAK,QAAQ,EAC5C,IAAI,gBAAc;AACf,aAAO,WAAW;AAAA,IACtB,CAAC,EACA,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,sBAGtB;AAAA,MAAM,CAAC,KAAK,MAAM,WAAW,MAAM;AAAA,MAAG,MACpC,kBAAkB,KAAK,MAAO,KAAK,QAAS,EAAE,IAAI,aAAW;AACzD,eAAO;AAAA;AAAA;AAAA,2CAGQ,SAAS,KAAK,KAAM,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE;AAAA;AAAA,2DAEzC,SAAS,OAAO,GAAG,SAAS,wBAAwB;AAAA,4EACnC,OAAO,SAAS,QAAQ,SAAS,EAAE,CAAC;AAAA,oEAC5C,eAAe;AAAA;AAAA;AAAA,MAG3D,CAAC;AAAA,IACL,CAAC;AAAA;AAAA;AAAA;AAAA,EAIjB;AAAA,EAEQ,UAAU;AACd,YAAQ,KAAK;AAAA,EACjB;AAuCJ;AAzGM,mBAoEc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhElB;AAAA,EADN,SAAS;AAAA,GAHR,mBAIK;AAGA;AAAA,EADN,SAAS;AAAA,GANR,mBAOK;AAPL,qBAAN;AAAA,EADC,cAAc,sBAAsB;AAAA,GAC/B;",
4
+ "mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,SAAS,uBAAuB;AAChC,SAAS,YAAY,KAAK,YAAY;AACtC,SAAS,eAAe,gBAAgB;AACxC,SAAS,aAAa;AACtB,SAAqB,UAAU,oBAAoB;AACnD,OAAO;AACP,SAAS,iBAAiB;AAQ1B,SAAS,kBAAkB,MAAkB,UAAkB;AAC3D,SAAO,MAAM;AAAA,IACT,IAAI;AAAA,MACA,OAAO,KAAK,KAAK,UAAU,EACtB,OAAO,SAAO,IAAI,WAAW,GAAG,SAAS,SAAS,CAAC,GAAG,CAAC,EACvD,IAAI,SAAO,OAAO,IAAI,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,IAC7C;AAAA,EACJ,EAAE,KAAK,CAAC,GAAG,MAAM;AACb,WAAO,IAAI;AAAA,EACf,CAAC;AACL;AAEO,SAAS,uBAAuB,MAAkB,UAAgC;AACrF,QAAM,YAAY,KAAK,WAAW,GAAG,QAAQ,OAAO;AACpD,MAAI,CAAC,UAAW,QAAO,CAAC;AACxB,SAAO,UAAU,IAAI,cAAY;AAC7B,UAAM,KAAK,SAAS,GAAG,KAAK,SAAS,YAAY;AACjD,WAAO,aAAa,EAAE,KAAK,EAAE,IAAI,MAAM,IAAI,OAAO,wBAAwB,EAAE,KAAK,UAAU,CAAC,EAAE;AAAA,EAClG,CAAC;AACL;AAGA,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAS/B,SAAS;AACd,QAAI,CAAC,KAAK,QAAQ,KAAK,YAAY,QAAW;AAC1C,aAAO;AAAA;AAAA,iCAEc,KAAK,OAAO;AAAA;AAAA,IAErC;AAEA,WAAO;AAAA;AAAA,yBAEU,QAAQ,KAAK,KAAK,OAAO,iBAAiB,KAAK,QAAQ,EAAE;AAAA,8BACpD,SAAS,KAAK,KAAK,OAAO,EAAE;AAAA,0BAChC,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA,sCAKC,KAAK,IAAI,YAAY,KAAK,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sDAQhB,KAAK,QAAQ;AAAA;AAAA;AAAA;AAAA,8BAIrC,uBAAuB,KAAK,MAAM,KAAK,QAAQ,EAC5C,IAAI,gBAAc;AACf,aAAO,WAAW;AAAA,IACtB,CAAC,EACA,KAAK,KAAK,CAAC;AAAA;AAAA;AAAA,sBAGtB;AAAA,MAAM,CAAC,KAAK,MAAM,WAAW,MAAM;AAAA,MAAG,MACpC,kBAAkB,KAAK,MAAO,KAAK,QAAS,EAAE,IAAI,aAAW;AACzD,eAAO;AAAA;AAAA;AAAA,2CAGQ,SAAS,KAAK,KAAM,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,EAAE;AAAA;AAAA,2DAEzC,SAAS,OAAO,GAAG,SAAS,wBAAwB;AAAA,4EACnC,OAAO,KAAK,UAAU,OAAO,CAAC;AAAA,oEACtC,eAAe;AAAA;AAAA;AAAA,MAG3D,CAAC;AAAA,IACL,CAAC;AAAA;AAAA;AAAA;AAAA,EAIjB;AAAA,EAEQ,UAAU;AACd,YAAQ,KAAK;AAAA,EACjB;AAuCJ;AAzGM,mBAoEc,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAhElB;AAAA,EADN,SAAS;AAAA,GAHR,mBAIK;AAGA;AAAA,EADN,SAAS;AAAA,GANR,mBAOK;AAPL,qBAAN;AAAA,EADC,cAAc,sBAAsB;AAAA,GAC/B;",
5
5
  "names": []
6
6
  }
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025-2026 Open Home Foundation
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /**
7
+ * Format a number as a hex string with 0x prefix.
8
+ * Ensures even number of digits with a minimum of 4 digits.
9
+ *
10
+ * Examples:
11
+ * 0 -> "0x0000"
12
+ * 255 -> "0x00FF"
13
+ * 65535 -> "0xFFFF"
14
+ * 65536 -> "0x010000"
15
+ */
16
+ export declare function formatHex(value: number): string;
17
+ //# sourceMappingURL=format_hex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format_hex.d.ts","sourceRoot":"","sources":["../../../src/util/format_hex.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAa/C"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025-2026 Open Home Foundation
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ function formatHex(value) {
7
+ let hex = value.toString(16).toUpperCase();
8
+ if (hex.length < 4) {
9
+ hex = hex.padStart(4, "0");
10
+ } else if (hex.length % 2 !== 0) {
11
+ hex = "0" + hex;
12
+ }
13
+ return `0x${hex}`;
14
+ }
15
+ export {
16
+ formatHex
17
+ };
18
+ //# sourceMappingURL=format_hex.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/format_hex.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAgBO,SAAS,UAAU,OAAuB;AAC7C,MAAI,MAAM,MAAM,SAAS,EAAE,EAAE,YAAY;AAGzC,MAAI,IAAI,SAAS,GAAG;AAChB,UAAM,IAAI,SAAS,GAAG,GAAG;AAAA,EAC7B,WAES,IAAI,SAAS,MAAM,GAAG;AAC3B,UAAM,MAAM;AAAA,EAChB;AAEA,SAAO,KAAK,GAAG;AACnB;",
5
+ "names": []
6
+ }
@@ -1,5 +1,5 @@
1
- import { r, n, t, i, b } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { p as preventDefault } from './prevent_default--haJaAsZ.js';
1
+ import { r, n, t, i, b } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { p as preventDefault } from './prevent_default-Dw7ifAL-.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-CCBBvBEh.js');
47
+ import('./commission-node-wifi-VQGVOrr7.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-CJn6OYQX.js');
54
+ import('./commission-node-thread-CXquVvK5.js');
55
55
  this._mode = "thread";
56
56
  }
57
57
  _commissionExisting() {
58
- import('./commission-node-existing-RgaziosB.js');
58
+ import('./commission-node-existing-DY6SnsHb.js');
59
59
  this._mode = "existing";
60
60
  }
61
61
  _nodeCommissioned(ev) {
@@ -1,8 +1,8 @@
1
- import { r, c, n, d as clientContext, e, t, i, A, b } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { f as fireEvent } from './fire_event-CdvT7FSP.js';
3
- import './outlined-text-field-DeeCilzP.js';
1
+ import { r, c, n, d as clientContext, e, t, i, A, b } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { f as fireEvent } from './fire_event-B13DcOc9.js';
3
+ import './outlined-text-field-CtlEkpbk.js';
4
4
  import './main.js';
5
- import './prevent_default--haJaAsZ.js';
5
+ import './prevent_default-Dw7ifAL-.js';
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,8 +1,8 @@
1
- import { r, c, n, d as clientContext, e, t, i, A, b } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { f as fireEvent } from './fire_event-CdvT7FSP.js';
3
- import './outlined-text-field-DeeCilzP.js';
1
+ import { r, c, n, d as clientContext, e, t, i, A, b } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { f as fireEvent } from './fire_event-B13DcOc9.js';
3
+ import './outlined-text-field-CtlEkpbk.js';
4
4
  import './main.js';
5
- import './prevent_default--haJaAsZ.js';
5
+ import './prevent_default-Dw7ifAL-.js';
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,8 +1,8 @@
1
- import { r, c, n, d as clientContext, e, t, i, A, b } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { f as fireEvent } from './fire_event-CdvT7FSP.js';
3
- import './outlined-text-field-DeeCilzP.js';
1
+ import { r, c, n, d as clientContext, e, t, i, A, b } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { f as fireEvent } from './fire_event-B13DcOc9.js';
3
+ import './outlined-text-field-CtlEkpbk.js';
4
4
  import './main.js';
5
- import './prevent_default--haJaAsZ.js';
5
+ import './prevent_default-Dw7ifAL-.js';
6
6
 
7
7
  var __defProp = Object.defineProperty;
8
8
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -1,5 +1,5 @@
1
- import { n, t, i, b } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { p as preventDefault } from './prevent_default--haJaAsZ.js';
1
+ import { n, t, i, b } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { p as preventDefault } from './prevent_default-Dw7ifAL-.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- import { m as mixinDelegatesAria, i, _ as __decorate, n, f as e, A, b, a as i$1, t } from './matter-dashboard-app-DwI2RvT1.js';
1
+ import { m as mixinDelegatesAria, i, _ as __decorate, n, f as e, A, b, a as i$1, t } from './matter-dashboard-app-CU3-L2nl.js';
2
2
 
3
3
  /**
4
4
  * @license
@@ -509,7 +509,7 @@ class MatterClient {
509
509
  * SPDX-License-Identifier: Apache-2.0
510
510
  */
511
511
  async function main() {
512
- import('./matter-dashboard-app-DwI2RvT1.js').then(function (n) { return n.s; });
512
+ import('./matter-dashboard-app-CU3-L2nl.js').then(function (n) { return n.s; });
513
513
  let url = "";
514
514
  const isProductionServer = location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
515
515
  if (!isProductionServer) {
@@ -14957,7 +14957,7 @@ const clusters = {
14957
14957
  * SPDX-License-Identifier: Apache-2.0
14958
14958
  */
14959
14959
  const showDialogBox = async (type, dialogParams) => {
14960
- await import('./dialog-box-CFO9GMyG.js');
14960
+ await import('./dialog-box-qX-alVZJ.js');
14961
14961
  return new Promise(resolve => {
14962
14962
  const dialog = document.createElement("dialox-box");
14963
14963
  dialog.params = dialogParams;
@@ -15567,7 +15567,7 @@ var mdiArrowLeft="M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L
15567
15567
  */
15568
15568
  const showNodeBindingDialog = async (client, node, endpoint) => {
15569
15569
  var _document$querySelect;
15570
- await import('./node-binding-dialog-CmTgtqz1.js');
15570
+ await import('./node-binding-dialog-D4rr_G9I.js');
15571
15571
  const dialog = document.createElement("node-binding-dialog");
15572
15572
  dialog.client = client;
15573
15573
  dialog.node = node;
@@ -15596,6 +15596,21 @@ const e = {},
15596
15596
  }
15597
15597
  });
15598
15598
 
15599
+ /**
15600
+ * @license
15601
+ * Copyright 2025-2026 Open Home Foundation
15602
+ * SPDX-License-Identifier: Apache-2.0
15603
+ */
15604
+ function formatHex(value) {
15605
+ let hex = value.toString(16).toUpperCase();
15606
+ if (hex.length < 4) {
15607
+ hex = hex.padStart(4, "0");
15608
+ } else if (hex.length % 2 !== 0) {
15609
+ hex = "0" + hex;
15610
+ }
15611
+ return `0x${hex}`;
15612
+ }
15613
+
15599
15614
  var __defProp$8 = Object.defineProperty;
15600
15615
  var __getOwnPropDesc$a = Object.getOwnPropertyDescriptor;
15601
15616
  var __decorateClass$b = (decorators, target, key, kind) => {
@@ -15664,7 +15679,7 @@ let MatterEndpointView = class extends i$3 {
15664
15679
  href=${`#node/${this.node.node_id}/${this.endpoint}/${cluster}`}
15665
15680
  >
15666
15681
  <div slot="headline">${((_clusters$cluster = clusters[cluster]) === null || _clusters$cluster === void 0 ? void 0 : _clusters$cluster.label) || "Custom/Unknown Cluster"}</div>
15667
- <div slot="supporting-text">ClusterId ${cluster} (0x00${cluster.toString(16)})</div>
15682
+ <div slot="supporting-text">ClusterId ${cluster} (${formatHex(cluster)})</div>
15668
15683
  <ha-svg-icon slot="end" .path=${mdiChevronRight}></ha-svg-icon>
15669
15684
  </md-list-item>
15670
15685
  `;
@@ -15733,6 +15748,23 @@ var __decorateClass$a = (decorators, target, key, kind) => {
15733
15748
  if (kind && result) __defProp$7(target, key, result);
15734
15749
  return result;
15735
15750
  };
15751
+ const UPDATE_STATE_LABELS = {
15752
+ 1: "Idle",
15753
+ 2: "Querying",
15754
+ 3: "Waiting (Querying)",
15755
+ 4: "Downloading",
15756
+ 5: "Applying",
15757
+ 6: "Waiting (Applying)",
15758
+ 7: "Rolling back",
15759
+ 8: "Waiting for consent"
15760
+ };
15761
+ function getUpdateStateLabel(state2, progress) {
15762
+ const label = UPDATE_STATE_LABELS[state2] || `Unknown (${state2})`;
15763
+ if (state2 === 4 && progress !== void 0) {
15764
+ return `${label} (${progress}%)`;
15765
+ }
15766
+ return label;
15767
+ }
15736
15768
  function getNodeDeviceTypes(node) {
15737
15769
  const uniqueEndpoints = new Set(Object.keys(node.attributes).map(key => Number(key.split("/")[0])));
15738
15770
  const allDeviceTypes = /* @__PURE__ */new Set();
@@ -15780,14 +15812,13 @@ let NodeDetails = class extends i$3 {
15780
15812
  <md-outlined-button @click=${this._reinterview}
15781
15813
  >Interview<ha-svg-icon slot="icon" .path=${mdiChatProcessing}></ha-svg-icon
15782
15814
  ></md-outlined-button>
15783
- ${this._updateInitiated || (this.node.updateState || 0) > 1 ? b` <md-outlined-button disabled
15784
- >Update in progress (${this.node.updateStateProgress || 0}%)<ha-svg-icon
15785
- slot="icon"
15786
- .path=${mdiUpdate}
15787
- ></ha-svg-icon
15788
- ></md-outlined-button>` : b`<md-outlined-button @click=${this._searchUpdate}
15789
- >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
15790
- ></md-outlined-button>`}
15815
+ ${this._updateInitiated ? b` <md-outlined-button disabled
15816
+ >Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
15817
+ ></md-outlined-button>` : (this.node.updateState || 0) > 1 ? b` <md-outlined-button disabled
15818
+ >${getUpdateStateLabel(this.node.updateState, this.node.updateStateProgress)}<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
15819
+ ></md-outlined-button>` : b`<md-outlined-button @click=${this._searchUpdate}
15820
+ >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
15821
+ ></md-outlined-button>`}
15791
15822
  ${bindings ? b`
15792
15823
  <md-outlined-button @click=${this._binding}>
15793
15824
  Binding
@@ -16275,7 +16306,7 @@ let MatterClusterView = class extends i$3 {
16275
16306
  Endpoint ${this.endpoint}</b
16276
16307
  >
16277
16308
  </div>
16278
- <div slot="supporting-text">ClusterId ${this.cluster} (0x00${this.cluster.toString(16)})</div>
16309
+ <div slot="supporting-text">ClusterId ${this.cluster} (${formatHex(this.cluster)})</div>
16279
16310
  </md-list-item>
16280
16311
  <md-divider></md-divider>
16281
16312
  ${clusterAttributes(this.node.attributes, this.endpoint, this.cluster).map((attribute, index) => {
@@ -16286,7 +16317,7 @@ let MatterClusterView = class extends i$3 {
16286
16317
  ${((_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"}
16287
16318
  </div>
16288
16319
  <div slot="supporting-text">
16289
- AttributeId: ${attribute.key} (0x00${attribute.key.toString(16)}) - Value type:
16320
+ AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
16290
16321
  ${((_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"}
16291
16322
  </div>
16292
16323
  <div slot="end">
@@ -16597,7 +16628,7 @@ DashboardFooter = __decorateClass$3([t$1("dashboard-footer")], DashboardFooter);
16597
16628
  */
16598
16629
  const showCommissionNodeDialog = async client => {
16599
16630
  var _document$querySelect;
16600
- await import('./commission-node-dialog-30lGnJcb.js');
16631
+ await import('./commission-node-dialog--19-sX9D.js');
16601
16632
  const dialog = document.createElement("commission-node-dialog");
16602
16633
  dialog.client = client;
16603
16634
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -1,6 +1,6 @@
1
- import { a as i, c, n, d as clientContext, e, i as i$1, A, b, t } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { p as preventDefault } from './prevent_default--haJaAsZ.js';
3
- import './outlined-text-field-DeeCilzP.js';
1
+ import { a as i, c, n, d as clientContext, e, i as i$1, A, b, t } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { p as preventDefault } from './prevent_default-Dw7ifAL-.js';
3
+ import './outlined-text-field-CtlEkpbk.js';
4
4
  import './main.js';
5
5
 
6
6
  var _staticBlock$1;
@@ -1,5 +1,5 @@
1
- import { _ as __decorate, n as n$1, o as o$1, r as r$1, e, i as i$1, f as e$1, A, b, D, E as EASING, a as i$2, t, g as e$2, h as i$3, j as t$1, k as E, l as internals, m as mixinDelegatesAria, p as mixinElementInternals, u, q as i$4 } from './matter-dashboard-app-DwI2RvT1.js';
2
- import { r as redispatchEvent } from './prevent_default--haJaAsZ.js';
1
+ import { _ as __decorate, n as n$1, o as o$1, r as r$1, e, i as i$1, f as e$1, A, b, D, E as EASING, a as i$2, t, g as e$2, h as i$3, j as t$1, k as E, l as internals, m as mixinDelegatesAria, p as mixinElementInternals, u, q as i$4 } from './matter-dashboard-app-CU3-L2nl.js';
2
+ import { r as redispatchEvent } from './prevent_default-Dw7ifAL-.js';
3
3
 
4
4
  /**
5
5
  * @license
@@ -1,4 +1,4 @@
1
- import { E as EASING, m as mixinDelegatesAria, i, _ as __decorate, n, e, r, b, f as e$1, A, a as i$1, t } from './matter-dashboard-app-DwI2RvT1.js';
1
+ import { E as EASING, m as mixinDelegatesAria, i, _ as __decorate, n, e, r, b, f as e$1, A, a as i$1, t } from './matter-dashboard-app-CU3-L2nl.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.2.5",
3
+ "version": "0.2.6",
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.2.5",
41
- "@matter-server/custom-clusters": "0.2.5",
40
+ "@matter-server/ws-client": "0.2.6",
41
+ "@matter-server/custom-clusters": "0.2.6",
42
42
  "@mdi/js": "^7.4.47",
43
43
  "lit": "^3.3.1",
44
44
  "tslib": "^2.8.1"
@@ -24,6 +24,27 @@ import "../../components/ha-svg-icon";
24
24
  import { getEndpointDeviceTypes } from "../matter-endpoint-view.js";
25
25
  import { bindingContext } from "./context.js";
26
26
 
27
+ /** Map updateState values to user-friendly labels */
28
+ const UPDATE_STATE_LABELS: Record<number, string> = {
29
+ 1: "Idle",
30
+ 2: "Querying",
31
+ 3: "Waiting (Querying)",
32
+ 4: "Downloading",
33
+ 5: "Applying",
34
+ 6: "Waiting (Applying)",
35
+ 7: "Rolling back",
36
+ 8: "Waiting for consent",
37
+ };
38
+
39
+ function getUpdateStateLabel(state: number, progress?: number): string {
40
+ const label = UPDATE_STATE_LABELS[state] || `Unknown (${state})`;
41
+ // Show progress only for downloading state
42
+ if (state === 4 && progress !== undefined) {
43
+ return `${label} (${progress}%)`;
44
+ }
45
+ return label;
46
+ }
47
+
27
48
  function getNodeDeviceTypes(node: MatterNode): DeviceType[] {
28
49
  const uniqueEndpoints = new Set(Object.keys(node.attributes).map(key => Number(key.split("/")[0])));
29
50
  const allDeviceTypes: Set<DeviceType> = new Set();
@@ -86,16 +107,20 @@ export class NodeDetails extends LitElement {
86
107
  <md-outlined-button @click=${this._reinterview}
87
108
  >Interview<ha-svg-icon slot="icon" .path=${mdiChatProcessing}></ha-svg-icon
88
109
  ></md-outlined-button>
89
- ${this._updateInitiated || (this.node.updateState || 0) > 1
110
+ ${this._updateInitiated
90
111
  ? html` <md-outlined-button disabled
91
- >Update in progress (${this.node.updateStateProgress || 0}%)<ha-svg-icon
92
- slot="icon"
93
- .path=${mdiUpdate}
94
- ></ha-svg-icon
112
+ >Checking for updates<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
95
113
  ></md-outlined-button>`
96
- : html`<md-outlined-button @click=${this._searchUpdate}
97
- >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
98
- ></md-outlined-button>`}
114
+ : (this.node.updateState || 0) > 1
115
+ ? html` <md-outlined-button disabled
116
+ >${getUpdateStateLabel(
117
+ this.node.updateState!,
118
+ this.node.updateStateProgress,
119
+ )}<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
120
+ ></md-outlined-button>`
121
+ : html`<md-outlined-button @click=${this._searchUpdate}
122
+ >Update<ha-svg-icon slot="icon" .path=${mdiUpdate}></ha-svg-icon
123
+ ></md-outlined-button>`}
99
124
  ${bindings
100
125
  ? html`
101
126
  <md-outlined-button @click=${this._binding}>
@@ -19,6 +19,7 @@ import "../components/ha-svg-icon";
19
19
  import "../pages/components/node-details";
20
20
  import { bindingContext } from "./components/context.js";
21
21
  // Cluster command components (auto-register on import)
22
+ import { formatHex } from "../util/format_hex.js";
22
23
  import { getClusterCommandsTag } from "./cluster-commands/index.js";
23
24
 
24
25
  declare global {
@@ -103,7 +104,7 @@ class MatterClusterView extends LitElement {
103
104
  Endpoint ${this.endpoint}</b
104
105
  >
105
106
  </div>
106
- <div slot="supporting-text">ClusterId ${this.cluster} (0x00${this.cluster.toString(16)})</div>
107
+ <div slot="supporting-text">ClusterId ${this.cluster} (${formatHex(this.cluster)})</div>
107
108
  </md-list-item>
108
109
  <md-divider></md-divider>
109
110
  ${clusterAttributes(this.node.attributes, this.endpoint, this.cluster).map(
@@ -114,7 +115,7 @@ class MatterClusterView extends LitElement {
114
115
  "Custom/Unknown Attribute"}
115
116
  </div>
116
117
  <div slot="supporting-text">
117
- AttributeId: ${attribute.key} (0x00${attribute.key.toString(16)}) - Value type:
118
+ AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
118
119
  ${clusters[this.cluster!]?.attributes[attribute.key]?.type || "unknown"}
119
120
  </div>
120
121
  <div slot="end">
@@ -15,6 +15,7 @@ import { customElement, property } from "lit/decorators.js";
15
15
  import { guard } from "lit/directives/guard.js";
16
16
  import { DeviceType, clusters, device_types } from "../client/models/descriptions.js";
17
17
  import "../components/ha-svg-icon";
18
+ import { formatHex } from "../util/format_hex.js";
18
19
 
19
20
  declare global {
20
21
  interface HTMLElementTagNameMap {
@@ -97,7 +98,7 @@ class MatterEndpointView extends LitElement {
97
98
  href=${`#node/${this.node!.node_id}/${this.endpoint}/${cluster}`}
98
99
  >
99
100
  <div slot="headline">${clusters[cluster]?.label || "Custom/Unknown Cluster"}</div>
100
- <div slot="supporting-text">ClusterId ${cluster} (0x00${cluster.toString(16)})</div>
101
+ <div slot="supporting-text">ClusterId ${cluster} (${formatHex(cluster)})</div>
101
102
  <ha-svg-icon slot="end" .path=${mdiChevronRight}></ha-svg-icon>
102
103
  </md-list-item>
103
104
  `;
@@ -0,0 +1,30 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025-2026 Open Home Foundation
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * Format a number as a hex string with 0x prefix.
9
+ * Ensures even number of digits with a minimum of 4 digits.
10
+ *
11
+ * Examples:
12
+ * 0 -> "0x0000"
13
+ * 255 -> "0x00FF"
14
+ * 65535 -> "0xFFFF"
15
+ * 65536 -> "0x010000"
16
+ */
17
+ export function formatHex(value: number): string {
18
+ let hex = value.toString(16).toUpperCase();
19
+
20
+ // Ensure minimum 4 digits
21
+ if (hex.length < 4) {
22
+ hex = hex.padStart(4, "0");
23
+ }
24
+ // Ensure even number of digits
25
+ else if (hex.length % 2 !== 0) {
26
+ hex = "0" + hex;
27
+ }
28
+
29
+ return `0x${hex}`;
30
+ }