@matter-server/dashboard 0.6.2 → 0.6.3

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 (52) hide show
  1. package/dist/esm/pages/matter-network-view.d.ts +15 -0
  2. package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
  3. package/dist/esm/pages/matter-network-view.js +171 -1
  4. package/dist/esm/pages/matter-network-view.js.map +1 -1
  5. package/dist/esm/pages/network/base-network-graph.d.ts +4 -0
  6. package/dist/esm/pages/network/base-network-graph.d.ts.map +1 -1
  7. package/dist/esm/pages/network/base-network-graph.js +9 -0
  8. package/dist/esm/pages/network/base-network-graph.js.map +1 -1
  9. package/dist/esm/pages/network/border-router-store.d.ts +20 -0
  10. package/dist/esm/pages/network/border-router-store.d.ts.map +1 -0
  11. package/dist/esm/pages/network/border-router-store.js +29 -0
  12. package/dist/esm/pages/network/border-router-store.js.map +6 -0
  13. package/dist/esm/pages/network/network-details.d.ts +40 -12
  14. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  15. package/dist/esm/pages/network/network-details.js +440 -112
  16. package/dist/esm/pages/network/network-details.js.map +1 -1
  17. package/dist/esm/pages/network/network-types.d.ts +76 -0
  18. package/dist/esm/pages/network/network-types.d.ts.map +1 -1
  19. package/dist/esm/pages/network/network-types.js.map +1 -1
  20. package/dist/esm/pages/network/network-utils.d.ts +89 -22
  21. package/dist/esm/pages/network/network-utils.d.ts.map +1 -1
  22. package/dist/esm/pages/network/network-utils.js +233 -95
  23. package/dist/esm/pages/network/network-utils.js.map +1 -1
  24. package/dist/esm/pages/network/thread-graph.d.ts +68 -9
  25. package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
  26. package/dist/esm/pages/network/thread-graph.js +388 -50
  27. package/dist/esm/pages/network/thread-graph.js.map +2 -2
  28. package/dist/esm/util/device-icons.d.ts +6 -0
  29. package/dist/esm/util/device-icons.d.ts.map +1 -1
  30. package/dist/esm/util/device-icons.js +6 -0
  31. package/dist/esm/util/device-icons.js.map +1 -1
  32. package/dist/web/js/{attribute-write-dialog-g4B6BoRt.js → attribute-write-dialog-DlMTUiLK.js} +1 -1
  33. package/dist/web/js/{command-invoke-dialog-D6G704VK.js → command-invoke-dialog-DO3IyFcm.js} +1 -1
  34. package/dist/web/js/{commission-node-dialog-Bg3oo5ub.js → commission-node-dialog-CMSvCm0i.js} +4 -4
  35. package/dist/web/js/{commission-node-existing-DO3g1aQJ.js → commission-node-existing-D08jghFu.js} +2 -2
  36. package/dist/web/js/{commission-node-thread-DM432aH1.js → commission-node-thread-D5waY758.js} +2 -2
  37. package/dist/web/js/{commission-node-wifi-Bx40FXij.js → commission-node-wifi-ClBlCFTZ.js} +2 -2
  38. package/dist/web/js/{dialog-box-DjyfULWB.js → dialog-box-D9vS2SmP.js} +1 -1
  39. package/dist/web/js/{fire_event-BstgNPuh.js → fire_event-BPhROjTC.js} +1 -1
  40. package/dist/web/js/main.js +1 -1
  41. package/dist/web/js/{matter-dashboard-app-Cj88TtbZ.js → matter-dashboard-app-C9zTE5uH.js} +1359 -302
  42. package/dist/web/js/{node-binding-dialog-9yy2LE3_.js → node-binding-dialog-B5p-gbim.js} +1 -1
  43. package/dist/web/js/{settings-dialog-Cs2xMsXb.js → settings-dialog-BMFhom0W.js} +1 -1
  44. package/package.json +4 -4
  45. package/src/pages/matter-network-view.ts +185 -1
  46. package/src/pages/network/base-network-graph.ts +10 -0
  47. package/src/pages/network/border-router-store.ts +38 -0
  48. package/src/pages/network/network-details.ts +535 -140
  49. package/src/pages/network/network-types.ts +76 -0
  50. package/src/pages/network/network-utils.ts +390 -171
  51. package/src/pages/network/thread-graph.ts +532 -73
  52. package/src/util/device-icons.ts +13 -0
