@matter-server/dashboard 0.4.3 → 0.4.4-alpha.1-20260305-5ca8493

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 (25) hide show
  1. package/dist/esm/pages/matter-network-view.d.ts +5 -0
  2. package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
  3. package/dist/esm/pages/matter-network-view.js +151 -17
  4. package/dist/esm/pages/matter-network-view.js.map +1 -1
  5. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  6. package/dist/esm/pages/network/network-details.js +13 -1
  7. package/dist/esm/pages/network/network-details.js.map +1 -1
  8. package/dist/esm/pages/network/thread-graph.d.ts +9 -0
  9. package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
  10. package/dist/esm/pages/network/thread-graph.js +44 -0
  11. package/dist/esm/pages/network/thread-graph.js.map +1 -1
  12. package/dist/web/js/{commission-node-dialog-B6Ea1C19.js → commission-node-dialog-BHKkNVcj.js} +4 -4
  13. package/dist/web/js/{commission-node-existing-DVvXIWaS.js → commission-node-existing-Bh-9N-xZ.js} +2 -2
  14. package/dist/web/js/{commission-node-thread-Xs9aUW8N.js → commission-node-thread-DxT2sLWw.js} +2 -2
  15. package/dist/web/js/{commission-node-wifi-D7BmNtOv.js → commission-node-wifi-R6LeozCS.js} +2 -2
  16. package/dist/web/js/{dialog-box-BkoIi0py.js → dialog-box-yU3Oc-AR.js} +1 -1
  17. package/dist/web/js/{fire_event-BL-qtWHq.js → fire_event-ZsNu_mOn.js} +1 -1
  18. package/dist/web/js/{log-level-dialog-Cli8wukh.js → log-level-dialog-Bpt-9T42.js} +1 -1
  19. package/dist/web/js/main.js +1 -1
  20. package/dist/web/js/{matter-dashboard-app-nMzexef3.js → matter-dashboard-app-D9iOhimm.js} +204 -22
  21. package/dist/web/js/{node-binding-dialog-zQBMZf8W.js → node-binding-dialog-DnwW3RpY.js} +1 -1
  22. package/package.json +3 -3
  23. package/src/pages/matter-network-view.ts +164 -17
  24. package/src/pages/network/network-details.ts +24 -10
  25. package/src/pages/network/thread-graph.ts +55 -0
