@matter-server/dashboard 0.6.2-alpha.0-20260422-4efb179 → 0.6.2-alpha.0-20260426-e2eae3d

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 (28) hide show
  1. package/dist/esm/components/dialogs/dev/command-invoke-dialog.d.ts +2 -1
  2. package/dist/esm/components/dialogs/dev/command-invoke-dialog.d.ts.map +1 -1
  3. package/dist/esm/components/dialogs/dev/command-invoke-dialog.js +33 -6
  4. package/dist/esm/components/dialogs/dev/command-invoke-dialog.js.map +1 -1
  5. package/dist/esm/components/dialogs/dev/show-command-invoke-dialog.d.ts +1 -1
  6. package/dist/esm/components/dialogs/dev/show-command-invoke-dialog.d.ts.map +1 -1
  7. package/dist/esm/components/dialogs/dev/show-command-invoke-dialog.js +1 -1
  8. package/dist/esm/components/dialogs/dev/show-command-invoke-dialog.js.map +1 -1
  9. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  10. package/dist/esm/pages/matter-cluster-view.js +12 -6
  11. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  12. package/dist/web/index.html +2 -0
  13. package/dist/web/js/{attribute-write-dialog-BjBvI9Vg.js → attribute-write-dialog-g4B6BoRt.js} +1 -1
  14. package/dist/web/js/{command-invoke-dialog-GfZXZjFc.js → command-invoke-dialog-D6G704VK.js} +30 -7
  15. package/dist/web/js/{commission-node-dialog-BAEMNaRj.js → commission-node-dialog-Bg3oo5ub.js} +4 -4
  16. package/dist/web/js/{commission-node-existing-NbcOLhCW.js → commission-node-existing-DO3g1aQJ.js} +2 -2
  17. package/dist/web/js/{commission-node-thread-CPS6eA4_.js → commission-node-thread-DM432aH1.js} +2 -2
  18. package/dist/web/js/{commission-node-wifi-DgnCq_XI.js → commission-node-wifi-Bx40FXij.js} +2 -2
  19. package/dist/web/js/{dialog-box-CRmSjFmJ.js → dialog-box-DjyfULWB.js} +1 -1
  20. package/dist/web/js/{fire_event-CMN0BnIt.js → fire_event-BstgNPuh.js} +1 -1
  21. package/dist/web/js/main.js +1 -1
  22. package/dist/web/js/{matter-dashboard-app-Cne9OvsE.js → matter-dashboard-app-Cj88TtbZ.js} +26 -20
  23. package/dist/web/js/{node-binding-dialog-C3d1oHJA.js → node-binding-dialog-9yy2LE3_.js} +1 -1
  24. package/dist/web/js/{settings-dialog-WGqWo_ox.js → settings-dialog-Cs2xMsXb.js} +1 -1
  25. package/package.json +4 -4
  26. package/src/components/dialogs/dev/command-invoke-dialog.ts +28 -4
  27. package/src/components/dialogs/dev/show-command-invoke-dialog.ts +2 -2
  28. package/src/pages/matter-cluster-view.ts +13 -5