@@ -14,15 +14,20 @@ var __decorateClass = (decorators, target, key, kind) => {
14
14
  * SPDX-License-Identifier: Apache-2.0
15
15
  */
16
16
  import { html } from "lit";
17
- import { customElement } from "lit/decorators.js";
18
- import { createNodeIconDataUrl, createUnknownDeviceIconDataUrl } from "../../util/device-icons.js";
17
+ import { customElement, property } from "lit/decorators.js";
18
+ import {
19
+ createBorderRouterIconDataUrl,
20
+ createNodeIconDataUrl,
21
+ createUnknownDeviceIconDataUrl
22
+ } from "../../util/device-icons.js";
19
23
  import { BaseNetworkGraph } from "./base-network-graph.js";
20
24
  import {
21
25
  buildExtAddrMap,
22
26
  buildRloc16Map,
23
- buildThreadConnections,
27
+ buildThreadEdgePairs,
24
28
  findUnknownDevices,
25
29
  getDeviceName,
30
+ getEdgeSignalScore,
26
31
  getNetworkType,
27
32
  getThreadExtendedAddressHex,
28
33
  getThreadRole
@@ -30,15 +35,38 @@ import {
30
35
  let ThreadGraph = class extends BaseNetworkGraph {
31
36
  constructor() {
32
37
  super(...arguments);
33
- /** Cache of unknown devices for the current render */
38
+ this.borderRouters = /* @__PURE__ */ new Map();
39
+ this.hideOfflineNodes = false;
40
+ this.hideWeakSignalEdges = false;
41
+ this.hideMediumSignalEdges = false;
42
+ this.hideStrongSignalEdges = false;
43
+ /** Cache of external Thread devices (Border Routers and unknown) for the current render */
34
44
  this._unknownDevices = [];
35
- /** Cached map of unknown devices (rebuilt in _updateGraph) */
45
+ /** Cached map of external Thread devices (rebuilt in _updateGraph) */
36
46
  this._unknownDevicesMapCache = /* @__PURE__ */ new Map();
47
+ /** All computed edge pairs (rebuilt in _updateGraph) */
48
+ this._edgePairs = /* @__PURE__ */ new Map();
49
+ /** Base state of each edge after filter+dedup, before highlight */
50
+ this._edgeBaseState = /* @__PURE__ */ new Map();
51
+ /** Whether highlight is currently active */
52
+ this._isHighlighted = false;
53
+ /** Node ID currently highlighted (for icon restoration on clear) */
54
+ this._highlightedNodeId = null;
37
55
  }
38
- /** Get unknown devices as a map for use by details panel */
56
+ /** Get external Thread devices as a map for use by details panel */
39
57
  get unknownDevicesMap() {
40
58
  return this._unknownDevicesMapCache;
41
59
  }
60
+ /** Get computed edge pairs (for potential use by other components) */
61
+ get edgePairs() {
62
+ return this._edgePairs;
63
+ }
64
+ updated(changedProperties) {
65
+ super.updated(changedProperties);
66
+ if (changedProperties.has("hideOfflineNodes") || changedProperties.has("hideWeakSignalEdges") || changedProperties.has("hideMediumSignalEdges") || changedProperties.has("hideStrongSignalEdges") || changedProperties.has("borderRouters")) {
67
+ this._debouncedUpdateGraph();
68
+ }
69
+ }
42
70
  /**
43
71
  * Searches for a Thread node (known or unknown) by extended address and selects it.
44
72
  * Accepts formats like:
@@ -73,73 +101,149 @@ let ThreadGraph = class extends BaseNetworkGraph {
73
101
  _updateGraph() {
74
102
  if (!this._nodesDataSet || !this._edgesDataSet) return;
75
103
  this._clearOriginalEdgeColors();
104
+ this._edgeBaseState.clear();
105
+ this._isHighlighted = false;
76
106
  const threadNodes = Object.values(this.nodes).filter((node) => getNetworkType(node) === "thread");
77
107
  if (threadNodes.length === 0) {
78
108
  this._nodesDataSet.clear();
79
109
  this._edgesDataSet.clear();
80
110
  this._unknownDevices = [];
81
111
  this._unknownDevicesMapCache.clear();
112
+ this._edgePairs.clear();
82
113
  return;
83
114
  }
84
115
  const extAddrMap = buildExtAddrMap(this.nodes);
85
116
  const rloc16Map = buildRloc16Map(this.nodes);
86
- this._unknownDevices = findUnknownDevices(this.nodes, extAddrMap, rloc16Map);
117
+ this._unknownDevices = findUnknownDevices(this.nodes, extAddrMap, rloc16Map, this.borderRouters);
87
118
  this._unknownDevicesMapCache.clear();
88
119
  for (const device of this._unknownDevices) {
89
- this._unknownDevicesMapCache.set(device.id, {
90
- extAddressHex: device.extAddressHex,
91
- isRouter: device.isRouter,
92
- seenBy: device.seenBy,
93
- bestRssi: device.bestRssi
94
- });
120
+ this._unknownDevicesMapCache.set(device.id, device);
95
121
  }
96
- const connections = buildThreadConnections(this.nodes, extAddrMap, rloc16Map, this._unknownDevices);
122
+ this._edgePairs = buildThreadEdgePairs(this.nodes, extAddrMap, rloc16Map, this._unknownDevices);
123
+ const hiddenNodeIds = /* @__PURE__ */ new Set();
97
124
  const graphNodes = threadNodes.map((node) => {
98
125
  const nodeId = String(node.node_id);
99
126
  const threadRole = getThreadRole(node);
100
- const isSelected = nodeId === String(this._selectedNodeId);
101
127
  const isOffline = node.available === false;
128
+ const shouldHide = this.hideOfflineNodes && isOffline;
129
+ if (shouldHide) {
130
+ hiddenNodeIds.add(nodeId);
131
+ }
102
132
  return {
103
133
  id: nodeId,
104
134
  label: getDeviceName(node),
105
- image: createNodeIconDataUrl(node, threadRole, isSelected, isOffline),
135
+ image: createNodeIconDataUrl(node, threadRole, false, isOffline),
106
136
  shape: "image",
107
137
  networkType: "thread",
108
138
  threadRole,
109
- offline: isOffline
139
+ offline: isOffline,
140
+ hidden: shouldHide
110
141
  };
111
142
  });
112
- for (const unknown of this._unknownDevices) {
113
- const isSelected = unknown.id === this._selectedNodeId;
114
- const typeLabel = unknown.isRouter ? "External Router" : "External Device";
115
- graphNodes.push({
116
- id: unknown.id,
117
- label: `${typeLabel} (${unknown.extAddressHex.slice(-8)})`,
118
- image: createUnknownDeviceIconDataUrl(unknown.isRouter, isSelected),
119
- shape: "image",
120
- networkType: "thread",
121
- isUnknown: true
122
- });
143
+ for (const device of this._unknownDevices) {
144
+ const isSelected = device.id === this._selectedNodeId;
145
+ let shouldHide = false;
146
+ if (this.hideOfflineNodes) {
147
+ const hasOnlineSeenBy = device.seenBy.some((nodeId) => {
148
+ const node = this.nodes[nodeId];
149
+ return node && node.available !== false;
150
+ });
151
+ shouldHide = !hasOnlineSeenBy;
152
+ }
153
+ if (shouldHide) {
154
+ hiddenNodeIds.add(device.id);
155
+ }
156
+ if (device.kind === "br") {
157
+ const hostname = device.hostname?.replace(/\.$/, "").replace(/\.local$/i, "");
158
+ const top = (hostname ?? device.networkName ?? "Border Router").slice(0, 24);
159
+ const suffix = hostname !== void 0 && device.networkName !== void 0 && device.networkName !== top ? `
160
+ ${device.networkName}` : "";
161
+ const label = `${top}${suffix}`;
162
+ graphNodes.push({
163
+ id: device.id,
164
+ label,
165
+ image: createBorderRouterIconDataUrl(isSelected),
166
+ shape: "image",
167
+ networkType: "thread",
168
+ isUnknown: false,
169
+ hidden: shouldHide
170
+ });
171
+ } else {
172
+ const typeLabel = device.isRouter ? "External Router" : "External Device";
173
+ const suffix = device.networkName !== void 0 ? `
174
+ ${device.networkName}` : "";
175
+ graphNodes.push({
176
+ id: device.id,
177
+ label: `${typeLabel} (${device.extAddressHex.slice(-8)})${suffix}`,
178
+ image: createUnknownDeviceIconDataUrl(device.isRouter, isSelected),
179
+ shape: "image",
180
+ networkType: "thread",
181
+ isUnknown: true,
182
+ hidden: shouldHide
183
+ });
184
+ }
185
+ }
186
+ const graphEdges = [];
187
+ for (const pair of this._edgePairs.values()) {
188
+ const edgesInPair = [];
189
+ for (const conn of [pair.edgeAB, pair.edgeBA]) {
190
+ if (!conn) continue;
191
+ const fromId = String(conn.fromNodeId);
192
+ const toId = String(conn.toNodeId);
193
+ const isToUnknown = toId.startsWith("unknown_") || toId.startsWith("br_");
194
+ const fromNode = this.nodes[fromId];
195
+ const toNode = this.nodes[toId];
196
+ const hasOfflineEndpoint = fromNode?.available === false || toNode?.available === false;
197
+ let filterHidden = false;
198
+ if (hiddenNodeIds.has(fromId) || hiddenNodeIds.has(toId)) {
199
+ filterHidden = true;
200
+ }
201
+ if (!filterHidden && this.hideWeakSignalEdges && conn.signalLevel === "weak") {
202
+ filterHidden = true;
203
+ }
204
+ if (!filterHidden && this.hideMediumSignalEdges && conn.signalLevel === "medium") {
205
+ filterHidden = true;
206
+ }
207
+ if (!filterHidden && this.hideStrongSignalEdges && conn.signalLevel === "strong") {
208
+ filterHidden = true;
209
+ }
210
+ const edgeId = `edge_${fromId}_${toId}`;
211
+ const visEdge = {
212
+ id: edgeId,
213
+ from: fromId,
214
+ to: toId,
215
+ color: { color: conn.signalColor, highlight: conn.signalColor },
216
+ width: 2,
217
+ title: conn.rssi !== null ? `RSSI: ${conn.rssi} dBm, LQI: ${conn.lqi}` : `LQI: ${conn.lqi}`,
218
+ dashes: isToUnknown || hasOfflineEndpoint,
219
+ hidden: filterHidden,
220
+ pairKey: pair.pairKey,
221
+ reportingNodeId: fromId
222
+ };
223
+ edgesInPair.push({ conn, visEdge, filterHidden });
224
+ }
225
+ const visibleInPair = edgesInPair.filter((e) => !e.visEdge.hidden);
226
+ if (visibleInPair.length > 1) {
227
+ visibleInPair.sort((a, b) => getEdgeSignalScore(a.conn) - getEdgeSignalScore(b.conn));
228
+ for (let i = 1; i < visibleInPair.length; i++) {
229
+ visibleInPair[i].visEdge.hidden = true;
230
+ }
231
+ }
232
+ for (const e of edgesInPair) {
233
+ const isHidden = e.visEdge.hidden ?? false;
234
+ let hiddenReason = "visible";
235
+ if (isHidden) {
236
+ hiddenReason = e.filterHidden ? "filter" : "dedup";
237
+ }
238
+ this._edgeBaseState.set(e.visEdge.id, {
239
+ hiddenReason,
240
+ width: e.visEdge.width,
241
+ color: { color: e.visEdge.color.color, highlight: e.visEdge.color.highlight },
242
+ dashes: e.visEdge.dashes ?? false
243
+ });
244
+ graphEdges.push(e.visEdge);
245
+ }
123
246
  }
124
- const graphEdges = connections.map((conn, index) => {
125
- const isToUnknown = typeof conn.toNodeId === "string" && conn.toNodeId.startsWith("unknown_");
126
- const fromNode = this.nodes[String(conn.fromNodeId)];
127
- const toNode = this.nodes[String(conn.toNodeId)];
128
- const hasOfflineEndpoint = fromNode?.available === false || toNode?.available === false;
129
- return {
130
- id: `edge_${index}`,
131
- from: conn.fromNodeId,
132
- to: conn.toNodeId,
133
- color: {
134
- color: conn.signalColor,
135
- highlight: conn.signalColor
136
- },
137
- width: 2,
138
- title: conn.rssi !== null ? `RSSI: ${conn.rssi} dBm, LQI: ${conn.lqi}` : `LQI: ${conn.lqi}`,
139
- dashes: isToUnknown || hasOfflineEndpoint
140
- // Dashed lines to unknown or offline devices
141
- };
142
- });
143
247
  const existingNodeIds = this._nodesDataSet.getIds();
144
248
  const newNodeIds = new Set(graphNodes.map((n) => n.id));
145
249
  const nodesToRemove = existingNodeIds.filter((id) => !newNodeIds.has(id));
@@ -149,20 +253,254 @@ let ThreadGraph = class extends BaseNetworkGraph {
149
253
  this._nodesDataSet.update(graphNodes);
150
254
  this._edgesDataSet.clear();
151
255
  this._edgesDataSet.add(graphEdges);
256
+ if (this._selectedNodeId !== null) {
257
+ this._highlightConnections(this._selectedNodeId);
258
+ }
259
+ }
260
+ /**
261
+ * Highlights edges connected to the selected node with swap/arrow logic.
262
+ *
263
+ * For each visible edge connected to the highlighted node:
264
+ * - If the visible edge comes from the remote node AND there is a
265
+ * dedup-hidden edge from the highlighted node → SWAP: show the
266
+ * highlighted node's edge instead (its signal is better or equal,
267
+ * but we prefer the highlighted node's perspective).
268
+ * - Otherwise → thicken the edge. If the pair is truly one-way (only
269
+ * one of edgeAB/edgeBA exists), also draw an arrow in the data
270
+ * direction so asymmetric visibility is visible at a glance.
271
+ */
272
+ _highlightConnections(nodeId) {
273
+ if (!this._edgesDataSet || !this._nodesDataSet) return;
274
+ const nodeIdStr = String(nodeId);
275
+ if (this._isHighlighted && this._highlightedNodeId === nodeIdStr) return;
276
+ if (this._isHighlighted) {
277
+ this._restoreEdgeBaseState();
278
+ }
279
+ const allEdges = this._edgesDataSet.get();
280
+ const dimmedColor = this._getDimmedEdgeColor();
281
+ const edgesByPair = /* @__PURE__ */ new Map();
282
+ for (const edge of allEdges) {
283
+ if (edge.pairKey) {
284
+ const list = edgesByPair.get(edge.pairKey) ?? [];
285
+ list.push(edge);
286
+ edgesByPair.set(edge.pairKey, list);
287
+ }
288
+ }
289
+ const connectedNodeIds = /* @__PURE__ */ new Set();
290
+ const edgeUpdates = {};
291
+ for (const edge of allEdges) {
292
+ const fromStr = String(edge.from);
293
+ const toStr = String(edge.to);
294
+ const isConnected = fromStr === nodeIdStr || toStr === nodeIdStr;
295
+ if (!isConnected) {
296
+ const baseState2 = this._edgeBaseState.get(edge.id);
297
+ if (baseState2 && baseState2.hiddenReason === "visible") {
298
+ edgeUpdates[String(edge.id)] = {
299
+ id: edge.id,
300
+ width: 1,
301
+ color: { color: dimmedColor, highlight: dimmedColor }
302
+ };
303
+ }
304
+ continue;
305
+ }
306
+ const baseState = this._edgeBaseState.get(edge.id);
307
+ if (!baseState || baseState.hiddenReason !== "visible") {
308
+ continue;
309
+ }
310
+ const remoteId = fromStr === nodeIdStr ? toStr : fromStr;
311
+ const reportingId = String(edge.reportingNodeId ?? edge.from);
312
+ connectedNodeIds.add(remoteId);
313
+ if (reportingId !== nodeIdStr) {
314
+ const pairEdges = edge.pairKey ? edgesByPair.get(edge.pairKey) : void 0;
315
+ const swapCandidate = pairEdges?.find((e) => {
316
+ const rid = String(e.reportingNodeId ?? e.from);
317
+ if (rid !== nodeIdStr) return false;
318
+ const bs = this._edgeBaseState.get(e.id);
319
+ return bs?.hiddenReason === "dedup";
320
+ });
321
+ if (swapCandidate) {
322
+ const swapBaseState = this._edgeBaseState.get(swapCandidate.id);
323
+ edgeUpdates[String(edge.id)] = {
324
+ id: edge.id,
325
+ hidden: true
326
+ };
327
+ edgeUpdates[String(swapCandidate.id)] = {
328
+ id: swapCandidate.id,
329
+ hidden: false,
330
+ width: 3,
331
+ color: swapBaseState ? { color: swapBaseState.color.color, highlight: swapBaseState.color.highlight } : { color: "#999999", highlight: "#999999" }
332
+ };
333
+ } else {
334
+ edgeUpdates[String(edge.id)] = this._reverseEdgeUpdate(edge);
335
+ }
336
+ } else {
337
+ edgeUpdates[String(edge.id)] = this._asymmetricEdgeUpdate(edge);
338
+ }
339
+ }
340
+ this._edgesDataSet.update(Object.values(edgeUpdates));
341
+ const allNodes = this._nodesDataSet.get();
342
+ const nodeUpdates = allNodes.map((node) => {
343
+ const isNeighbor = connectedNodeIds.has(node.id);
344
+ const isSelected = node.id === nodeId;
345
+ return {
346
+ id: node.id,
347
+ size: isSelected ? 40 : isNeighbor ? 35 : 25,
348
+ font: {
349
+ size: isSelected ? 14 : isNeighbor ? 13 : 11,
350
+ color: this._getFontColor(),
351
+ bold: isSelected || isNeighbor ? { color: this._getFontColor() } : void 0
352
+ },
353
+ opacity: isSelected || isNeighbor ? 1 : 0.5
354
+ };
355
+ });
356
+ this._nodesDataSet.update(nodeUpdates);
357
+ if (this._highlightedNodeId && this._highlightedNodeId !== nodeIdStr) {
358
+ this._setNodeIconHighlight(this._highlightedNodeId, false);
359
+ }
360
+ this._highlightedNodeId = nodeIdStr;
361
+ this._setNodeIconHighlight(nodeIdStr, true);
362
+ this._isHighlighted = true;
363
+ }
364
+ /**
365
+ * Thicken a connected edge and add a directional arrow when the pair is
366
+ * truly one-way in data (only one of edgeAB/edgeBA exists). Used for the
367
+ * highlighted-reports-peer branch where filter-hidden peer directions
368
+ * should not draw an arrow on the user's own perspective.
369
+ *
370
+ * Explicit arrow object (vs the shorthand "to") keeps the head visible
371
+ * on dashed offline edges where some vis.js builds skip the shorthand.
372
+ */
373
+ _asymmetricEdgeUpdate(edge) {
374
+ const pair = edge.pairKey ? this._edgePairs.get(edge.pairKey) : void 0;
375
+ const isAsymmetric = pair ? !pair.edgeAB || !pair.edgeBA : false;
376
+ const update = {
377
+ id: edge.id,
378
+ width: 3
379
+ };
380
+ if (isAsymmetric) {
381
+ update.arrows = { to: { enabled: true, scaleFactor: 1 } };
382
+ }
383
+ return update;
384
+ }
385
+ /**
386
+ * Thicken a connected edge and always add a directional arrow. Used for
387
+ * the remote-reports-highlighted branch where the displayed edge is the
388
+ * peer's direction (no swap target available); the user sees the same
389
+ * single line whether the outgoing direction is filter-hidden or absent.
390
+ */
391
+ _reverseEdgeUpdate(edge) {
392
+ return {
393
+ id: edge.id,
394
+ width: 3,
395
+ arrows: { to: { enabled: true, scaleFactor: 1 } }
396
+ };
397
+ }
398
+ /**
399
+ * Swap a node's icon between the default and highlighted variants.
400
+ * Kept separate so both `_highlightConnections` (switching target) and
401
+ * `_clearHighlights` (fully unselecting) reach the same end state.
402
+ */
403
+ _setNodeIconHighlight(nodeId, isHighlighted) {
404
+ if (!this._nodesDataSet) return;
405
+ const nodeData = this.nodes[nodeId];
406
+ if (nodeData) {
407
+ const threadRole = getThreadRole(nodeData);
408
+ const isOffline = nodeData.available === false;
409
+ this._nodesDataSet.update({
410
+ id: nodeId,
411
+ image: createNodeIconDataUrl(nodeData, threadRole, isHighlighted, isOffline)
412
+ });
413
+ return;
414
+ }
415
+ const external = this._unknownDevicesMapCache.get(nodeId);
416
+ if (external?.kind === "br") {
417
+ this._nodesDataSet.update({
418
+ id: nodeId,
419
+ image: createBorderRouterIconDataUrl(isHighlighted)
420
+ });
421
+ } else if (nodeId.startsWith("unknown_") || nodeId.startsWith("br_")) {
422
+ this._nodesDataSet.update({
423
+ id: nodeId,
424
+ image: createUnknownDeviceIconDataUrl(external?.isRouter ?? false, isHighlighted)
425
+ });
426
+ }
427
+ }
428
+ /**
429
+ * Clears all highlights and restores the graph to its base state
430
+ * (after filter+dedup, before highlight modifications).
431
+ */
432
+ _clearHighlights() {
433
+ if (!this._edgesDataSet || !this._nodesDataSet) return;
434
+ this._restoreEdgeBaseState();
435
+ if (this._highlightedNodeId) {
436
+ this._setNodeIconHighlight(this._highlightedNodeId, false);
437
+ this._highlightedNodeId = null;
438
+ }
439
+ const allNodes = this._nodesDataSet.get();
440
+ const nodeUpdates = allNodes.map((node) => ({
441
+ id: node.id,
442
+ size: 30,
443
+ font: {
444
+ size: 12,
445
+ color: this._getFontColor(),
446
+ bold: void 0
447
+ },
448
+ opacity: 1
449
+ }));
450
+ this._nodesDataSet.update(nodeUpdates);
451
+ this._isHighlighted = false;
452
+ }
453
+ /**
454
+ * Restores all edges to their base state (undoes highlight modifications).
455
+ * This resets hidden/visible state, width, color, and dashes.
456
+ */
457
+ _restoreEdgeBaseState() {
458
+ if (!this._edgesDataSet) return;
459
+ const edgeUpdates = [];
460
+ for (const [id, baseState] of this._edgeBaseState) {
461
+ edgeUpdates.push({
462
+ id,
463
+ hidden: baseState.hiddenReason !== "visible",
464
+ width: baseState.width,
465
+ color: { color: baseState.color.color, highlight: baseState.color.highlight },
466
+ dashes: baseState.dashes,
467
+ arrows: ""
468
+ });
469
+ }
470
+ this._edgesDataSet.update(edgeUpdates);
152
471
  }
153
472
  render() {
154
473
  const threadNodes = Object.values(this.nodes).filter((node) => getNetworkType(node) === "thread");
155
- if (threadNodes.length === 0) {
474
+ const visibleThreadNodes = this.hideOfflineNodes ? threadNodes.filter((node) => node.available !== false) : threadNodes;
475
+ if (visibleThreadNodes.length === 0) {
476
+ const allOfflineFiltered = threadNodes.length > 0 && this.hideOfflineNodes;
156
477
  return html`
157
478
  <div class="empty-state">
158
- <p>No Thread devices found</p>
159
- <p class="hint">Thread devices will appear here once commissioned</p>
479
+ <p>${allOfflineFiltered ? "No online Thread devices" : "No Thread devices found"}</p>
480
+ <p class="hint">
481
+ ${allOfflineFiltered ? 'Disable the "Offline nodes" filter to show offline devices' : "Thread devices will appear here once commissioned"}
482
+ </p>
160
483
  </div>
161
484
  `;
162
485
  }
163
486
  return html` <div class="graph-container"></div> `;
164
487
  }
165
488
  };
489
+ __decorateClass([
490
+ property({ attribute: false })
491
+ ], ThreadGraph.prototype, "borderRouters", 2);
492
+ __decorateClass([
493
+ property({ type: Boolean })
494
+ ], ThreadGraph.prototype, "hideOfflineNodes", 2);
495
+ __decorateClass([
496
+ property({ type: Boolean })
497
+ ], ThreadGraph.prototype, "hideWeakSignalEdges", 2);
498
+ __decorateClass([
499
+ property({ type: Boolean })
500
+ ], ThreadGraph.prototype, "hideMediumSignalEdges", 2);
501
+ __decorateClass([
502
+ property({ type: Boolean })
503
+ ], ThreadGraph.prototype, "hideStrongSignalEdges", 2);
166
504
  ThreadGraph = __decorateClass([
167
505
  customElement("thread-graph")
168
506
  ], ThreadGraph);
@@ -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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",
5
- "names": []
4
+ "mappings": "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",
5
+ "names": ["baseState"]
6
6
  }
@@ -49,6 +49,12 @@ export declare function createNodeIconDataUrl(node: MatterNode, threadRole?: num
49
49
  * @returns A data URL containing the SVG
50
50
  */
51
51
  export declare function createUnknownDeviceIconDataUrl(isRouter?: boolean, isSelected?: boolean): string;
52
+ /**
53
+ * Creates an SVG data URL for a Thread Border Router identified via mDNS.
54
+ * @param isSelected - Whether the node is selected
55
+ * @returns A data URL containing the SVG
56
+ */
57
+ export declare function createBorderRouterIconDataUrl(isSelected?: boolean): string;
52
58
  /**
53
59
  * Creates an SVG data URL for a WiFi access point/router.
54
60
  * @param isSelected - Whether the node is selected
@@ -1 +1 @@
1
- {"version":3,"file":"device-icons.d.ts","sourceRoot":"","sources":["../../../src/util/device-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA0V3D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CA6BzE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAU5F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,GAAE,OAAe,EAC3B,SAAS,GAAE,OAAe,GAC3B,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,GAAE,OAAe,EAAE,UAAU,GAAE,OAAe,GAAG,MAAM,CAM7G;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,GAAE,OAAe,GAAG,MAAM,CAK/E"}
1
+ {"version":3,"file":"device-icons.d.ts","sourceRoot":"","sources":["../../../src/util/device-icons.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AA2V3D;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,SAAS,CA6BzE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS1E;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAuB3E;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAW9D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAW,GAAG,MAAM,CAU5F;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACjC,IAAI,EAAE,UAAU,EAChB,UAAU,CAAC,EAAE,MAAM,EACnB,UAAU,GAAE,OAAe,EAC3B,SAAS,GAAE,OAAe,GAC3B,MAAM,CAaR;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,GAAE,OAAe,EAAE,UAAU,GAAE,OAAe,GAAG,MAAM,CAM7G;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,GAAE,OAAe,GAAG,MAAM,CAKjF;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CAAC,UAAU,GAAE,OAAe,GAAG,MAAM,CAK/E"}
@@ -37,6 +37,7 @@ import {
37
37
  mdiRemote,
38
38
  mdiRobotVacuum,
39
39
  mdiRouter,
40
+ mdiRouterWireless,
40
41
  mdiSmokeDetector,
41
42
  mdiSnowflakeAlert,
42
43
  mdiSolarPower,
@@ -370,11 +371,16 @@ function createUnknownDeviceIconDataUrl(isRouter = false, isSelected = false) {
370
371
  const color = isSelected ? getCssVar("--node-color-selected", "#1976d2") : getCssVar("--node-color-unknown", "#ff9800");
371
372
  return createIconDataUrl(iconPath, color);
372
373
  }
374
+ function createBorderRouterIconDataUrl(isSelected = false) {
375
+ const color = isSelected ? getCssVar("--node-color-selected", "#1976d2") : getCssVar("--md-sys-color-primary", "#03a9f4");
376
+ return createIconDataUrl(mdiRouterWireless, color);
377
+ }
373
378
  function createWiFiRouterIconDataUrl(isSelected = false) {
374
379
  const color = isSelected ? getCssVar("--node-color-selected", "#1976d2") : getCssVar("--node-color-unknown", "#ff9800");
375
380
  return createIconDataUrl(mdiWifi, color);
376
381
  }
377
382
  export {
383
+ createBorderRouterIconDataUrl,
378
384
  createIconDataUrl,
379
385
  createNodeIconDataUrl,
380
386
  createUnknownDeviceIconDataUrl,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/util/device-icons.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["deviceType"]
6
6
  }
@@ -1,4 +1,4 @@
1
- import { 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';
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-C9zTE5uH.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-Cj88TtbZ.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-C9zTE5uH.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';