@@ -29,6 +29,8 @@ declare class MatterNetworkView extends LitElement {
29
29
  hasWifiDevices?: boolean;
30
30
  private _selectedNodeId;
31
31
  private _physicsEnabled;
32
+ private _threadAddressSearch;
33
+ private _threadAddressSearchStatus;
32
34
  private _initialSelectionApplied;
33
35
  private _selectRetryTimer?;
34
36
  private _threadGraph?;
@@ -48,6 +50,9 @@ declare class MatterNetworkView extends LitElement {
48
50
  private _handleZoomOut;
49
51
  private _handleTogglePhysics;
50
52
  private _handlePhysicsChanged;
53
+ private _handleThreadAddressSearchInput;
54
+ private _handleThreadAddressSearchSubmit;
55
+ private _searchThreadAddressWhenReady;
51
56
  private _renderThreadView;
52
57
  private _renderWifiView;
53
58
  render(): import("lit-html").TemplateResult<1>;
@@ -1 +1 @@
1
- {"version":3,"file":"matter-network-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-network-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,2BAA2B,CAAC;AACnC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,wBAAwB,CAAC;AAChC,OAAO,2BAA2B,CAAC;AACnC,OAAO,wBAAwB,CAAC;AAEhC,OAAO,sBAAsB,CAAC;AAG9B,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ;AAED,cACM,iBAAkB,SAAQ,UAAU;IAC/B,MAAM,EAAG,YAAY,CAAC;IAGtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,UAAU,CAAC,EAAE,UAAU,CAAC;IAGxB,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAY;IAEjD,gFAAgF;IAEzE,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,cAAc,CAAC,EAAE,OAAO,CAAC;IAGhC,OAAO,CAAC,eAAe,CAAgC;IAGvD,OAAO,CAAC,eAAe,CAAQ;IAE/B,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,iBAAiB,CAAC,CAAgC;IAG1D,OAAO,CAAC,YAAY,CAAC,CAAc;IAGnC,OAAO,CAAC,UAAU,CAAC,CAAY;IAEtB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQzD,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWtD,oBAAoB,IAAI,IAAI;IAOrC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,eAAe;IAiCd,MAAM;IAmCf,OAAgB,MAAM,0BAmJpB;CACL"}
1
+ {"version":3,"file":"matter-network-view.d.ts","sourceRoot":"","sources":["../../../src/pages/matter-network-view.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAa,UAAU,EAAE,MAAM,KAAK,CAAC;AAE5C,OAAO,2BAA2B,CAAC;AACnC,OAAO,qBAAqB,CAAC;AAC7B,OAAO,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,wBAAwB,CAAC;AAChC,OAAO,2BAA2B,CAAC;AACnC,OAAO,wBAAwB,CAAC;AAEhC,OAAO,sBAAsB,CAAC;AAG9B,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ;AAED,cACM,iBAAkB,SAAQ,UAAU;IAC/B,MAAM,EAAG,YAAY,CAAC;IAGtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,UAAU,CAAC,EAAE,UAAU,CAAC;IAGxB,WAAW,EAAE,QAAQ,GAAG,MAAM,CAAY;IAEjD,gFAAgF;IAEzE,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAG3B,cAAc,CAAC,EAAE,OAAO,CAAC;IAGhC,OAAO,CAAC,eAAe,CAAgC;IAGvD,OAAO,CAAC,eAAe,CAAQ;IAG/B,OAAO,CAAC,oBAAoB,CAAM;IAGlC,OAAO,CAAC,0BAA0B,CAA0C;IAE5E,OAAO,CAAC,wBAAwB,CAAS;IACzC,OAAO,CAAC,iBAAiB,CAAC,CAAgC;IAG1D,OAAO,CAAC,YAAY,CAAC,CAAc;IAGnC,OAAO,CAAC,UAAU,CAAC,CAAY;IAEtB,UAAU,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAQzD,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAWtD,oBAAoB,IAAI,IAAI;IAOrC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAW5B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,qBAAqB;IAO7B,OAAO,CAAC,+BAA+B;IAKvC,OAAO,CAAC,gCAAgC;IAYxC,OAAO,CAAC,6BAA6B;IAmBrC,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,eAAe;IAiCd,MAAM;IAmCf,OAAgB,MAAM,0BAqOpB;CACL"}
@@ -31,6 +31,8 @@ let MatterNetworkView = class extends LitElement {
31
31
  this.initialSelectedNodeId = null;
32
32
  this._selectedNodeId = null;
33
33
  this._physicsEnabled = true;
34
+ this._threadAddressSearch = "";
35
+ this._threadAddressSearchStatus = "idle";
34
36
  this._initialSelectionApplied = false;
35
37
  }
36
38
  willUpdate(changedProperties) {
@@ -110,30 +112,74 @@ let MatterNetworkView = class extends LitElement {
110
112
  this._threadGraph?.setPhysicsEnabled(event.detail.enabled);
111
113
  this._wifiGraph?.setPhysicsEnabled(event.detail.enabled);
112
114
  }
115
+ _handleThreadAddressSearchInput(event) {
116
+ this._threadAddressSearch = event.target.value;
117
+ this._threadAddressSearchStatus = "idle";
118
+ }
119
+ _handleThreadAddressSearchSubmit(event) {
120
+ event.preventDefault();
121
+ const searchValue = this._threadAddressSearch.trim();
122
+ if (!searchValue) {
123
+ this._threadAddressSearchStatus = "idle";
124
+ return;
125
+ }
126
+ this._searchThreadAddressWhenReady(searchValue);
127
+ }
128
+ _searchThreadAddressWhenReady(searchValue, retries = 10) {
129
+ const graph = this._threadGraph;
130
+ if (!graph?.isReady()) {
131
+ if (retries > 0) {
132
+ this._selectRetryTimer = setTimeout(
133
+ () => this._searchThreadAddressWhenReady(searchValue, retries - 1),
134
+ 100
135
+ );
136
+ } else {
137
+ this._threadAddressSearchStatus = "not-found";
138
+ }
139
+ return;
140
+ }
141
+ const found = graph.selectByExtendedAddress(searchValue);
142
+ this._threadAddressSearchStatus = found ? "found" : "not-found";
143
+ }
113
144
  _renderThreadView() {
114
145
  return html`
115
146
  <div class="graph-section">
116
147
  <div class="graph-header">
117
148
  <h2>Thread Network Mesh</h2>
118
- <div class="graph-controls">
119
- <button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
120
- <ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
121
- </button>
122
- <button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
123
- <ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
124
- </button>
125
- <button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
126
- <ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
127
- </button>
128
- <button
129
- class="control-button ${this._physicsEnabled ? "" : "active"}"
130
- @click=${this._handleTogglePhysics}
131
- title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
132
- >
133
- <ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
134
- </button>
149
+ <div class="graph-actions">
150
+ <form class="thread-search" @submit=${this._handleThreadAddressSearchSubmit}>
151
+ <input
152
+ type="text"
153
+ .value=${this._threadAddressSearch}
154
+ @input=${this._handleThreadAddressSearchInput}
155
+ placeholder="Search extended address"
156
+ title="Find device by Thread extended address (EUI-64)"
157
+ />
158
+ <button type="submit" class="search-button">Find</button>
159
+ </form>
160
+ <div class="graph-controls">
161
+ <button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
162
+ <ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
163
+ </button>
164
+ <button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
165
+ <ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
166
+ </button>
167
+ <button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
168
+ <ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
169
+ </button>
170
+ <button
171
+ class="control-button ${this._physicsEnabled ? "" : "active"}"
172
+ @click=${this._handleTogglePhysics}
173
+ title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
174
+ >
175
+ <ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
176
+ </button>
177
+ </div>
135
178
  </div>
136
179
  </div>
180
+ ${this._threadAddressSearchStatus === "idle" ? "" : html`<div class="thread-search-status ${this._threadAddressSearchStatus}">
181
+ ${this._threadAddressSearchStatus === "found" ? "Node highlighted." : "No matching extended address found."}
182
+ </div>`}
137
183
  <thread-graph
138
184
  .nodes=${this.nodes}
139
185
  @node-selected=${this._handleNodeSelected}
@@ -268,6 +314,63 @@ MatterNetworkView.styles = css`
268
314
  gap: 4px;
269
315
  }
270
316
 
317
+ .graph-actions {
318
+ display: flex;
319
+ align-items: center;
320
+ gap: 8px;
321
+ min-width: 0;
322
+ }
323
+
324
+ .thread-search {
325
+ display: flex;
326
+ align-items: center;
327
+ gap: 4px;
328
+ }
329
+
330
+ .thread-search input {
331
+ width: 260px;
332
+ max-width: 45vw;
333
+ padding: 6px 8px;
334
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
335
+ border-radius: 4px;
336
+ background-color: var(--md-sys-color-surface, #fff);
337
+ color: var(--md-sys-color-on-surface, #1c1b1f);
338
+ font: inherit;
339
+ }
340
+
341
+ .thread-search input:focus {
342
+ outline: 2px solid var(--md-sys-color-primary, #6750a4);
343
+ outline-offset: 1px;
344
+ }
345
+
346
+ .search-button {
347
+ padding: 6px 10px;
348
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
349
+ border-radius: 4px;
350
+ background-color: var(--md-sys-color-surface, #fff);
351
+ color: var(--md-sys-color-on-surface, #1c1b1f);
352
+ cursor: pointer;
353
+ font: inherit;
354
+ }
355
+
356
+ .search-button:hover {
357
+ background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
358
+ }
359
+
360
+ .thread-search-status {
361
+ margin: 0 0 6px;
362
+ font-size: 0.85rem;
363
+ color: var(--md-sys-color-on-surface-variant, #666);
364
+ }
365
+
366
+ .thread-search-status.found {
367
+ color: #2e7d32;
368
+ }
369
+
370
+ .thread-search-status.not-found {
371
+ color: #c62828;
372
+ }
373
+
271
374
  .control-button {
272
375
  background: none;
273
376
  border: 1px solid var(--md-sys-color-outline-variant, #ccc);
@@ -354,6 +457,31 @@ MatterNetworkView.styles = css`
354
457
  .content {
355
458
  padding: 8px;
356
459
  }
460
+
461
+ .graph-header {
462
+ align-items: flex-start;
463
+ gap: 6px;
464
+ }
465
+
466
+ .graph-actions {
467
+ flex-direction: column;
468
+ align-items: stretch;
469
+ width: 100%;
470
+ }
471
+
472
+ .thread-search {
473
+ width: 100%;
474
+ }
475
+
476
+ .thread-search input {
477
+ flex: 1 1 auto;
478
+ width: auto;
479
+ max-width: none;
480
+ }
481
+
482
+ .graph-controls {
483
+ justify-content: flex-end;
484
+ }
357
485
  }
358
486
  `;
359
487
  __decorateClass([
@@ -380,6 +508,12 @@ __decorateClass([
380
508
  __decorateClass([
381
509
  state()
382
510
  ], MatterNetworkView.prototype, "_physicsEnabled", 2);
511
+ __decorateClass([
512
+ state()
513
+ ], MatterNetworkView.prototype, "_threadAddressSearch", 2);
514
+ __decorateClass([
515
+ state()
516
+ ], MatterNetworkView.prototype, "_threadAddressSearchStatus", 2);
383
517
  __decorateClass([
384
518
  query("thread-graph")
385
519
  ], MatterNetworkView.prototype, "_threadGraph", 2);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/pages/matter-network-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":"network-details.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/network-details.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,+BAA+B,CAAC;AACvC,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE5F,OAAO,EAAE,UAAU,EAAE,cAAc,EAAsB,MAAM,KAAK,CAAC;AAGrE,OAAO,8BAA8B,CAAC;AAsBtC,OAAO,gCAAgC,CAAC;AAExC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,iBAAiB,EAAE,cAAc,CAAC;KACrC;CACJ;AAED,qBACa,cAAe,SAAQ,UAAU;IAEnC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAG9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,cAAc,EAAE,GAAG,CACtB,MAAM,EACN;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAC1F,CAAa;IAGP,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAa;IAG9F,OAAO,CAAC,MAAM,CAAgB;IAG9B,OAAO,CAAC,iBAAiB,CAAkB;IAE3C,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAUzB,iFAAiF;IACjF,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;IAM/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,eAAe;IAkEvB,OAAO,CAAC,iBAAiB;IAsIzB,OAAO,CAAC,eAAe;IA2DvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,wBAAwB;IAsGhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,0BAA0B;IA8EzB,MAAM;IA0If,OAAgB,MAAM,0BAwQpB;CACL"}
1
+ {"version":3,"file":"network-details.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/network-details.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,+BAA+B,CAAC;AACvC,OAAO,EAAmC,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE5F,OAAO,EAAE,UAAU,EAAE,cAAc,EAAsB,MAAM,KAAK,CAAC;AAGrE,OAAO,8BAA8B,CAAC;AAsBtC,OAAO,gCAAgC,CAAC;AAExC,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,iBAAiB,EAAE,cAAc,CAAC;KACrC;CACJ;AAED,qBACa,cAAe,SAAQ,UAAU;IAEnC,cAAc,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAG9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAGvC,cAAc,EAAE,GAAG,CACtB,MAAM,EACN;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAC1F,CAAa;IAGP,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAa;IAG9F,OAAO,CAAC,MAAM,CAAgB;IAG9B,OAAO,CAAC,iBAAiB,CAAkB;IAE3C,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,iBAAiB;IAUzB,iFAAiF;IACjF,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;IAM/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,eAAe;IAkEvB,OAAO,CAAC,iBAAiB;IAsIzB,OAAO,CAAC,eAAe;IA2DvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,wBAAwB;IAoHhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,0BAA0B;IA8EzB,MAAM;IA0If,OAAgB,MAAM,0BAwQpB;CACL"}
@@ -328,7 +328,19 @@ let NetworkDetails = class extends LitElement {
328
328
  <div class="section">
329
329
  <h4>Neighbors (${unknown.seenBy.length})</h4>
330
330
  <div class="neighbors-list">
331
- ${unknown.seenBy.map((nodeId) => {
331
+ ${unknown.seenBy.toSorted((a, b) => {
332
+ const score = (nodeId) => {
333
+ const n = this.nodes[nodeId.toString()];
334
+ if (!n) return -Infinity;
335
+ const entry = this._findNeighborEntry(n, unknown.extAddressHex);
336
+ if (!entry) return -Infinity;
337
+ const rssi = entry.avgRssi ?? entry.lastRssi;
338
+ if (rssi !== null && rssi !== void 0) return rssi;
339
+ if (entry.lqi !== null && entry.lqi !== void 0) return entry.lqi;
340
+ return -Infinity;
341
+ };
342
+ return score(b) - score(a);
343
+ }).map((nodeId) => {
332
344
  const node = this.nodes[nodeId.toString()];
333
345
  if (!node) return nothing;
334
346
  const neighborEntry = this._findNeighborEntry(node, unknown.extAddressHex);
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/pages/network/network-details.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -21,6 +21,15 @@ export declare class ThreadGraph extends BaseNetworkGraph {
21
21
  seenBy: string[];
22
22
  bestRssi: number | null;
23
23
  }>;
24
+ /**
25
+ * Searches for a Thread node (known or unknown) by extended address and selects it.
26
+ * Accepts formats like:
27
+ * - AABBCCDDEEFF0011
28
+ * - AA:BB:CC:DD:EE:FF:00:11
29
+ * - 0xAABBCCDDEEFF0011
30
+ * Returns true when a match is found.
31
+ */
32
+ selectByExtendedAddress(address: string): boolean;
24
33
  protected _updateGraph(): void;
25
34
  render(): import("lit-html").TemplateResult<1>;
26
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"thread-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/thread-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAY3D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,cAAc,EAAE,WAAW,CAAC;KAC/B;CACJ;AAED,qBACa,WAAY,SAAQ,gBAAgB;IAC7C,sDAAsD;IACtD,OAAO,CAAC,eAAe,CAA6B;IAEpD,8DAA8D;IAC9D,OAAO,CAAC,uBAAuB,CAGjB;IAEd,4DAA4D;IAC5D,IAAW,iBAAiB,IAAI,GAAG,CAC/B,MAAM,EACN;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAC1F,CAEA;cAEkB,YAAY,IAAI,IAAI;IAgH9B,MAAM;CAgBlB"}
1
+ {"version":3,"file":"thread-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/thread-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAa3D,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,cAAc,EAAE,WAAW,CAAC;KAC/B;CACJ;AAED,qBACa,WAAY,SAAQ,gBAAgB;IAC7C,sDAAsD;IACtD,OAAO,CAAC,eAAe,CAA6B;IAEpD,8DAA8D;IAC9D,OAAO,CAAC,uBAAuB,CAGjB;IAEd,4DAA4D;IAC5D,IAAW,iBAAiB,IAAI,GAAG,CAC/B,MAAM,EACN;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAC1F,CAEA;IAED;;;;;;;OAOG;IACI,uBAAuB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;cA8BrC,YAAY,IAAI,IAAI;IAgH9B,MAAM;CAgBlB"}
@@ -24,6 +24,7 @@ import {
24
24
  findUnknownDevices,
25
25
  getDeviceName,
26
26
  getNetworkType,
27
+ getThreadExtendedAddressHex,
27
28
  getThreadRole
28
29
  } from "./network-utils.js";
29
30
  let ThreadGraph = class extends BaseNetworkGraph {
@@ -38,6 +39,37 @@ let ThreadGraph = class extends BaseNetworkGraph {
38
39
  get unknownDevicesMap() {
39
40
  return this._unknownDevicesMapCache;
40
41
  }
42
+ /**
43
+ * Searches for a Thread node (known or unknown) by extended address and selects it.
44
+ * Accepts formats like:
45
+ * - AABBCCDDEEFF0011
46
+ * - AA:BB:CC:DD:EE:FF:00:11
47
+ * - 0xAABBCCDDEEFF0011
48
+ * Returns true when a match is found.
49
+ */
50
+ selectByExtendedAddress(address) {
51
+ const normalized = normalizeExtendedAddressInput(address);
52
+ if (!normalized) {
53
+ return false;
54
+ }
55
+ for (const node of Object.values(this.nodes)) {
56
+ if (getNetworkType(node) !== "thread") {
57
+ continue;
58
+ }
59
+ const extAddressHex = getThreadExtendedAddressHex(node);
60
+ if (extAddressHex && extAddressHex === normalized) {
61
+ this.selectNode(String(node.node_id));
62
+ return true;
63
+ }
64
+ }
65
+ for (const [unknownId, unknown] of this._unknownDevicesMapCache) {
66
+ if (normalizeExtendedAddressInput(unknown.extAddressHex) === normalized) {
67
+ this.selectNode(unknownId);
68
+ return true;
69
+ }
70
+ }
71
+ return false;
72
+ }
41
73
  _updateGraph() {
42
74
  if (!this._nodesDataSet || !this._edgesDataSet) return;
43
75
  this._clearOriginalEdgeColors();
@@ -136,6 +168,18 @@ let ThreadGraph = class extends BaseNetworkGraph {
136
168
  ThreadGraph = __decorateClass([
137
169
  customElement("thread-graph")
138
170
  ], ThreadGraph);
171
+ function normalizeExtendedAddressInput(address) {
172
+ const trimmed = address.trim();
173
+ if (!trimmed) {
174
+ return null;
175
+ }
176
+ const noPrefix = trimmed.startsWith("0x") || trimmed.startsWith("0X") ? trimmed.slice(2) : trimmed;
177
+ const hexOnly = noPrefix.replace(/[^a-fA-F0-9]/g, "");
178
+ if (hexOnly.length !== 16 || !/^[a-fA-F0-9]{16}$/.test(hexOnly)) {
179
+ return null;
180
+ }
181
+ return hexOnly.toUpperCase();
182
+ }
139
183
  export {
140
184
  ThreadGraph
141
185
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/pages/network/thread-graph.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1,4 +1,4 @@
1
- import { r, n, t, i, j as b } from './matter-dashboard-app-nMzexef3.js';
1
+ import { r, n, t, i, j as b } from './matter-dashboard-app-D9iOhimm.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-D7BmNtOv.js');
53
+ import('./commission-node-wifi-R6LeozCS.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-Xs9aUW8N.js');
60
+ import('./commission-node-thread-DxT2sLWw.js');
61
61
  this._mode = "thread";
62
62
  }
63
63
  _commissionExisting() {
64
- import('./commission-node-existing-DVvXIWaS.js');
64
+ import('./commission-node-existing-Bh-9N-xZ.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-nMzexef3.js';
2
- import { f as fireEvent } from './fire_event-BL-qtWHq.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-D9iOhimm.js';
2
+ import { f as fireEvent } from './fire_event-ZsNu_mOn.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-nMzexef3.js';
2
- import { f as fireEvent } from './fire_event-BL-qtWHq.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-D9iOhimm.js';
2
+ import { f as fireEvent } from './fire_event-ZsNu_mOn.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-nMzexef3.js';
2
- import { f as fireEvent } from './fire_event-BL-qtWHq.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-D9iOhimm.js';
2
+ import { f as fireEvent } from './fire_event-ZsNu_mOn.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-nMzexef3.js';
1
+ import { n, t, i, j as b } from './matter-dashboard-app-D9iOhimm.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-nMzexef3.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-D9iOhimm.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-nMzexef3.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-D9iOhimm.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-nMzexef3.js').then(function (n) { return n.I; });
751
+ import('./matter-dashboard-app-D9iOhimm.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) {
@@ -4026,7 +4026,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
4026
4026
  */
4027
4027
  const showLogLevelDialog = async client => {
4028
4028
  var _document$querySelect;
4029
- await import('./log-level-dialog-Cli8wukh.js');
4029
+ await import('./log-level-dialog-Bpt-9T42.js');
4030
4030
  const dialog = document.createElement("log-level-dialog");
4031
4031
  dialog.client = client;
4032
4032
  (_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
@@ -15728,7 +15728,7 @@ const clusters = {
15728
15728
  * SPDX-License-Identifier: Apache-2.0
15729
15729
  */
15730
15730
  const showDialogBox = async (type, dialogParams) => {
15731
- await import('./dialog-box-BkoIi0py.js');
15731
+ await import('./dialog-box-yU3Oc-AR.js');
15732
15732
  return new Promise(resolve => {
15733
15733
  const dialog = document.createElement("dialog-box");
15734
15734
  dialog.params = dialogParams;
@@ -15902,7 +15902,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
15902
15902
  */
15903
15903
  const showNodeBindingDialog = async (client, node, endpoint) => {
15904
15904
  var _document$querySelect;
15905
- await import('./node-binding-dialog-zQBMZf8W.js');
15905
+ await import('./node-binding-dialog-DnwW3RpY.js');
15906
15906
  const dialog = document.createElement("node-binding-dialog");
15907
15907
  dialog.client = client;
15908
15908
  dialog.node = node;
@@ -21688,7 +21688,19 @@ let NetworkDetails = class extends i$4 {
21688
21688
  <div class="section">
21689
21689
  <h4>Neighbors (${unknown.seenBy.length})</h4>
21690
21690
  <div class="neighbors-list">
21691
- ${unknown.seenBy.map(nodeId => {
21691
+ ${unknown.seenBy.toSorted((a, b) => {
21692
+ const score = nodeId => {
21693
+ const n = this.nodes[nodeId.toString()];
21694
+ if (!n) return -Infinity;
21695
+ const entry = this._findNeighborEntry(n, unknown.extAddressHex);
21696
+ if (!entry) return -Infinity;
21697
+ const rssi = entry.avgRssi ?? entry.lastRssi;
21698
+ if (rssi !== null && rssi !== void 0) return rssi;
21699
+ if (entry.lqi !== null && entry.lqi !== void 0) return entry.lqi;
21700
+ return -Infinity;
21701
+ };
21702
+ return score(b) - score(a);
21703
+ }).map(nodeId => {
21692
21704
  const node = this.nodes[nodeId.toString()];
21693
21705
  if (!node) return A;
21694
21706
  const neighborEntry = this._findNeighborEntry(node, unknown.extAddressHex);
@@ -30702,6 +30714,37 @@ let ThreadGraph = class extends BaseNetworkGraph {
30702
30714
  get unknownDevicesMap() {
30703
30715
  return this._unknownDevicesMapCache;
30704
30716
  }
30717
+ /**
30718
+ * Searches for a Thread node (known or unknown) by extended address and selects it.
30719
+ * Accepts formats like:
30720
+ * - AABBCCDDEEFF0011
30721
+ * - AA:BB:CC:DD:EE:FF:00:11
30722
+ * - 0xAABBCCDDEEFF0011
30723
+ * Returns true when a match is found.
30724
+ */
30725
+ selectByExtendedAddress(address) {
30726
+ const normalized = normalizeExtendedAddressInput(address);
30727
+ if (!normalized) {
30728
+ return false;
30729
+ }
30730
+ for (const node of Object.values(this.nodes)) {
30731
+ if (getNetworkType(node) !== "thread") {
30732
+ continue;
30733
+ }
30734
+ const extAddressHex = getThreadExtendedAddressHex(node);
30735
+ if (extAddressHex && extAddressHex === normalized) {
30736
+ this.selectNode(String(node.node_id));
30737
+ return true;
30738
+ }
30739
+ }
30740
+ for (const [unknownId, unknown] of this._unknownDevicesMapCache) {
30741
+ if (normalizeExtendedAddressInput(unknown.extAddressHex) === normalized) {
30742
+ this.selectNode(unknownId);
30743
+ return true;
30744
+ }
30745
+ }
30746
+ return false;
30747
+ }
30705
30748
  _updateGraph() {
30706
30749
  if (!this._nodesDataSet || !this._edgesDataSet) return;
30707
30750
  this._clearOriginalEdgeColors();
@@ -30798,6 +30841,18 @@ let ThreadGraph = class extends BaseNetworkGraph {
30798
30841
  }
30799
30842
  };
30800
30843
  ThreadGraph = __decorateClass$6([t$1("thread-graph")], ThreadGraph);
30844
+ function normalizeExtendedAddressInput(address) {
30845
+ const trimmed = address.trim();
30846
+ if (!trimmed) {
30847
+ return null;
30848
+ }
30849
+ const noPrefix = trimmed.startsWith("0x") || trimmed.startsWith("0X") ? trimmed.slice(2) : trimmed;
30850
+ const hexOnly = noPrefix.replace(/[^a-fA-F0-9]/g, "");
30851
+ if (hexOnly.length !== 16 || !/^[a-fA-F0-9]{16}$/.test(hexOnly)) {
30852
+ return null;
30853
+ }
30854
+ return hexOnly.toUpperCase();
30855
+ }
30801
30856
 
30802
30857
  var __getOwnPropDesc$5 = Object.getOwnPropertyDescriptor;
30803
30858
  var __decorateClass$5 = (decorators, target, key, kind) => {
@@ -30961,6 +31016,8 @@ let MatterNetworkView = class extends i$4 {
30961
31016
  this.initialSelectedNodeId = null;
30962
31017
  this._selectedNodeId = null;
30963
31018
  this._physicsEnabled = true;
31019
+ this._threadAddressSearch = "";
31020
+ this._threadAddressSearchStatus = "idle";
30964
31021
  this._initialSelectionApplied = false;
30965
31022
  }
30966
31023
  willUpdate(changedProperties) {
@@ -31050,30 +31107,71 @@ let MatterNetworkView = class extends i$4 {
31050
31107
  (_this$_threadGraph6 = this._threadGraph) === null || _this$_threadGraph6 === void 0 || _this$_threadGraph6.setPhysicsEnabled(event.detail.enabled);
31051
31108
  (_this$_wifiGraph6 = this._wifiGraph) === null || _this$_wifiGraph6 === void 0 || _this$_wifiGraph6.setPhysicsEnabled(event.detail.enabled);
31052
31109
  }
31110
+ _handleThreadAddressSearchInput(event) {
31111
+ this._threadAddressSearch = event.target.value;
31112
+ this._threadAddressSearchStatus = "idle";
31113
+ }
31114
+ _handleThreadAddressSearchSubmit(event) {
31115
+ event.preventDefault();
31116
+ const searchValue = this._threadAddressSearch.trim();
31117
+ if (!searchValue) {
31118
+ this._threadAddressSearchStatus = "idle";
31119
+ return;
31120
+ }
31121
+ this._searchThreadAddressWhenReady(searchValue);
31122
+ }
31123
+ _searchThreadAddressWhenReady(searchValue, retries = 10) {
31124
+ const graph = this._threadGraph;
31125
+ if (!(graph !== null && graph !== void 0 && graph.isReady())) {
31126
+ if (retries > 0) {
31127
+ this._selectRetryTimer = setTimeout(() => this._searchThreadAddressWhenReady(searchValue, retries - 1), 100);
31128
+ } else {
31129
+ this._threadAddressSearchStatus = "not-found";
31130
+ }
31131
+ return;
31132
+ }
31133
+ const found = graph.selectByExtendedAddress(searchValue);
31134
+ this._threadAddressSearchStatus = found ? "found" : "not-found";
31135
+ }
31053
31136
  _renderThreadView() {
31054
31137
  return b`
31055
31138
  <div class="graph-section">
31056
31139
  <div class="graph-header">
31057
31140
  <h2>Thread Network Mesh</h2>
31058
- <div class="graph-controls">
31059
- <button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
31060
- <ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
31061
- </button>
31062
- <button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
31063
- <ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
31064
- </button>
31065
- <button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
31066
- <ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
31067
- </button>
31068
- <button
31069
- class="control-button ${this._physicsEnabled ? "" : "active"}"
31070
- @click=${this._handleTogglePhysics}
31071
- title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
31072
- >
31073
- <ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
31074
- </button>
31141
+ <div class="graph-actions">
31142
+ <form class="thread-search" @submit=${this._handleThreadAddressSearchSubmit}>
31143
+ <input
31144
+ type="text"
31145
+ .value=${this._threadAddressSearch}
31146
+ @input=${this._handleThreadAddressSearchInput}
31147
+ placeholder="Search extended address"
31148
+ title="Find device by Thread extended address (EUI-64)"
31149
+ />
31150
+ <button type="submit" class="search-button">Find</button>
31151
+ </form>
31152
+ <div class="graph-controls">
31153
+ <button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
31154
+ <ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
31155
+ </button>
31156
+ <button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
31157
+ <ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
31158
+ </button>
31159
+ <button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
31160
+ <ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
31161
+ </button>
31162
+ <button
31163
+ class="control-button ${this._physicsEnabled ? "" : "active"}"
31164
+ @click=${this._handleTogglePhysics}
31165
+ title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
31166
+ >
31167
+ <ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
31168
+ </button>
31169
+ </div>
31075
31170
  </div>
31076
31171
  </div>
31172
+ ${this._threadAddressSearchStatus === "idle" ? "" : b`<div class="thread-search-status ${this._threadAddressSearchStatus}">
31173
+ ${this._threadAddressSearchStatus === "found" ? "Node highlighted." : "No matching extended address found."}
31174
+ </div>`}
31077
31175
  <thread-graph
31078
31176
  .nodes=${this.nodes}
31079
31177
  @node-selected=${this._handleNodeSelected}
@@ -31209,6 +31307,63 @@ MatterNetworkView.styles = i$7`
31209
31307
  gap: 4px;
31210
31308
  }
31211
31309
 
31310
+ .graph-actions {
31311
+ display: flex;
31312
+ align-items: center;
31313
+ gap: 8px;
31314
+ min-width: 0;
31315
+ }
31316
+
31317
+ .thread-search {
31318
+ display: flex;
31319
+ align-items: center;
31320
+ gap: 4px;
31321
+ }
31322
+
31323
+ .thread-search input {
31324
+ width: 260px;
31325
+ max-width: 45vw;
31326
+ padding: 6px 8px;
31327
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
31328
+ border-radius: 4px;
31329
+ background-color: var(--md-sys-color-surface, #fff);
31330
+ color: var(--md-sys-color-on-surface, #1c1b1f);
31331
+ font: inherit;
31332
+ }
31333
+
31334
+ .thread-search input:focus {
31335
+ outline: 2px solid var(--md-sys-color-primary, #6750a4);
31336
+ outline-offset: 1px;
31337
+ }
31338
+
31339
+ .search-button {
31340
+ padding: 6px 10px;
31341
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
31342
+ border-radius: 4px;
31343
+ background-color: var(--md-sys-color-surface, #fff);
31344
+ color: var(--md-sys-color-on-surface, #1c1b1f);
31345
+ cursor: pointer;
31346
+ font: inherit;
31347
+ }
31348
+
31349
+ .search-button:hover {
31350
+ background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
31351
+ }
31352
+
31353
+ .thread-search-status {
31354
+ margin: 0 0 6px;
31355
+ font-size: 0.85rem;
31356
+ color: var(--md-sys-color-on-surface-variant, #666);
31357
+ }
31358
+
31359
+ .thread-search-status.found {
31360
+ color: #2e7d32;
31361
+ }
31362
+
31363
+ .thread-search-status.not-found {
31364
+ color: #c62828;
31365
+ }
31366
+
31212
31367
  .control-button {
31213
31368
  background: none;
31214
31369
  border: 1px solid var(--md-sys-color-outline-variant, #ccc);
@@ -31295,6 +31450,31 @@ MatterNetworkView.styles = i$7`
31295
31450
  .content {
31296
31451
  padding: 8px;
31297
31452
  }
31453
+
31454
+ .graph-header {
31455
+ align-items: flex-start;
31456
+ gap: 6px;
31457
+ }
31458
+
31459
+ .graph-actions {
31460
+ flex-direction: column;
31461
+ align-items: stretch;
31462
+ width: 100%;
31463
+ }
31464
+
31465
+ .thread-search {
31466
+ width: 100%;
31467
+ }
31468
+
31469
+ .thread-search input {
31470
+ flex: 1 1 auto;
31471
+ width: auto;
31472
+ max-width: none;
31473
+ }
31474
+
31475
+ .graph-controls {
31476
+ justify-content: flex-end;
31477
+ }
31298
31478
  }
31299
31479
  `;
31300
31480
  __decorateClass$4([n$2({
@@ -31311,6 +31491,8 @@ __decorateClass$4([n$2({
31311
31491
  })], MatterNetworkView.prototype, "hasWifiDevices", 2);
31312
31492
  __decorateClass$4([r$2()], MatterNetworkView.prototype, "_selectedNodeId", 2);
31313
31493
  __decorateClass$4([r$2()], MatterNetworkView.prototype, "_physicsEnabled", 2);
31494
+ __decorateClass$4([r$2()], MatterNetworkView.prototype, "_threadAddressSearch", 2);
31495
+ __decorateClass$4([r$2()], MatterNetworkView.prototype, "_threadAddressSearchStatus", 2);
31314
31496
  __decorateClass$4([e$5("thread-graph")], MatterNetworkView.prototype, "_threadGraph", 2);
31315
31497
  __decorateClass$4([e$5("wifi-graph")], MatterNetworkView.prototype, "_wifiGraph", 2);
31316
31498
  MatterNetworkView = __decorateClass$4([t$1("matter-network-view")], MatterNetworkView);
@@ -31511,7 +31693,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
31511
31693
  */
31512
31694
  const showCommissionNodeDialog = async client => {
31513
31695
  var _document$querySelect;
31514
- await import('./commission-node-dialog-B6Ea1C19.js');
31696
+ await import('./commission-node-dialog-BHKkNVcj.js');
31515
31697
  const dialog = document.createElement("commission-node-dialog");
31516
31698
  dialog.client = client;
31517
31699
  (_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-nMzexef3.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-D9iOhimm.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.4.3",
3
+ "version": "0.4.4-alpha.1-20260305-5ca8493",
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.4.3",
41
- "@matter-server/custom-clusters": "0.4.3",
40
+ "@matter-server/ws-client": "0.4.4-alpha.1-20260305-5ca8493",
41
+ "@matter-server/custom-clusters": "0.4.4-alpha.1-20260305-5ca8493",
42
42
  "@mdi/js": "^7.4.47",
43
43
  "lit": "^3.3.2",
44
44
  "tslib": "^2.8.1",
@@ -54,6 +54,12 @@ class MatterNetworkView extends LitElement {
54
54
  @state()
55
55
  private _physicsEnabled = true;
56
56
 
57
+ @state()
58
+ private _threadAddressSearch = "";
59
+
60
+ @state()
61
+ private _threadAddressSearchStatus: "idle" | "found" | "not-found" = "idle";
62
+
57
63
  private _initialSelectionApplied = false;
58
64
  private _selectRetryTimer?: ReturnType<typeof setTimeout>;
59
65
 
@@ -162,30 +168,89 @@ class MatterNetworkView extends LitElement {
162
168
  this._wifiGraph?.setPhysicsEnabled(event.detail.enabled);
163
169
  }
164
170
 
171
+ private _handleThreadAddressSearchInput(event: Event): void {
172
+ this._threadAddressSearch = (event.target as HTMLInputElement).value;
173
+ this._threadAddressSearchStatus = "idle";
174
+ }
175
+
176
+ private _handleThreadAddressSearchSubmit(event: Event): void {
177
+ event.preventDefault();
178
+
179
+ const searchValue = this._threadAddressSearch.trim();
180
+ if (!searchValue) {
181
+ this._threadAddressSearchStatus = "idle";
182
+ return;
183
+ }
184
+
185
+ this._searchThreadAddressWhenReady(searchValue);
186
+ }
187
+
188
+ private _searchThreadAddressWhenReady(searchValue: string, retries: number = 10): void {
189
+ const graph = this._threadGraph;
190
+
191
+ if (!graph?.isReady()) {
192
+ if (retries > 0) {
193
+ this._selectRetryTimer = setTimeout(
194
+ () => this._searchThreadAddressWhenReady(searchValue, retries - 1),
195
+ 100,
196
+ );
197
+ } else {
198
+ this._threadAddressSearchStatus = "not-found";
199
+ }
200
+ return;
201
+ }
202
+
203
+ const found = graph.selectByExtendedAddress(searchValue);
204
+ this._threadAddressSearchStatus = found ? "found" : "not-found";
205
+ }
206
+
165
207
  private _renderThreadView() {
166
208
  return html`
167
209
  <div class="graph-section">
168
210
  <div class="graph-header">
169
211
  <h2>Thread Network Mesh</h2>
170
- <div class="graph-controls">
171
- <button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
172
- <ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
173
- </button>
174
- <button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
175
- <ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
176
- </button>
177
- <button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
178
- <ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
179
- </button>
180
- <button
181
- class="control-button ${this._physicsEnabled ? "" : "active"}"
182
- @click=${this._handleTogglePhysics}
183
- title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
184
- >
185
- <ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
186
- </button>
212
+ <div class="graph-actions">
213
+ <form class="thread-search" @submit=${this._handleThreadAddressSearchSubmit}>
214
+ <input
215
+ type="text"
216
+ .value=${this._threadAddressSearch}
217
+ @input=${this._handleThreadAddressSearchInput}
218
+ placeholder="Search extended address"
219
+ title="Find device by Thread extended address (EUI-64)"
220
+ />
221
+ <button type="submit" class="search-button">Find</button>
222
+ </form>
223
+ <div class="graph-controls">
224
+ <button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
225
+ <ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
226
+ </button>
227
+ <button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
228
+ <ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
229
+ </button>
230
+ <button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
231
+ <ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
232
+ </button>
233
+ <button
234
+ class="control-button ${this._physicsEnabled ? "" : "active"}"
235
+ @click=${this._handleTogglePhysics}
236
+ title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
237
+ >
238
+ <ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
239
+ </button>
240
+ </div>
187
241
  </div>
188
242
  </div>
243
+ ${
244
+ this._threadAddressSearchStatus === "idle"
245
+ ? ""
246
+ : html`<div class="thread-search-status ${this._threadAddressSearchStatus}">
247
+ ${
248
+ this._threadAddressSearchStatus === "found"
249
+ ? "Node highlighted."
250
+ : "No matching extended address found."
251
+ }
252
+ </div>`
253
+ }
189
254
  <thread-graph
190
255
  .nodes=${this.nodes}
191
256
  @node-selected=${this._handleNodeSelected}
@@ -323,6 +388,63 @@ class MatterNetworkView extends LitElement {
323
388
  gap: 4px;
324
389
  }
325
390
 
391
+ .graph-actions {
392
+ display: flex;
393
+ align-items: center;
394
+ gap: 8px;
395
+ min-width: 0;
396
+ }
397
+
398
+ .thread-search {
399
+ display: flex;
400
+ align-items: center;
401
+ gap: 4px;
402
+ }
403
+
404
+ .thread-search input {
405
+ width: 260px;
406
+ max-width: 45vw;
407
+ padding: 6px 8px;
408
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
409
+ border-radius: 4px;
410
+ background-color: var(--md-sys-color-surface, #fff);
411
+ color: var(--md-sys-color-on-surface, #1c1b1f);
412
+ font: inherit;
413
+ }
414
+
415
+ .thread-search input:focus {
416
+ outline: 2px solid var(--md-sys-color-primary, #6750a4);
417
+ outline-offset: 1px;
418
+ }
419
+
420
+ .search-button {
421
+ padding: 6px 10px;
422
+ border: 1px solid var(--md-sys-color-outline-variant, #ccc);
423
+ border-radius: 4px;
424
+ background-color: var(--md-sys-color-surface, #fff);
425
+ color: var(--md-sys-color-on-surface, #1c1b1f);
426
+ cursor: pointer;
427
+ font: inherit;
428
+ }
429
+
430
+ .search-button:hover {
431
+ background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
432
+ }
433
+
434
+ .thread-search-status {
435
+ margin: 0 0 6px;
436
+ font-size: 0.85rem;
437
+ color: var(--md-sys-color-on-surface-variant, #666);
438
+ }
439
+
440
+ .thread-search-status.found {
441
+ color: #2e7d32;
442
+ }
443
+
444
+ .thread-search-status.not-found {
445
+ color: #c62828;
446
+ }
447
+
326
448
  .control-button {
327
449
  background: none;
328
450
  border: 1px solid var(--md-sys-color-outline-variant, #ccc);
@@ -409,6 +531,31 @@ class MatterNetworkView extends LitElement {
409
531
  .content {
410
532
  padding: 8px;
411
533
  }
534
+
535
+ .graph-header {
536
+ align-items: flex-start;
537
+ gap: 6px;
538
+ }
539
+
540
+ .graph-actions {
541
+ flex-direction: column;
542
+ align-items: stretch;
543
+ width: 100%;
544
+ }
545
+
546
+ .thread-search {
547
+ width: 100%;
548
+ }
549
+
550
+ .thread-search input {
551
+ flex: 1 1 auto;
552
+ width: auto;
553
+ max-width: none;
554
+ }
555
+
556
+ .graph-controls {
557
+ justify-content: flex-end;
558
+ }
412
559
  }
413
560
  `;
414
561
  }
@@ -436,17 +436,31 @@ export class NetworkDetails extends LitElement {
436
436
  <div class="section">
437
437
  <h4>Neighbors (${unknown.seenBy.length})</h4>
438
438
  <div class="neighbors-list">
439
- ${unknown.seenBy.map(nodeId => {
440
- const node = this.nodes[nodeId.toString()];
441
- if (!node) return nothing;
439
+ ${unknown.seenBy
440
+ .toSorted((a, b) => {
441
+ const score = (nodeId: string): number => {
442
+ const n = this.nodes[nodeId.toString()];
443
+ if (!n) return -Infinity;
444
+ const entry = this._findNeighborEntry(n, unknown.extAddressHex);
445
+ if (!entry) return -Infinity;
446
+ const rssi = entry.avgRssi ?? entry.lastRssi;
447
+ if (rssi !== null && rssi !== undefined) return rssi;
448
+ if (entry.lqi !== null && entry.lqi !== undefined) return entry.lqi;
449
+ return -Infinity;
450
+ };
451
+ return score(b) - score(a);
452
+ })
453
+ .map(nodeId => {
454
+ const node = this.nodes[nodeId.toString()];
455
+ if (!node) return nothing;
442
456
 
443
- // Find the neighbor entry to get RSSI/LQI
444
- const neighborEntry = this._findNeighborEntry(node, unknown.extAddressHex);
445
- const signalColor = neighborEntry ? getSignalColor(neighborEntry) : "#999";
446
- const rssi = neighborEntry?.avgRssi ?? neighborEntry?.lastRssi ?? null;
447
- const lqi = neighborEntry?.lqi;
457
+ // Find the neighbor entry to get RSSI/LQI
458
+ const neighborEntry = this._findNeighborEntry(node, unknown.extAddressHex);
459
+ const signalColor = neighborEntry ? getSignalColor(neighborEntry) : "#999";
460
+ const rssi = neighborEntry?.avgRssi ?? neighborEntry?.lastRssi ?? null;
461
+ const lqi = neighborEntry?.lqi;
448
462
 
449
- return html`
463
+ return html`
450
464
  <div
451
465
  class="neighbor-item clickable"
452
466
  role="button"
@@ -483,7 +497,7 @@ export class NetworkDetails extends LitElement {
483
497
  </div>
484
498
  </div>
485
499
  `;
486
- })}
500
+ })}
487
501
  </div>
488
502
  </div>
489
503
  `
@@ -16,6 +16,7 @@ import {
16
16
  findUnknownDevices,
17
17
  getDeviceName,
18
18
  getNetworkType,
19
+ getThreadExtendedAddressHex,
19
20
  getThreadRole,
20
21
  } from "./network-utils.js";
21
22
 
@@ -44,6 +45,44 @@ export class ThreadGraph extends BaseNetworkGraph {
44
45
  return this._unknownDevicesMapCache;
45
46
  }
46
47
 
48
+ /**
49
+ * Searches for a Thread node (known or unknown) by extended address and selects it.
50
+ * Accepts formats like:
51
+ * - AABBCCDDEEFF0011
52
+ * - AA:BB:CC:DD:EE:FF:00:11
53
+ * - 0xAABBCCDDEEFF0011
54
+ * Returns true when a match is found.
55
+ */
56
+ public selectByExtendedAddress(address: string): boolean {
57
+ const normalized = normalizeExtendedAddressInput(address);
58
+ if (!normalized) {
59
+ return false;
60
+ }
61
+
62
+ // Search commissioned Thread devices first
63
+ for (const node of Object.values(this.nodes)) {
64
+ if (getNetworkType(node) !== "thread") {
65
+ continue;
66
+ }
67
+
68
+ const extAddressHex = getThreadExtendedAddressHex(node);
69
+ if (extAddressHex && extAddressHex === normalized) {
70
+ this.selectNode(String(node.node_id));
71
+ return true;
72
+ }
73
+ }
74
+
75
+ // Then search unknown/external Thread devices
76
+ for (const [unknownId, unknown] of this._unknownDevicesMapCache) {
77
+ if (normalizeExtendedAddressInput(unknown.extAddressHex) === normalized) {
78
+ this.selectNode(unknownId);
79
+ return true;
80
+ }
81
+ }
82
+
83
+ return false;
84
+ }
85
+
47
86
  protected override _updateGraph(): void {
48
87
  if (!this._nodesDataSet || !this._edgesDataSet) return;
49
88
 
@@ -173,3 +212,19 @@ export class ThreadGraph extends BaseNetworkGraph {
173
212
  `;
174
213
  }
175
214
  }
215
+
216
+ function normalizeExtendedAddressInput(address: string): string | null {
217
+ const trimmed = address.trim();
218
+ if (!trimmed) {
219
+ return null;
220
+ }
221
+
222
+ const noPrefix = trimmed.startsWith("0x") || trimmed.startsWith("0X") ? trimmed.slice(2) : trimmed;
223
+ const hexOnly = noPrefix.replace(/[^a-fA-F0-9]/g, "");
224
+
225
+ if (hexOnly.length !== 16 || !/^[a-fA-F0-9]{16}$/.test(hexOnly)) {
226
+ return null;
227
+ }
228
+
229
+ return hexOnly.toUpperCase();
230
+ }