@@ -12,11 +12,12 @@ export declare class CommandInvokeDialog extends LitElement {
12
12
  nodeId: number | bigint;
13
13
  endpointId: number;
14
14
  clusterId: number;
15
+ commandId: number;
15
16
  commandName: string;
16
- commandLabel: string;
17
17
  private _busy;
18
18
  private _error;
19
19
  private _response;
20
+ private _success;
20
21
  private _textarea;
21
22
  protected firstUpdated(): void;
22
23
  private _close;
@@ -1 +1 @@
1
- {"version":3,"file":"command-invoke-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/dev/command-invoke-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAOrD,qBACa,mBAAoB,SAAQ,UAAU;IAExC,MAAM,EAAG,YAAY,CAAC;IAEM,MAAM,EAAG,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,EAAG,MAAM,CAAC;IACpB,SAAS,EAAG,MAAM,CAAC;IACnB,WAAW,EAAG,MAAM,CAAC;IACrB,YAAY,EAAG,MAAM,CAAC;IAEhD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IAE9B,OAAO,CAAC,SAAS,CAAuB;IAE3D,UAAmB,YAAY,SAM9B;IAED,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;YAIP,OAAO;IAiCrB,UAAmB,MAAM,yCAqCxB;IAED,OAAgB,MAAM,0BA0EpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,uBAAuB,EAAE,mBAAmB,CAAC;KAChD;CACJ"}
1
+ {"version":3,"file":"command-invoke-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/dev/command-invoke-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,EAAE,YAAY,EAAqB,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAOrD,qBACa,mBAAoB,SAAQ,UAAU;IAExC,MAAM,EAAG,YAAY,CAAC;IAEM,MAAM,EAAG,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,EAAG,MAAM,CAAC;IACpB,SAAS,EAAG,MAAM,CAAC;IACnB,SAAS,EAAG,MAAM,CAAC;IACnB,WAAW,EAAG,MAAM,CAAC;IAE/C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,QAAQ,CAAS;IAEf,OAAO,CAAC,SAAS,CAAuB;IAE3D,UAAmB,YAAY,SAM9B;IAED,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;YAIP,OAAO;IAyCrB,UAAmB,MAAM,yCAyCxB;IAED,OAAgB,MAAM,0BAqFpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,uBAAuB,EAAE,mBAAmB,CAAC;KAChD;CACJ"}
@@ -28,6 +28,7 @@ let CommandInvokeDialog = class extends LitElement {
28
28
  this._busy = false;
29
29
  this._error = null;
30
30
  this._response = null;
31
+ this._success = false;
31
32
  }
32
33
  firstUpdated() {
33
34
  if (this._textarea && this._textarea.value === "") {
@@ -42,6 +43,7 @@ let CommandInvokeDialog = class extends LitElement {
42
43
  }
43
44
  async _invoke() {
44
45
  this._error = null;
46
+ this._success = false;
45
47
  const parsed = parseJsonPayload(this._textarea.value);
46
48
  if (!parsed.ok) {
47
49
  this._error = `Invalid JSON: ${parsed.error}`;
@@ -63,11 +65,18 @@ let CommandInvokeDialog = class extends LitElement {
63
65
  this.commandName,
64
66
  payload
65
67
  );
66
- this._response = toBigIntAwareJson(result ?? null, 2);
68
+ if (result === null || result === void 0) {
69
+ this._success = true;
70
+ this._response = null;
71
+ } else {
72
+ this._response = toBigIntAwareJson(result, 2);
73
+ this._success = false;
74
+ }
67
75
  this._error = null;
68
76
  } catch (err) {
69
77
  this._error = err instanceof Error ? err.message : String(err);
70
78
  this._response = null;
79
+ this._success = false;
71
80
  } finally {
72
81
  this._busy = false;
73
82
  }
@@ -75,11 +84,14 @@ let CommandInvokeDialog = class extends LitElement {
75
84
  render() {
76
85
  return html`
77
86
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
78
- <div slot="headline">Invoke ${this.commandLabel}</div>
87
+ <div slot="headline">Invoke ${this.commandName}</div>
79
88
  <div slot="content">
80
89
  <p class="path" id="invoke-path">
81
90
  Cluster <code>${this.clusterId}</code> (${formatHex(this.clusterId)}) · Endpoint
82
- <code>${this.endpointId}</code> · Command <code>${this.commandName}</code>
91
+ <code>${this.endpointId}</code> · Command <code>${this.commandId}</code> (${formatHex(
92
+ this.commandId
93
+ )})
94
+ · <code>${this.commandName}</code>
83
95
  </p>
84
96
  <label class="textarea-label" for="payload">Payload (JSON)</label>
85
97
  <textarea
@@ -92,6 +104,7 @@ let CommandInvokeDialog = class extends LitElement {
92
104
  rows="8"
93
105
  ></textarea>
94
106
  ${this._error ? html`<div id="invoke-error" class="error" role="alert">${this._error}</div>` : nothing}
107
+ ${this._success ? html`<div class="success" role="status">Success</div>` : nothing}
95
108
  ${this._response !== null ? html`
96
109
  <label class="textarea-label">Response</label>
97
110
  <pre class="response"><code>${this._response}</code></pre>
@@ -164,6 +177,17 @@ CommandInvokeDialog.styles = css`
164
177
  word-break: break-word;
165
178
  }
166
179
 
180
+ .success {
181
+ margin-top: 10px;
182
+ padding: 10px 12px;
183
+ background: color-mix(in srgb, var(--success-color) 18%, transparent);
184
+ color: var(--success-color);
185
+ border: 1px solid color-mix(in srgb, var(--success-color) 40%, transparent);
186
+ border-radius: 6px;
187
+ font-size: 0.9rem;
188
+ font-weight: 500;
189
+ }
190
+
167
191
  .response {
168
192
  margin: 6px 0 0 0;
169
193
  padding: 10px 12px;
@@ -195,11 +219,11 @@ __decorateClass([
195
219
  property({ type: Number })
196
220
  ], CommandInvokeDialog.prototype, "clusterId", 2);
197
221
  __decorateClass([
198
- property({ type: String })
199
- ], CommandInvokeDialog.prototype, "commandName", 2);
222
+ property({ type: Number })
223
+ ], CommandInvokeDialog.prototype, "commandId", 2);
200
224
  __decorateClass([
201
225
  property({ type: String })
202
- ], CommandInvokeDialog.prototype, "commandLabel", 2);
226
+ ], CommandInvokeDialog.prototype, "commandName", 2);
203
227
  __decorateClass([
204
228
  state()
205
229
  ], CommandInvokeDialog.prototype, "_busy", 2);
@@ -209,6 +233,9 @@ __decorateClass([
209
233
  __decorateClass([
210
234
  state()
211
235
  ], CommandInvokeDialog.prototype, "_response", 2);
236
+ __decorateClass([
237
+ state()
238
+ ], CommandInvokeDialog.prototype, "_success", 2);
212
239
  __decorateClass([
213
240
  query("textarea")
214
241
  ], CommandInvokeDialog.prototype, "_textarea", 2);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/dialogs/dev/command-invoke-dialog.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -9,8 +9,8 @@ export interface ShowCommandInvokeDialogOptions {
9
9
  nodeId: number | bigint;
10
10
  endpointId: number;
11
11
  clusterId: number;
12
+ commandId: number;
12
13
  commandName: string;
13
- commandLabel: string;
14
14
  }
15
15
  export declare const showCommandInvokeDialog: (options: ShowCommandInvokeDialogOptions) => Promise<void>;
16
16
  //# sourceMappingURL=show-command-invoke-dialog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"show-command-invoke-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/dev/show-command-invoke-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,8BAA8B;IAC3C,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,uBAAuB,YAAmB,8BAA8B,kBAUpF,CAAC"}
1
+ {"version":3,"file":"show-command-invoke-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/dev/show-command-invoke-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,MAAM,WAAW,8BAA8B;IAC3C,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,uBAAuB,YAAmB,8BAA8B,kBAUpF,CAAC"}
@@ -10,8 +10,8 @@ const showCommandInvokeDialog = async (options) => {
10
10
  dialog.nodeId = options.nodeId;
11
11
  dialog.endpointId = options.endpointId;
12
12
  dialog.clusterId = options.clusterId;
13
+ dialog.commandId = options.commandId;
13
14
  dialog.commandName = options.commandName;
14
- dialog.commandLabel = options.commandLabel;
15
15
  document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
16
16
  };
17
17
  export {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/components/dialogs/dev/show-command-invoke-dialog.ts"],
4
- "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAiBO,MAAM,0BAA0B,OAAO,YAA4C;AACtF,QAAM,OAAO,4BAA4B;AACzC,QAAM,SAAS,SAAS,cAAc,uBAAuB;AAC7D,SAAO,SAAS,QAAQ;AACxB,SAAO,SAAS,QAAQ;AACxB,SAAO,aAAa,QAAQ;AAC5B,SAAO,YAAY,QAAQ;AAC3B,SAAO,cAAc,QAAQ;AAC7B,SAAO,eAAe,QAAQ;AAC9B,WAAS,cAAc,sBAAsB,GAAG,WAAW,YAAY,MAAM;AACjF;",
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAiBO,MAAM,0BAA0B,OAAO,YAA4C;AACtF,QAAM,OAAO,4BAA4B;AACzC,QAAM,SAAS,SAAS,cAAc,uBAAuB;AAC7D,SAAO,SAAS,QAAQ;AACxB,SAAO,SAAS,QAAQ;AACxB,SAAO,aAAa,QAAQ;AAC5B,SAAO,YAAY,QAAQ;AAC3B,SAAO,YAAY,QAAQ;AAC3B,SAAO,cAAc,QAAQ;AAC7B,WAAS,cAAc,sBAAsB,GAAG,WAAW,YAAY,MAAM;AACjF;",
5
5
  "names": []
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,sCAAsC,CAAC;AAC9C,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,+CAA+C,CAAC;AACvD,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAgB,YAAY,EAAE,UAAU,EAAqB,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAa,UAAU,EAAW,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAO1E,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAQ1C,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ;AAuCD,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,OAAO,CAAC,QAAQ,CAAyB;IAGzC,OAAO,CAAC,aAAa,CAAoC;IAElE,OAAO,CAAC,eAAe,CAAC,CAAa;IAE5B,iBAAiB,SAKzB;IAEQ,oBAAoB,SAG5B;IAEQ,MAAM,sBAiFd;IAED,OAAO,CAAC,0BAA0B;YAkCpB,iBAAiB;IAmC/B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,uBAAuB;IAoD/B,OAAO,CAAC,wBAAwB;YAYlB,mBAAmB;IAQjC,OAAO,CAAC,sBAAsB;IAkBrB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAmBvD;IAED,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,4BAyNpB;CACL"}
1
+ {"version":3,"file":"matter-cluster-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-cluster-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,sCAAsC,CAAC;AAC9C,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,+CAA+C,CAAC;AACvD,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,EAAgB,YAAY,EAAE,UAAU,EAAqB,MAAM,0BAA0B,CAAC;AAErG,OAAO,EAAa,UAAU,EAAW,KAAK,cAAc,EAAE,MAAM,KAAK,CAAC;AAO1E,OAAO,2BAA2B,CAAC;AACnC,OAAO,kCAAkC,CAAC;AAQ1C,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ;AAuCD,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,OAAO,CAAC,QAAQ,CAAyB;IAGzC,OAAO,CAAC,aAAa,CAAoC;IAElE,OAAO,CAAC,eAAe,CAAC,CAAa;IAE5B,iBAAiB,SAKzB;IAEQ,oBAAoB,SAG5B;IAEQ,MAAM,sBAmFd;IAED,OAAO,CAAC,0BAA0B;YAkCpB,iBAAiB;IAmC/B,OAAO,CAAC,yBAAyB;IAajC,OAAO,CAAC,uBAAuB;IAqD/B,OAAO,CAAC,wBAAwB;YAYlB,mBAAmB;IAQjC,OAAO,CAAC,sBAAsB;IAkBrB,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,QAmBvD;IAED,OAAO,CAAC,OAAO;IAIf,OAAgB,MAAM,4BA8NpB;CACL"}
@@ -88,9 +88,10 @@ let MatterClusterView = class extends LitElement {
88
88
  isTestNodeId(this.node.node_id)
89
89
  );
90
90
  const nodeHex = formatNodeAddress(fabricIndex, this.node.node_id);
91
+ const clusterName = clusters[this.cluster]?.label ?? "Custom/Unknown Cluster";
91
92
  return html`
92
93
  <dashboard-header
93
- .title=${`Node ${this.node.node_id} ${nodeHex} | Endpoint ${this.endpoint} | Cluster ${this.cluster}`}
94
+ .title=${`Node ${this.node.node_id} ${nodeHex} | Endpoint ${this.endpoint} | Cluster ${this.cluster} (${clusterName})`}
94
95
  .backButton=${`#node/${this.node.node_id}/${this.endpoint}`}
95
96
  .client=${this.client}
96
97
  ></dashboard-header>
@@ -221,7 +222,7 @@ let MatterClusterView = class extends LitElement {
221
222
  const clusterMeta = this.cluster !== void 0 ? clusters[this.cluster] : void 0;
222
223
  const rawAcceptedList = this.node?.attributes[`${this.endpoint}/${this.cluster}/${ACCEPTED_COMMAND_LIST_ATTR}`];
223
224
  const acceptedList = Array.isArray(rawAcceptedList) ? rawAcceptedList : [];
224
- const commands = acceptedList.map((id) => clusterMeta?.commands[id]).filter((cmd) => cmd !== void 0);
225
+ const commands = acceptedList.map((id) => clusterMeta?.commands[id]).filter((cmd) => cmd !== void 0).sort((a, b) => a.id - b.id);
225
226
  const online = this.node?.available === true;
226
227
  return html`
227
228
  <div class="container">
@@ -246,7 +247,7 @@ let MatterClusterView = class extends LitElement {
246
247
  <md-outlined-button
247
248
  class="dev-invoke-button"
248
249
  ?disabled=${!online}
249
- @click=${() => this._openCommandInvokeDialog(cmd.name, cmd.label)}
250
+ @click=${() => this._openCommandInvokeDialog(cmd.id, cmd.name)}
250
251
  >
251
252
  <ha-svg-icon slot="icon" .path=${mdiPlay}></ha-svg-icon>
252
253
  Invoke
@@ -261,15 +262,15 @@ let MatterClusterView = class extends LitElement {
261
262
  </div>
262
263
  `;
263
264
  }
264
- _openCommandInvokeDialog(commandName, commandLabel) {
265
+ _openCommandInvokeDialog(commandId, commandName) {
265
266
  if (!this.node || this.cluster === void 0) return;
266
267
  showCommandInvokeDialog({
267
268
  client: this.client,
268
269
  nodeId: this.node.node_id,
269
270
  endpointId: this.endpoint,
270
271
  clusterId: this.cluster,
271
- commandName,
272
- commandLabel
272
+ commandId,
273
+ commandName
273
274
  });
274
275
  }
275
276
  async _showAttributeValue(value) {
@@ -491,6 +492,11 @@ MatterClusterView.styles = [
491
492
  padding: 8px 12px;
492
493
  background: var(--md-sys-color-surface-container-low);
493
494
  border-radius: 8px;
495
+ transition: background 120ms ease-out;
496
+ }
497
+
498
+ .command-row:hover {
499
+ background: color-mix(in srgb, var(--dev-color) 12%, var(--md-sys-color-surface-container-low));
494
500
  }
495
501
 
496
502
  .dev-invoke-button {
@@ -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": ["state"]
6
6
  }
@@ -18,6 +18,7 @@
18
18
  --roboto-font: Roboto, system-ui;
19
19
  --text-color: rgba(0, 0, 0, 0.6);
20
20
  --danger-color: #db4437;
21
+ --success-color: #2e7d32;
21
22
 
22
23
  --md-sys-color-primary: #03a9f4;
23
24
  --md-sys-color-on-primary: #fff;
@@ -123,6 +124,7 @@
123
124
  --graph-node-fallback: #999999;
124
125
  --text-color: rgba(255, 255, 255, 0.6);
125
126
  --danger-color: #ff7961;
127
+ --success-color: #66bb6a;
126
128
  --primary-color: #4fc3f7;
127
129
  color-scheme: dark;
128
130
  }
@@ -1,4 +1,4 @@
1
- import { q as i, n, u as r, d as e, i as i$1, A, O as formatHex, j as b, K as handleAsync, t } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { q as i, n, u as r, d as e, i as i$1, A, O as formatHex, j as b, K as handleAsync, t } from './matter-dashboard-app-Cj88TtbZ.js';
2
2
  import { t as toBigIntAwareJson } from './main.js';
3
3
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
4
4
  import { p as parseJsonPayload } from './parse-json-payload-DU9TWKdu.js';
@@ -1,4 +1,4 @@
1
- import { q as i, n, u as r, d as e, i as i$1, A, O as formatHex, j as b, K as handleAsync, t } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { q as i, n, u as r, d as e, i as i$1, A, O as formatHex, j as b, K as handleAsync, t } from './matter-dashboard-app-Cj88TtbZ.js';
2
2
  import { t as toBigIntAwareJson } from './main.js';
3
3
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
4
4
  import { p as parseJsonPayload, i as isPlainObject } from './parse-json-payload-DU9TWKdu.js';
@@ -17,6 +17,7 @@ let CommandInvokeDialog = class extends i$1 {
17
17
  this._busy = false;
18
18
  this._error = null;
19
19
  this._response = null;
20
+ this._success = false;
20
21
  }
21
22
  firstUpdated() {
22
23
  if (this._textarea && this._textarea.value === "") {
@@ -31,6 +32,7 @@ let CommandInvokeDialog = class extends i$1 {
31
32
  }
32
33
  async _invoke() {
33
34
  this._error = null;
35
+ this._success = false;
34
36
  const parsed = parseJsonPayload(this._textarea.value);
35
37
  if (!parsed.ok) {
36
38
  this._error = `Invalid JSON: ${parsed.error}`;
@@ -46,11 +48,18 @@ let CommandInvokeDialog = class extends i$1 {
46
48
  this._busy = true;
47
49
  try {
48
50
  const result = await this.client.deviceCommand(this.nodeId, this.endpointId, this.clusterId, this.commandName, payload);
49
- this._response = toBigIntAwareJson(result ?? null, 2);
51
+ if (result === null || result === void 0) {
52
+ this._success = true;
53
+ this._response = null;
54
+ } else {
55
+ this._response = toBigIntAwareJson(result, 2);
56
+ this._success = false;
57
+ }
50
58
  this._error = null;
51
59
  } catch (err) {
52
60
  this._error = err instanceof Error ? err.message : String(err);
53
61
  this._response = null;
62
+ this._success = false;
54
63
  } finally {
55
64
  this._busy = false;
56
65
  }
@@ -58,11 +67,12 @@ let CommandInvokeDialog = class extends i$1 {
58
67
  render() {
59
68
  return b`
60
69
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
61
- <div slot="headline">Invoke ${this.commandLabel}</div>
70
+ <div slot="headline">Invoke ${this.commandName}</div>
62
71
  <div slot="content">
63
72
  <p class="path" id="invoke-path">
64
73
  Cluster <code>${this.clusterId}</code> (${formatHex(this.clusterId)}) · Endpoint
65
- <code>${this.endpointId}</code> · Command <code>${this.commandName}</code>
74
+ <code>${this.endpointId}</code> · Command <code>${this.commandId}</code> (${formatHex(this.commandId)})
75
+ · <code>${this.commandName}</code>
66
76
  </p>
67
77
  <label class="textarea-label" for="payload">Payload (JSON)</label>
68
78
  <textarea
@@ -75,6 +85,7 @@ let CommandInvokeDialog = class extends i$1 {
75
85
  rows="8"
76
86
  ></textarea>
77
87
  ${this._error ? b`<div id="invoke-error" class="error" role="alert">${this._error}</div>` : A}
88
+ ${this._success ? b`<div class="success" role="status">Success</div>` : A}
78
89
  ${this._response !== null ? b`
79
90
  <label class="textarea-label">Response</label>
80
91
  <pre class="response"><code>${this._response}</code></pre>
@@ -147,6 +158,17 @@ CommandInvokeDialog.styles = i`
147
158
  word-break: break-word;
148
159
  }
149
160
 
161
+ .success {
162
+ margin-top: 10px;
163
+ padding: 10px 12px;
164
+ background: color-mix(in srgb, var(--success-color) 18%, transparent);
165
+ color: var(--success-color);
166
+ border: 1px solid color-mix(in srgb, var(--success-color) 40%, transparent);
167
+ border-radius: 6px;
168
+ font-size: 0.9rem;
169
+ font-weight: 500;
170
+ }
171
+
150
172
  .response {
151
173
  margin: 6px 0 0 0;
152
174
  padding: 10px 12px;
@@ -178,14 +200,15 @@ __decorateClass([n({
178
200
  type: Number
179
201
  })], CommandInvokeDialog.prototype, "clusterId", 2);
180
202
  __decorateClass([n({
181
- type: String
182
- })], CommandInvokeDialog.prototype, "commandName", 2);
203
+ type: Number
204
+ })], CommandInvokeDialog.prototype, "commandId", 2);
183
205
  __decorateClass([n({
184
206
  type: String
185
- })], CommandInvokeDialog.prototype, "commandLabel", 2);
207
+ })], CommandInvokeDialog.prototype, "commandName", 2);
186
208
  __decorateClass([r()], CommandInvokeDialog.prototype, "_busy", 2);
187
209
  __decorateClass([r()], CommandInvokeDialog.prototype, "_error", 2);
188
210
  __decorateClass([r()], CommandInvokeDialog.prototype, "_response", 2);
211
+ __decorateClass([r()], CommandInvokeDialog.prototype, "_success", 2);
189
212
  __decorateClass([e("textarea")], CommandInvokeDialog.prototype, "_textarea", 2);
190
213
  CommandInvokeDialog = __decorateClass([t("command-invoke-dialog")], CommandInvokeDialog);
191
214
 
@@ -1,4 +1,4 @@
1
- import { u as r, n, t, i, j as b } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { u as r, n, t, i, j as b } from './matter-dashboard-app-Cj88TtbZ.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -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-DgnCq_XI.js');
47
+ import('./commission-node-wifi-Bx40FXij.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-CPS6eA4_.js');
54
+ import('./commission-node-thread-DM432aH1.js');
55
55
  this._mode = "thread";
56
56
  }
57
57
  _commissionExisting() {
58
- import('./commission-node-existing-NbcOLhCW.js');
58
+ import('./commission-node-existing-DO3g1aQJ.js');
59
59
  this._mode = "existing";
60
60
  }
61
61
  _nodeCommissioned(ev) {
@@ -1,5 +1,5 @@
1
- import { u as r, P as c, Q as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-Cne9OvsE.js';
2
- import { f as fireEvent } from './fire_event-CMN0BnIt.js';
1
+ import { u as r, P as c, Q as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-Cj88TtbZ.js';
2
+ import { f as fireEvent } from './fire_event-BstgNPuh.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { u as r, P as c, Q as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-Cne9OvsE.js';
2
- import { f as fireEvent } from './fire_event-CMN0BnIt.js';
1
+ import { u as r, P as c, Q as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-Cj88TtbZ.js';
2
+ import { f as fireEvent } from './fire_event-BstgNPuh.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { u as r, P as c, Q as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-Cne9OvsE.js';
2
- import { f as fireEvent } from './fire_event-CMN0BnIt.js';
1
+ import { u as r, P as c, Q as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-Cj88TtbZ.js';
2
+ import { f as fireEvent } from './fire_event-BstgNPuh.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- import { q as i, n, i as i$1, j as b, t } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { q as i, n, i as i$1, j as b, t } from './matter-dashboard-app-Cj88TtbZ.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, h as e, j as b, q as i$1, t } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { m as mixinDelegatesAria, i, _ as __decorate, n, A, h as e, j as b, q as i$1, t } from './matter-dashboard-app-Cj88TtbZ.js';
2
2
 
3
3
  /**
4
4
  * @license
@@ -757,7 +757,7 @@ const ThemeService = new ThemeServiceImpl();
757
757
  * SPDX-License-Identifier: Apache-2.0
758
758
  */
759
759
  async function main() {
760
- import('./matter-dashboard-app-Cne9OvsE.js').then(function (n) { return n.S; });
760
+ import('./matter-dashboard-app-Cj88TtbZ.js').then(function (n) { return n.S; });
761
761
  let url = "";
762
762
  const isProductionServer = window.__MATTERJS_PRODUCTION_MODE__ === true || location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
763
763
  if (!isProductionServer) {
@@ -4025,7 +4025,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
4025
4025
  */
4026
4026
  const showSettingsDialog = async client => {
4027
4027
  var _document$querySelect;
4028
- await import('./settings-dialog-WGqWo_ox.js');
4028
+ await import('./settings-dialog-Cs2xMsXb.js');
4029
4029
  const dialog = document.createElement("settings-dialog");
4030
4030
  dialog.client = client;
4031
4031
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -19697,7 +19697,7 @@ const clusters = {
19697
19697
  * SPDX-License-Identifier: Apache-2.0
19698
19698
  */
19699
19699
  const showDialogBox = async (type, dialogParams) => {
19700
- await import('./dialog-box-CRmSjFmJ.js');
19700
+ await import('./dialog-box-DjyfULWB.js');
19701
19701
  return new Promise(resolve => {
19702
19702
  const dialog = document.createElement("dialog-box");
19703
19703
  dialog.params = dialogParams;
@@ -19716,7 +19716,7 @@ const showPromptDialog = dialogParams => showDialogBox("prompt", dialogParams);
19716
19716
  */
19717
19717
  const showAttributeWriteDialog = async options => {
19718
19718
  var _document$querySelect;
19719
- await import('./attribute-write-dialog-BjBvI9Vg.js');
19719
+ await import('./attribute-write-dialog-g4B6BoRt.js');
19720
19720
  const dialog = document.createElement("attribute-write-dialog");
19721
19721
  dialog.client = options.client;
19722
19722
  dialog.nodeId = options.nodeId;
@@ -19735,14 +19735,14 @@ const showAttributeWriteDialog = async options => {
19735
19735
  */
19736
19736
  const showCommandInvokeDialog = async options => {
19737
19737
  var _document$querySelect;
19738
- await import('./command-invoke-dialog-GfZXZjFc.js');
19738
+ await import('./command-invoke-dialog-D6G704VK.js');
19739
19739
  const dialog = document.createElement("command-invoke-dialog");
19740
19740
  dialog.client = options.client;
19741
19741
  dialog.nodeId = options.nodeId;
19742
19742
  dialog.endpointId = options.endpointId;
19743
19743
  dialog.clusterId = options.clusterId;
19744
+ dialog.commandId = options.commandId;
19744
19745
  dialog.commandName = options.commandName;
19745
- dialog.commandLabel = options.commandLabel;
19746
19746
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
19747
19747
  };
19748
19748
 
@@ -19908,7 +19908,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
19908
19908
  */
19909
19909
  const showNodeBindingDialog = async (client, node, endpoint) => {
19910
19910
  var _document$querySelect;
19911
- await import('./node-binding-dialog-C3d1oHJA.js');
19911
+ await import('./node-binding-dialog-9yy2LE3_.js');
19912
19912
  const dialog = document.createElement("node-binding-dialog");
19913
19913
  dialog.client = client;
19914
19914
  dialog.node = node;
@@ -23286,7 +23286,7 @@ let MatterClusterView = class extends i$4 {
23286
23286
  (_this$_unsubscribeDev = this._unsubscribeDev) === null || _this$_unsubscribeDev === void 0 || _this$_unsubscribeDev.call(this);
23287
23287
  }
23288
23288
  render() {
23289
- var _clusters$this$cluste;
23289
+ var _clusters$this$cluste, _clusters$this$cluste2;
23290
23290
  if (!this.node || this.endpoint == void 0 || this.cluster == void 0) {
23291
23291
  return b`
23292
23292
  <dashboard-header title="Not found" .client=${this.client} backButton="#"></dashboard-header>
@@ -23299,9 +23299,10 @@ let MatterClusterView = class extends i$4 {
23299
23299
  }
23300
23300
  const fabricIndex = getEffectiveFabricIndex(this.client.serverInfo.fabric_index, isTestNodeId(this.node.node_id));
23301
23301
  const nodeHex = formatNodeAddress(fabricIndex, this.node.node_id);
23302
+ const clusterName = ((_clusters$this$cluste = clusters[this.cluster]) === null || _clusters$this$cluste === void 0 ? void 0 : _clusters$this$cluste.label) ?? "Custom/Unknown Cluster";
23302
23303
  return b`
23303
23304
  <dashboard-header
23304
- .title=${`Node ${this.node.node_id} ${nodeHex} | Endpoint ${this.endpoint} | Cluster ${this.cluster}`}
23305
+ .title=${`Node ${this.node.node_id} ${nodeHex} | Endpoint ${this.endpoint} | Cluster ${this.cluster} (${clusterName})`}
23305
23306
  .backButton=${`#node/${this.node.node_id}/${this.endpoint}`}
23306
23307
  .client=${this.client}
23307
23308
  ></dashboard-header>
@@ -23323,7 +23324,7 @@ let MatterClusterView = class extends i$4 {
23323
23324
  <md-list-item>
23324
23325
  <div slot="headline">
23325
23326
  <b
23326
- >Attributes of ${((_clusters$this$cluste = clusters[this.cluster]) === null || _clusters$this$cluste === void 0 ? void 0 : _clusters$this$cluste.label) ?? "Custom/Unknown Cluster"} Cluster on
23327
+ >Attributes of ${((_clusters$this$cluste2 = clusters[this.cluster]) === null || _clusters$this$cluste2 === void 0 ? void 0 : _clusters$this$cluste2.label) ?? "Custom/Unknown Cluster"} Cluster on
23327
23328
  Endpoint ${this.endpoint}</b
23328
23329
  >
23329
23330
  </div>
@@ -23331,15 +23332,15 @@ let MatterClusterView = class extends i$4 {
23331
23332
  </md-list-item>
23332
23333
  <md-divider></md-divider>
23333
23334
  ${clusterAttributes(this.node.attributes, this.endpoint, this.cluster).map((attribute, index) => {
23334
- var _clusters$this$cluste2, _clusters$this$cluste3;
23335
+ var _clusters$this$cluste3, _clusters$this$cluste4;
23335
23336
  return b`
23336
23337
  <md-list-item class=${index % 2 === 1 ? "alternate-row" : ""}>
23337
23338
  <div slot="headline">
23338
- ${((_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"}
23339
+ ${((_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.label) ?? "Custom/Unknown Attribute"}
23339
23340
  </div>
23340
23341
  <div slot="supporting-text">
23341
23342
  AttributeId: ${attribute.key} (${formatHex(attribute.key)}) - Value type:
23342
- ${((_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"}
23343
+ ${((_clusters$this$cluste4 = clusters[this.cluster]) === null || _clusters$this$cluste4 === void 0 || (_clusters$this$cluste4 = _clusters$this$cluste4.attributes[attribute.key]) === null || _clusters$this$cluste4 === void 0 ? void 0 : _clusters$this$cluste4.type) ?? "unknown"}
23343
23344
  </div>
23344
23345
  <div slot="end" class="row-end">
23345
23346
  ${this._devMode ? this._renderAttributeDevActions(attribute.key, attribute.value) : A}
@@ -23359,8 +23360,8 @@ let MatterClusterView = class extends i$4 {
23359
23360
  `;
23360
23361
  }
23361
23362
  _renderAttributeDevActions(attributeId, currentValue) {
23362
- var _clusters$this$cluste4, _this$node;
23363
- const meta = (_clusters$this$cluste4 = clusters[this.cluster]) === null || _clusters$this$cluste4 === void 0 ? void 0 : _clusters$this$cluste4.attributes[attributeId];
23363
+ var _clusters$this$cluste5, _this$node;
23364
+ const meta = (_clusters$this$cluste5 = clusters[this.cluster]) === null || _clusters$this$cluste5 === void 0 ? void 0 : _clusters$this$cluste5.attributes[attributeId];
23364
23365
  const online = ((_this$node = this.node) === null || _this$node === void 0 ? void 0 : _this$node.available) === true;
23365
23366
  const state2 = this._refreshState[attributeId] ?? "idle";
23366
23367
  const refreshClasses = `dev-action refresh refresh-${state2}`;
@@ -23453,7 +23454,7 @@ let MatterClusterView = class extends i$4 {
23453
23454
  const clusterMeta = this.cluster !== void 0 ? clusters[this.cluster] : void 0;
23454
23455
  const rawAcceptedList = (_this$node3 = this.node) === null || _this$node3 === void 0 ? void 0 : _this$node3.attributes[`${this.endpoint}/${this.cluster}/${ACCEPTED_COMMAND_LIST_ATTR}`];
23455
23456
  const acceptedList = Array.isArray(rawAcceptedList) ? rawAcceptedList : [];
23456
- const commands = acceptedList.map(id => clusterMeta === null || clusterMeta === void 0 ? void 0 : clusterMeta.commands[id]).filter(cmd => cmd !== void 0);
23457
+ const commands = acceptedList.map(id => clusterMeta === null || clusterMeta === void 0 ? void 0 : clusterMeta.commands[id]).filter(cmd => cmd !== void 0).sort((a, b) => a.id - b.id);
23457
23458
  const online = ((_this$node4 = this.node) === null || _this$node4 === void 0 ? void 0 : _this$node4.available) === true;
23458
23459
  return b`
23459
23460
  <div class="container">
@@ -23477,7 +23478,7 @@ let MatterClusterView = class extends i$4 {
23477
23478
  <md-outlined-button
23478
23479
  class="dev-invoke-button"
23479
23480
  ?disabled=${!online}
23480
- @click=${() => this._openCommandInvokeDialog(cmd.name, cmd.label)}
23481
+ @click=${() => this._openCommandInvokeDialog(cmd.id, cmd.name)}
23481
23482
  >
23482
23483
  <ha-svg-icon slot="icon" .path=${mdiPlay}></ha-svg-icon>
23483
23484
  Invoke
@@ -23491,15 +23492,15 @@ let MatterClusterView = class extends i$4 {
23491
23492
  </div>
23492
23493
  `;
23493
23494
  }
23494
- _openCommandInvokeDialog(commandName, commandLabel) {
23495
+ _openCommandInvokeDialog(commandId, commandName) {
23495
23496
  if (!this.node || this.cluster === void 0) return;
23496
23497
  showCommandInvokeDialog({
23497
23498
  client: this.client,
23498
23499
  nodeId: this.node.node_id,
23499
23500
  endpointId: this.endpoint,
23500
23501
  clusterId: this.cluster,
23501
- commandName,
23502
- commandLabel
23502
+ commandId,
23503
+ commandName
23503
23504
  });
23504
23505
  }
23505
23506
  async _showAttributeValue(value) {
@@ -23721,6 +23722,11 @@ MatterClusterView.styles = [notFoundStyles, i$7`
23721
23722
  padding: 8px 12px;
23722
23723
  background: var(--md-sys-color-surface-container-low);
23723
23724
  border-radius: 8px;
23725
+ transition: background 120ms ease-out;
23726
+ }
23727
+
23728
+ .command-row:hover {
23729
+ background: color-mix(in srgb, var(--dev-color) 12%, var(--md-sys-color-surface-container-low));
23724
23730
  }
23725
23731
 
23726
23732
  .dev-invoke-button {
@@ -36067,7 +36073,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
36067
36073
  */
36068
36074
  const showCommissionNodeDialog = async client => {
36069
36075
  var _document$querySelect;
36070
- await import('./commission-node-dialog-BAEMNaRj.js');
36076
+ await import('./commission-node-dialog-Bg3oo5ub.js');
36071
36077
  const dialog = document.createElement("commission-node-dialog");
36072
36078
  dialog.client = client;
36073
36079
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -1,4 +1,4 @@
1
- import { q as i, P as c, Q as clientContext, n, d as e, i as i$1, R as showPromptDialog, J as showAlertDialog, A, j as b, K as handleAsync, t } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { q as i, P as c, Q as clientContext, n, d as e, i as i$1, R as showPromptDialog, J as showAlertDialog, A, j as b, K as handleAsync, t } from './matter-dashboard-app-Cj88TtbZ.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 { e, m as mixinDelegatesAria, a as mixinConstraintValidation, b as mixinFormAssociated, c as mixinElementInternals, i, _ as __decorate, n as n$1, d as e$1, f as isActivationClick, g as dispatchActivationClick, A, h as e$2, j as b, r as redispatchEvent, k as getFormValue, l as getFormState, o as createValidator, C as CheckboxValidator, p as getValidityAnchor, q as i$1, t, N as NavigableKeys, s as o, u as r, v as createAnimationSignal, L as ListController, w as getActiveItem, x as getLastActivatableItem, y as getFirstActivatableItem, z as o$1, E as EASING, V as Validator, D, B as mixinOnReportValidity, F as onReportValidity, G as u, H as i$2, I as fireAndForget, J as showAlertDialog, K as handleAsync, M as DevModeService } from './matter-dashboard-app-Cne9OvsE.js';
1
+ import { e, m as mixinDelegatesAria, a as mixinConstraintValidation, b as mixinFormAssociated, c as mixinElementInternals, i, _ as __decorate, n as n$1, d as e$1, f as isActivationClick, g as dispatchActivationClick, A, h as e$2, j as b, r as redispatchEvent, k as getFormValue, l as getFormState, o as createValidator, C as CheckboxValidator, p as getValidityAnchor, q as i$1, t, N as NavigableKeys, s as o, u as r, v as createAnimationSignal, L as ListController, w as getActiveItem, x as getLastActivatableItem, y as getFirstActivatableItem, z as o$1, E as EASING, V as Validator, D, B as mixinOnReportValidity, F as onReportValidity, G as u, H as i$2, I as fireAndForget, J as showAlertDialog, K as handleAsync, M as DevModeService } from './matter-dashboard-app-Cj88TtbZ.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.6.2-alpha.0-20260422-4efb179",
3
+ "version": "0.6.2-alpha.0-20260426-e2eae3d",
4
4
  "description": "Dashboard for OHF Matter Server",
5
5
  "homepage": "https://github.com/matter-js/matterjs-server",
6
6
  "bugs": {
@@ -33,8 +33,8 @@
33
33
  "dependencies": {
34
34
  "@lit/context": "^1.1.6",
35
35
  "@material/web": "^2.4.1",
36
- "@matter-server/custom-clusters": "0.6.2-alpha.0-20260422-4efb179",
37
- "@matter-server/ws-client": "0.6.2-alpha.0-20260422-4efb179",
36
+ "@matter-server/custom-clusters": "0.6.2-alpha.0-20260426-e2eae3d",
37
+ "@matter-server/ws-client": "0.6.2-alpha.0-20260426-e2eae3d",
38
38
  "@mdi/js": "^7.4.47",
39
39
  "lit": "^3.3.2",
40
40
  "tslib": "^2.8.1",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "devDependencies": {
44
44
  "@babel/preset-env": "^7.29.2",
45
- "@matter/main": "0.17.0-alpha.0-20260421-ee36adbe4",
45
+ "@matter/main": "0.17.0-alpha.0-20260424-020222527",
46
46
  "@rollup/plugin-babel": "^7.0.0",
47
47
  "@rollup/plugin-commonjs": "^29.0.2",
48
48
  "@rollup/plugin-json": "^6.1.0",
@@ -23,12 +23,13 @@ export class CommandInvokeDialog extends LitElement {
23
23
  @property({ type: Number }) public nodeId!: number | bigint;
24
24
  @property({ type: Number }) public endpointId!: number;
25
25
  @property({ type: Number }) public clusterId!: number;
26
+ @property({ type: Number }) public commandId!: number;
26
27
  @property({ type: String }) public commandName!: string;
27
- @property({ type: String }) public commandLabel!: string;
28
28
 
29
29
  @state() private _busy = false;
30
30
  @state() private _error: string | null = null;
31
31
  @state() private _response: string | null = null;
32
+ @state() private _success = false;
32
33
 
33
34
  @query("textarea") private _textarea!: HTMLTextAreaElement;
34
35
 
@@ -50,6 +51,7 @@ export class CommandInvokeDialog extends LitElement {
50
51
 
51
52
  private async _invoke() {
52
53
  this._error = null;
54
+ this._success = false;
53
55
  const parsed = parseJsonPayload(this._textarea.value);
54
56
  if (!parsed.ok) {
55
57
  this._error = `Invalid JSON: ${parsed.error}`;
@@ -71,11 +73,18 @@ export class CommandInvokeDialog extends LitElement {
71
73
  this.commandName,
72
74
  payload,
73
75
  );
74
- this._response = toBigIntAwareJson(result ?? null, 2);
76
+ if (result === null || result === undefined) {
77
+ this._success = true;
78
+ this._response = null;
79
+ } else {
80
+ this._response = toBigIntAwareJson(result, 2);
81
+ this._success = false;
82
+ }
75
83
  this._error = null;
76
84
  } catch (err) {
77
85
  this._error = err instanceof Error ? err.message : String(err);
78
86
  this._response = null;
87
+ this._success = false;
79
88
  } finally {
80
89
  this._busy = false;
81
90
  }
@@ -84,11 +93,14 @@ export class CommandInvokeDialog extends LitElement {
84
93
  protected override render() {
85
94
  return html`
86
95
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
87
- <div slot="headline">Invoke ${this.commandLabel}</div>
96
+ <div slot="headline">Invoke ${this.commandName}</div>
88
97
  <div slot="content">
89
98
  <p class="path" id="invoke-path">
90
99
  Cluster <code>${this.clusterId}</code> (${formatHex(this.clusterId)}) · Endpoint
91
- <code>${this.endpointId}</code> · Command <code>${this.commandName}</code>
100
+ <code>${this.endpointId}</code> · Command <code>${this.commandId}</code> (${formatHex(
101
+ this.commandId,
102
+ )})
103
+ · <code>${this.commandName}</code>
92
104
  </p>
93
105
  <label class="textarea-label" for="payload">Payload (JSON)</label>
94
106
  <textarea
@@ -103,6 +115,7 @@ export class CommandInvokeDialog extends LitElement {
103
115
  ${this._error
104
116
  ? html`<div id="invoke-error" class="error" role="alert">${this._error}</div>`
105
117
  : nothing}
118
+ ${this._success ? html`<div class="success" role="status">Success</div>` : nothing}
106
119
  ${this._response !== null
107
120
  ? html`
108
121
  <label class="textarea-label">Response</label>
@@ -177,6 +190,17 @@ export class CommandInvokeDialog extends LitElement {
177
190
  word-break: break-word;
178
191
  }
179
192
 
193
+ .success {
194
+ margin-top: 10px;
195
+ padding: 10px 12px;
196
+ background: color-mix(in srgb, var(--success-color) 18%, transparent);
197
+ color: var(--success-color);
198
+ border: 1px solid color-mix(in srgb, var(--success-color) 40%, transparent);
199
+ border-radius: 6px;
200
+ font-size: 0.9rem;
201
+ font-weight: 500;
202
+ }
203
+
180
204
  .response {
181
205
  margin: 6px 0 0 0;
182
206
  padding: 10px 12px;
@@ -11,8 +11,8 @@ export interface ShowCommandInvokeDialogOptions {
11
11
  nodeId: number | bigint;
12
12
  endpointId: number;
13
13
  clusterId: number;
14
+ commandId: number;
14
15
  commandName: string;
15
- commandLabel: string;
16
16
  }
17
17
 
18
18
  export const showCommandInvokeDialog = async (options: ShowCommandInvokeDialogOptions) => {
@@ -22,7 +22,7 @@ export const showCommandInvokeDialog = async (options: ShowCommandInvokeDialogOp
22
22
  dialog.nodeId = options.nodeId;
23
23
  dialog.endpointId = options.endpointId;
24
24
  dialog.clusterId = options.clusterId;
25
+ dialog.commandId = options.commandId;
25
26
  dialog.commandName = options.commandName;
26
- dialog.commandLabel = options.commandLabel;
27
27
  document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
28
28
  };
@@ -124,9 +124,11 @@ class MatterClusterView extends LitElement {
124
124
  );
125
125
  const nodeHex = formatNodeAddress(fabricIndex, this.node.node_id);
126
126
 
127
+ const clusterName = clusters[this.cluster]?.label ?? "Custom/Unknown Cluster";
128
+
127
129
  return html`
128
130
  <dashboard-header
129
- .title=${`Node ${this.node.node_id} ${nodeHex} | Endpoint ${this.endpoint} | Cluster ${this.cluster}`}
131
+ .title=${`Node ${this.node.node_id} ${nodeHex} | Endpoint ${this.endpoint} | Cluster ${this.cluster} (${clusterName})`}
130
132
  .backButton=${`#node/${this.node.node_id}/${this.endpoint}`}
131
133
  .client=${this.client}
132
134
  ></dashboard-header>
@@ -277,7 +279,8 @@ class MatterClusterView extends LitElement {
277
279
 
278
280
  const commands = acceptedList
279
281
  .map(id => clusterMeta?.commands[id])
280
- .filter((cmd): cmd is NonNullable<typeof cmd> => cmd !== undefined);
282
+ .filter((cmd): cmd is NonNullable<typeof cmd> => cmd !== undefined)
283
+ .sort((a, b) => a.id - b.id);
281
284
 
282
285
  const online = this.node?.available === true;
283
286
 
@@ -306,7 +309,7 @@ class MatterClusterView extends LitElement {
306
309
  <md-outlined-button
307
310
  class="dev-invoke-button"
308
311
  ?disabled=${!online}
309
- @click=${() => this._openCommandInvokeDialog(cmd.name, cmd.label)}
312
+ @click=${() => this._openCommandInvokeDialog(cmd.id, cmd.name)}
310
313
  >
311
314
  <ha-svg-icon slot="icon" .path=${mdiPlay}></ha-svg-icon>
312
315
  Invoke
@@ -322,15 +325,15 @@ class MatterClusterView extends LitElement {
322
325
  `;
323
326
  }
324
327
 
325
- private _openCommandInvokeDialog(commandName: string, commandLabel: string) {
328
+ private _openCommandInvokeDialog(commandId: number, commandName: string) {
326
329
  if (!this.node || this.cluster === undefined) return;
327
330
  showCommandInvokeDialog({
328
331
  client: this.client,
329
332
  nodeId: this.node.node_id,
330
333
  endpointId: this.endpoint,
331
334
  clusterId: this.cluster,
335
+ commandId,
332
336
  commandName,
333
- commandLabel,
334
337
  });
335
338
  }
336
339
 
@@ -564,6 +567,11 @@ class MatterClusterView extends LitElement {
564
567
  padding: 8px 12px;
565
568
  background: var(--md-sys-color-surface-container-low);
566
569
  border-radius: 8px;
570
+ transition: background 120ms ease-out;
571
+ }
572
+
573
+ .command-row:hover {
574
+ background: color-mix(in srgb, var(--dev-color) 12%, var(--md-sys-color-surface-container-low));
567
575
  }
568
576
 
569
577
  .dev-invoke-button {