@matter-server/dashboard 0.3.4 → 0.3.5
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.
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js +44 -17
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
- package/dist/esm/entrypoint/main.js +1 -1
- package/dist/esm/entrypoint/main.js.map +1 -1
- package/dist/esm/pages/matter-network-view.d.ts +5 -0
- package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-network-view.js +96 -13
- package/dist/esm/pages/matter-network-view.js.map +1 -1
- package/dist/esm/pages/network/base-network-graph.d.ts +34 -0
- package/dist/esm/pages/network/base-network-graph.d.ts.map +1 -1
- package/dist/esm/pages/network/base-network-graph.js +106 -23
- package/dist/esm/pages/network/base-network-graph.js.map +1 -1
- package/dist/esm/util/matter-status.d.ts +49 -0
- package/dist/esm/util/matter-status.d.ts.map +1 -0
- package/dist/esm/util/matter-status.js +110 -0
- package/dist/esm/util/matter-status.js.map +6 -0
- package/dist/web/js/{commission-node-dialog-CcMuttYO.js → commission-node-dialog-DBugVQOl.js} +4 -4
- package/dist/web/js/{commission-node-existing-CqTRDMAr.js → commission-node-existing-ts2MN2bQ.js} +2 -2
- package/dist/web/js/{commission-node-thread-DgwtTVwK.js → commission-node-thread-CixfNuM3.js} +2 -2
- package/dist/web/js/{commission-node-wifi-XaN2SEnE.js → commission-node-wifi-CWC30EYn.js} +2 -2
- package/dist/web/js/{dialog-box-COpDD8i7.js → dialog-box-SeMuFiWx.js} +1 -1
- package/dist/web/js/{fire_event-mDYWi2sw.js → fire_event-B63oGTcK.js} +1 -1
- package/dist/web/js/{log-level-dialog-Bc32kZVw.js → log-level-dialog-J0gFiLLM.js} +1 -1
- package/dist/web/js/main.js +2 -2
- package/dist/web/js/{matter-dashboard-app-CrBHT4fT.js → matter-dashboard-app-D7YWrgXj.js} +222 -43
- package/dist/web/js/{node-binding-dialog-C8fqOJiB.js → node-binding-dialog-DSBwIJcQ.js} +146 -18
- package/package.json +6 -6
- package/src/components/dialogs/binding/node-binding-dialog.ts +45 -21
- package/src/entrypoint/main.ts +2 -0
- package/src/pages/matter-network-view.ts +102 -13
- package/src/pages/network/base-network-graph.ts +130 -30
- package/src/util/matter-status.ts +165 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-binding-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6CAA6C,CAAC;AAErD,OAAO,iCAAiC,CAAC;AAEzC,OAAO,EAAqC,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"node-binding-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AAErC,OAAO,yBAAyB,CAAC;AACjC,OAAO,8BAA8B,CAAC;AACtC,OAAO,6CAA6C,CAAC;AAErD,OAAO,iCAAiC,CAAC;AAEzC,OAAO,EAAqC,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACvG,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAgBrD,qBACa,iBAAkB,SAAQ,UAAU;IAGtC,MAAM,EAAG,YAAY,CAAC;IAGtB,IAAI,CAAC,EAAE,UAAU,CAAC;IAGzB,QAAQ,EAAG,MAAM,CAAC;IAGlB,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,eAAe,CAAuB;IAG9C,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,aAAa;YAQP,oBAAoB;IAclC,0EAA0E;IAC1E,OAAO,CAAC,iBAAiB;YAKX,oBAAoB;IAgBlC,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,oBAAoB;YAId,kBAAkB;IAgBhC,OAAO,CAAC,0BAA0B;YAKpB,cAAc;IA8B5B,kFAAkF;IAClF,OAAO,CAAC,eAAe;IASvB,6FAA6F;IAC7F,OAAO,CAAC,oBAAoB;YAcd,YAAY;IAyBpB,iBAAiB;IA2EvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;cAcG,MAAM;IAqFzB,OAAgB,MAAM,0BAsCpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ"}
|
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
} from "../acl/model.js";
|
|
30
30
|
import { consume } from "@lit/context";
|
|
31
31
|
import { clientContext } from "../../../client/client-context.js";
|
|
32
|
+
import { analyzeBatchResults } from "../../../util/matter-status.js";
|
|
32
33
|
let NodeBindingDialog = class extends LitElement {
|
|
33
34
|
fetchBindingEntry() {
|
|
34
35
|
const bindings_raw = this.node.attributes[this.endpoint + "/30/0"];
|
|
@@ -97,14 +98,21 @@ let NodeBindingDialog = class extends LitElement {
|
|
|
97
98
|
const entries = rawEntries ? Object.values(rawEntries).map((v) => AccessControlEntryDataTransformer.transform(v)) : [];
|
|
98
99
|
entries.push(entry);
|
|
99
100
|
const apiEntries = entries.map((e) => this.toAccessControlEntry(e));
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
101
|
+
const results = await this.client.setACLEntry(targetNodeId, apiEntries);
|
|
102
|
+
const batchResult = analyzeBatchResults(results);
|
|
103
|
+
if (batchResult.outcome !== "all_success") {
|
|
104
|
+
console.error(`Set ACL entry: ${batchResult.message}`);
|
|
103
105
|
}
|
|
104
|
-
return
|
|
106
|
+
return batchResult;
|
|
105
107
|
} catch (err) {
|
|
106
|
-
console.error("
|
|
107
|
-
return
|
|
108
|
+
console.error("Add ACL error:", err);
|
|
109
|
+
return {
|
|
110
|
+
outcome: "all_failed",
|
|
111
|
+
successCount: 0,
|
|
112
|
+
failureCount: 1,
|
|
113
|
+
errorCounts: { 1: 1 },
|
|
114
|
+
message: `Exception: ${err instanceof Error ? err.message : String(err)}`
|
|
115
|
+
};
|
|
108
116
|
}
|
|
109
117
|
}
|
|
110
118
|
/** Convert local BindingEntryStruct to API BindingTarget (without fabricIndex) */
|
|
@@ -134,14 +142,21 @@ let NodeBindingDialog = class extends LitElement {
|
|
|
134
142
|
bindings.push(bindingEntry);
|
|
135
143
|
try {
|
|
136
144
|
const apiBindings = bindings.map((b) => this.toBindingTarget(b));
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
145
|
+
const results = await this.client.setNodeBinding(this.getNodeIdAsNumber(), endpoint, apiBindings);
|
|
146
|
+
const batchResult = analyzeBatchResults(results);
|
|
147
|
+
if (batchResult.outcome !== "all_success") {
|
|
148
|
+
console.error(`Set binding: ${batchResult.message}`);
|
|
140
149
|
}
|
|
141
|
-
return
|
|
150
|
+
return batchResult;
|
|
142
151
|
} catch (err) {
|
|
143
|
-
console.
|
|
144
|
-
return
|
|
152
|
+
console.error("Add bindings error:", err);
|
|
153
|
+
return {
|
|
154
|
+
outcome: "all_failed",
|
|
155
|
+
successCount: 0,
|
|
156
|
+
failureCount: 1,
|
|
157
|
+
errorCounts: { 1: 1 },
|
|
158
|
+
message: `Exception: ${err instanceof Error ? err.message : String(err)}`
|
|
159
|
+
};
|
|
145
160
|
}
|
|
146
161
|
}
|
|
147
162
|
async addBindingHandler() {
|
|
@@ -175,11 +190,16 @@ let NodeBindingDialog = class extends LitElement {
|
|
|
175
190
|
fabricIndex: 0
|
|
176
191
|
// Placeholder - server will use correct fabric index
|
|
177
192
|
};
|
|
178
|
-
const
|
|
179
|
-
if (
|
|
180
|
-
alert(
|
|
193
|
+
const aclResult = await this.add_target_acl(targetNodeId, acl_entry);
|
|
194
|
+
if (aclResult.outcome === "all_failed") {
|
|
195
|
+
alert(`Failed to add ACL entry:
|
|
196
|
+
${aclResult.message}`);
|
|
181
197
|
return;
|
|
182
198
|
}
|
|
199
|
+
if (aclResult.outcome === "partial") {
|
|
200
|
+
alert(`ACL entry partially failed:
|
|
201
|
+
${aclResult.message}`);
|
|
202
|
+
}
|
|
183
203
|
const endpoint = this.endpoint;
|
|
184
204
|
const bindingEntry = {
|
|
185
205
|
node: targetNodeId,
|
|
@@ -189,12 +209,19 @@ let NodeBindingDialog = class extends LitElement {
|
|
|
189
209
|
fabricIndex: void 0
|
|
190
210
|
// Server will use correct fabric index
|
|
191
211
|
};
|
|
192
|
-
const
|
|
193
|
-
if (
|
|
212
|
+
const bindingResult = await this.add_bindings(endpoint, bindingEntry);
|
|
213
|
+
if (bindingResult.outcome === "all_success") {
|
|
194
214
|
this._targetNodeId.value = "";
|
|
195
215
|
this._targetEndpoint.value = "";
|
|
196
216
|
this._targetCluster.value = "";
|
|
197
217
|
this.requestUpdate();
|
|
218
|
+
} else if (bindingResult.outcome === "partial") {
|
|
219
|
+
alert(`Binding partially failed:
|
|
220
|
+
${bindingResult.message}`);
|
|
221
|
+
this.requestUpdate();
|
|
222
|
+
} else {
|
|
223
|
+
alert(`Failed to add binding:
|
|
224
|
+
${bindingResult.message}`);
|
|
198
225
|
}
|
|
199
226
|
}
|
|
200
227
|
_close() {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AAEP,OAAO;AACP,OAAO;AACP,OAAO;AAEP,OAAO;AAGP,SAAS,KAAK,MAAM,YAAY,eAAe;AAC/C,SAAS,eAAe,UAAU,aAAa;AAC/C,SAAS,mBAAmB;AAC5B,SAAS,sBAAsB;AAC/B,SAAS,mCAAkE;AAE3E;AAAA,EACI;AAAA,OAGG;AAEP,SAAS,eAAe;AACxB,SAAS,qBAAqB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -8,7 +8,7 @@ import "../util/theme-service.js";
|
|
|
8
8
|
async function main() {
|
|
9
9
|
import("../pages/matter-dashboard-app.js");
|
|
10
10
|
let url = "";
|
|
11
|
-
const isProductionServer = location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
|
|
11
|
+
const isProductionServer = window.__MATTERJS_PRODUCTION_MODE__ === true || location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
|
|
12
12
|
if (!isProductionServer) {
|
|
13
13
|
let storageUrl = localStorage.getItem("matterURL");
|
|
14
14
|
if (!storageUrl) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/entrypoint/main.ts"],
|
|
4
|
-
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,oBAAoB;AAC7B,OAAO;AAEP,eAAe,OAAO;AAClB,SAAO,kCAAkC;AAEzC,MAAI,MAAM;
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,oBAAoB;AAC7B,OAAO;AAEP,eAAe,OAAO;AAClB,SAAO,kCAAkC;AAEzC,MAAI,MAAM;AAIV,QAAM,qBACD,OAAiE,iCAAiC,QACnG,SAAS,OAAO,SAAS,OAAO,KAChC,SAAS,KAAK,SAAS,gBAAgB,KACvC,SAAS,KAAK,SAAS,eAAe;AAE1C,MAAI,CAAC,oBAAoB;AAErB,QAAI,aAAa,aAAa,QAAQ,WAAW;AACjD,QAAI,CAAC,YAAY;AACb,YAAM,YAAY,IAAI,gBAAgB,OAAO,SAAS,MAAM;AAC5D,YAAM,eAAe,UAAU,IAAI,KAAK;AACxC,mBAAa;AAAA,QACT;AAAA,QACA,gBAAgB;AAAA,MACpB;AACA,UAAI,CAAC,YAAY;AACb,cAAM,+BAA+B;AACrC;AAAA,MACJ;AACA,UAAI,cAAc;AAEd,gBAAQ,UAAU,CAAC,GAAG,IAAI,OAAO,SAAS,QAAQ;AAAA,MACtD;AACA,mBAAa,QAAQ,aAAa,UAAU;AAAA,IAChD;AACA,UAAM;AAAA,EACV,OAAO;AAGH,QAAI,UAAU,OAAO,SAAS,SAAS,OAAO,SAAS;AACvD,QAAI,QAAQ,SAAS,GAAG,GAAG;AACvB,gBAAU,QAAQ,MAAM,GAAG,EAAE;AAAA,IACjC;AACA,UAAM,QAAQ,QAAQ,QAAQ,IAAI,IAAI;AACtC,YAAQ,IAAI,8CAA8C,GAAG,EAAE;AAAA,EACnE;AAEA,QAAM,SAAS,IAAI,aAAa,GAAG;AACnC,SAAO,eAAe;AAEtB,QAAM,YAAY,SAAS,cAAc,sBAAsB;AAC/D,YAAU,SAAS;AACnB,WAAS,KAAK,OAAO,SAAS;AAClC;AAEA,KAAK;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -28,6 +28,7 @@ declare class MatterNetworkView extends LitElement {
|
|
|
28
28
|
hasThreadDevices?: boolean;
|
|
29
29
|
hasWifiDevices?: boolean;
|
|
30
30
|
private _selectedNodeId;
|
|
31
|
+
private _physicsEnabled;
|
|
31
32
|
private _initialSelectionApplied;
|
|
32
33
|
private _selectRetryTimer?;
|
|
33
34
|
private _threadGraph?;
|
|
@@ -43,6 +44,10 @@ declare class MatterNetworkView extends LitElement {
|
|
|
43
44
|
private _handleDetailsClose;
|
|
44
45
|
private _handleSelectNode;
|
|
45
46
|
private _handleFitToScreen;
|
|
47
|
+
private _handleZoomIn;
|
|
48
|
+
private _handleZoomOut;
|
|
49
|
+
private _handleTogglePhysics;
|
|
50
|
+
private _handlePhysicsChanged;
|
|
46
51
|
private _renderThreadView;
|
|
47
52
|
private _renderWifiView;
|
|
48
53
|
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;
|
|
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"}
|
|
@@ -13,7 +13,7 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
13
13
|
* Copyright 2025-2026 Open Home Foundation
|
|
14
14
|
* SPDX-License-Identifier: Apache-2.0
|
|
15
15
|
*/
|
|
16
|
-
import { mdiFitToScreen } from "@mdi/js";
|
|
16
|
+
import { mdiFitToScreen, mdiMagnifyMinus, mdiMagnifyPlus, mdiPause, mdiPlay } from "@mdi/js";
|
|
17
17
|
import { css, html, LitElement } from "lit";
|
|
18
18
|
import { customElement, property, query, state } from "lit/decorators.js";
|
|
19
19
|
import "../components/ha-svg-icon";
|
|
@@ -30,6 +30,7 @@ let MatterNetworkView = class extends LitElement {
|
|
|
30
30
|
this.networkType = "thread";
|
|
31
31
|
this.initialSelectedNodeId = null;
|
|
32
32
|
this._selectedNodeId = null;
|
|
33
|
+
this._physicsEnabled = true;
|
|
33
34
|
this._initialSelectionApplied = false;
|
|
34
35
|
}
|
|
35
36
|
willUpdate(changedProperties) {
|
|
@@ -84,16 +85,60 @@ let MatterNetworkView = class extends LitElement {
|
|
|
84
85
|
this._wifiGraph?.fit();
|
|
85
86
|
}
|
|
86
87
|
}
|
|
88
|
+
_handleZoomIn() {
|
|
89
|
+
if (this.networkType === "thread") {
|
|
90
|
+
this._threadGraph?.zoomIn();
|
|
91
|
+
} else {
|
|
92
|
+
this._wifiGraph?.zoomIn();
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
_handleZoomOut() {
|
|
96
|
+
if (this.networkType === "thread") {
|
|
97
|
+
this._threadGraph?.zoomOut();
|
|
98
|
+
} else {
|
|
99
|
+
this._wifiGraph?.zoomOut();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
_handleTogglePhysics() {
|
|
103
|
+
const newState = !this._physicsEnabled;
|
|
104
|
+
this._physicsEnabled = newState;
|
|
105
|
+
this._threadGraph?.setPhysicsEnabled(newState);
|
|
106
|
+
this._wifiGraph?.setPhysicsEnabled(newState);
|
|
107
|
+
}
|
|
108
|
+
_handlePhysicsChanged(event) {
|
|
109
|
+
this._physicsEnabled = event.detail.enabled;
|
|
110
|
+
this._threadGraph?.setPhysicsEnabled(event.detail.enabled);
|
|
111
|
+
this._wifiGraph?.setPhysicsEnabled(event.detail.enabled);
|
|
112
|
+
}
|
|
87
113
|
_renderThreadView() {
|
|
88
114
|
return html`
|
|
89
115
|
<div class="graph-section">
|
|
90
116
|
<div class="graph-header">
|
|
91
117
|
<h2>Thread Network Mesh</h2>
|
|
92
|
-
<
|
|
93
|
-
<
|
|
94
|
-
|
|
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>
|
|
135
|
+
</div>
|
|
95
136
|
</div>
|
|
96
|
-
<thread-graph
|
|
137
|
+
<thread-graph
|
|
138
|
+
.nodes=${this.nodes}
|
|
139
|
+
@node-selected=${this._handleNodeSelected}
|
|
140
|
+
@physics-changed=${this._handlePhysicsChanged}
|
|
141
|
+
></thread-graph>
|
|
97
142
|
</div>
|
|
98
143
|
`;
|
|
99
144
|
}
|
|
@@ -102,11 +147,30 @@ let MatterNetworkView = class extends LitElement {
|
|
|
102
147
|
<div class="graph-section">
|
|
103
148
|
<div class="graph-header">
|
|
104
149
|
<h2>WiFi Network</h2>
|
|
105
|
-
<
|
|
106
|
-
<
|
|
107
|
-
|
|
150
|
+
<div class="graph-controls">
|
|
151
|
+
<button class="control-button" @click=${this._handleZoomIn} title="Zoom in">
|
|
152
|
+
<ha-svg-icon .path=${mdiMagnifyPlus}></ha-svg-icon>
|
|
153
|
+
</button>
|
|
154
|
+
<button class="control-button" @click=${this._handleZoomOut} title="Zoom out">
|
|
155
|
+
<ha-svg-icon .path=${mdiMagnifyMinus}></ha-svg-icon>
|
|
156
|
+
</button>
|
|
157
|
+
<button class="control-button" @click=${this._handleFitToScreen} title="Fit to screen">
|
|
158
|
+
<ha-svg-icon .path=${mdiFitToScreen}></ha-svg-icon>
|
|
159
|
+
</button>
|
|
160
|
+
<button
|
|
161
|
+
class="control-button ${this._physicsEnabled ? "" : "active"}"
|
|
162
|
+
@click=${this._handleTogglePhysics}
|
|
163
|
+
title="${this._physicsEnabled ? "Freeze layout" : "Unfreeze layout"}"
|
|
164
|
+
>
|
|
165
|
+
<ha-svg-icon .path=${this._physicsEnabled ? mdiPause : mdiPlay}></ha-svg-icon>
|
|
166
|
+
</button>
|
|
167
|
+
</div>
|
|
108
168
|
</div>
|
|
109
|
-
<wifi-graph
|
|
169
|
+
<wifi-graph
|
|
170
|
+
.nodes=${this.nodes}
|
|
171
|
+
@node-selected=${this._handleNodeSelected}
|
|
172
|
+
@physics-changed=${this._handlePhysicsChanged}
|
|
173
|
+
></wifi-graph>
|
|
110
174
|
</div>
|
|
111
175
|
`;
|
|
112
176
|
}
|
|
@@ -199,7 +263,12 @@ MatterNetworkView.styles = css`
|
|
|
199
263
|
color: var(--md-sys-color-on-background, #333);
|
|
200
264
|
}
|
|
201
265
|
|
|
202
|
-
.
|
|
266
|
+
.graph-controls {
|
|
267
|
+
display: flex;
|
|
268
|
+
gap: 4px;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.control-button {
|
|
203
272
|
background: none;
|
|
204
273
|
border: 1px solid var(--md-sys-color-outline-variant, #ccc);
|
|
205
274
|
border-radius: 4px;
|
|
@@ -208,17 +277,28 @@ MatterNetworkView.styles = css`
|
|
|
208
277
|
display: flex;
|
|
209
278
|
align-items: center;
|
|
210
279
|
justify-content: center;
|
|
211
|
-
transition:
|
|
280
|
+
transition:
|
|
281
|
+
background-color 0.2s,
|
|
282
|
+
border-color 0.2s;
|
|
212
283
|
}
|
|
213
284
|
|
|
214
|
-
.
|
|
285
|
+
.control-button:hover {
|
|
215
286
|
background-color: var(--md-sys-color-surface-container-high, #e8e8e8);
|
|
216
287
|
}
|
|
217
288
|
|
|
218
|
-
.
|
|
289
|
+
.control-button.active {
|
|
290
|
+
background-color: var(--md-sys-color-primary-container, #e8def8);
|
|
291
|
+
border-color: var(--md-sys-color-primary, #6750a4);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.control-button ha-svg-icon {
|
|
219
295
|
--icon-primary-color: var(--md-sys-color-on-surface-variant, #666);
|
|
220
296
|
}
|
|
221
297
|
|
|
298
|
+
.control-button.active ha-svg-icon {
|
|
299
|
+
--icon-primary-color: var(--md-sys-color-on-primary-container, #21005d);
|
|
300
|
+
}
|
|
301
|
+
|
|
222
302
|
.graph-section thread-graph,
|
|
223
303
|
.graph-section wifi-graph {
|
|
224
304
|
flex: 1 1 0;
|
|
@@ -297,6 +377,9 @@ __decorateClass([
|
|
|
297
377
|
__decorateClass([
|
|
298
378
|
state()
|
|
299
379
|
], MatterNetworkView.prototype, "_selectedNodeId", 2);
|
|
380
|
+
__decorateClass([
|
|
381
|
+
state()
|
|
382
|
+
], MatterNetworkView.prototype, "_physicsEnabled", 2);
|
|
300
383
|
__decorateClass([
|
|
301
384
|
query("thread-graph")
|
|
302
385
|
], 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": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -14,6 +14,7 @@ import type { NetworkGraphEdge, NetworkGraphNode } from "./network-types.js";
|
|
|
14
14
|
export declare abstract class BaseNetworkGraph extends LitElement {
|
|
15
15
|
nodes: Record<string, MatterNode>;
|
|
16
16
|
protected _selectedNodeId: number | string | null;
|
|
17
|
+
protected _physicsEnabled: boolean;
|
|
17
18
|
protected _network?: Network;
|
|
18
19
|
protected _nodesDataSet?: DataSet<NetworkGraphNode>;
|
|
19
20
|
protected _edgesDataSet?: DataSet<NetworkGraphEdge>;
|
|
@@ -21,6 +22,11 @@ export declare abstract class BaseNetworkGraph extends LitElement {
|
|
|
21
22
|
protected _resizeObserver?: ResizeObserver;
|
|
22
23
|
protected _themeUnsubscribe?: () => void;
|
|
23
24
|
protected _updateDebounceTimer?: ReturnType<typeof setTimeout>;
|
|
25
|
+
protected _autoFreezeTimer?: ReturnType<typeof setTimeout>;
|
|
26
|
+
/** Whether auto-freeze has already been applied (to avoid re-freezing after user unfreezes) */
|
|
27
|
+
private _autoFreezeApplied;
|
|
28
|
+
/** Whether initial fit has been done (to preserve user's zoom/pan after first load) */
|
|
29
|
+
private _initialFitDone;
|
|
24
30
|
/** Store original edge colors for restoration after highlighting */
|
|
25
31
|
private _originalEdgeColors;
|
|
26
32
|
protected _getFontColor(): string;
|
|
@@ -48,6 +54,34 @@ export declare abstract class BaseNetworkGraph extends LitElement {
|
|
|
48
54
|
* Fits all nodes into view.
|
|
49
55
|
*/
|
|
50
56
|
fit(): void;
|
|
57
|
+
/**
|
|
58
|
+
* Zooms in by 20%.
|
|
59
|
+
*/
|
|
60
|
+
zoomIn(): void;
|
|
61
|
+
/**
|
|
62
|
+
* Zooms out by 20%.
|
|
63
|
+
*/
|
|
64
|
+
zoomOut(): void;
|
|
65
|
+
/**
|
|
66
|
+
* Returns whether physics simulation is currently enabled.
|
|
67
|
+
*/
|
|
68
|
+
get physicsEnabled(): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Enables or disables physics simulation (node movement/settling).
|
|
71
|
+
* When disabled, nodes freeze in place; when enabled, they resume settling.
|
|
72
|
+
* @param enabled Whether to enable physics
|
|
73
|
+
* @param isManual If true, cancels any pending auto-freeze (user manually toggled)
|
|
74
|
+
*/
|
|
75
|
+
setPhysicsEnabled(enabled: boolean, isManual?: boolean): void;
|
|
76
|
+
/**
|
|
77
|
+
* Starts the auto-freeze timer. Physics will be disabled after 5 seconds
|
|
78
|
+
* unless the user manually toggles physics or the timer is cancelled.
|
|
79
|
+
*/
|
|
80
|
+
private _startAutoFreezeTimer;
|
|
81
|
+
/**
|
|
82
|
+
* Cancels any pending auto-freeze timer.
|
|
83
|
+
*/
|
|
84
|
+
private _cancelAutoFreezeTimer;
|
|
51
85
|
/**
|
|
52
86
|
* Selects a node by ID and focuses on it.
|
|
53
87
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-network-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/base-network-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAO,MAAM,KAAK,CAAC;AAGtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;;GAGG;AACH,8BAAsB,gBAAiB,SAAQ,UAAU;IAE9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAG9C,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;
|
|
1
|
+
{"version":3,"file":"base-network-graph.d.ts","sourceRoot":"","sources":["../../../../src/pages/network/base-network-graph.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAO,MAAM,KAAK,CAAC;AAGtC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;;GAGG;AACH,8BAAsB,gBAAiB,SAAQ,UAAU;IAE9C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAM;IAG9C,SAAS,CAAC,eAAe,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAQ;IAGzD,SAAS,CAAC,eAAe,UAAQ;IAEjC,SAAS,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAC7B,SAAS,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,SAAS,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpD,SAAS,CAAC,UAAU,CAAC,EAAE,cAAc,CAAC;IACtC,SAAS,CAAC,eAAe,CAAC,EAAE,cAAc,CAAC;IAC3C,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IACzC,SAAS,CAAC,oBAAoB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAC/D,SAAS,CAAC,gBAAgB,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAC3D,+FAA+F;IAC/F,OAAO,CAAC,kBAAkB,CAAS;IACnC,uFAAuF;IACvF,OAAO,CAAC,eAAe,CAAS;IAEhC,oEAAoE;IACpE,OAAO,CAAC,mBAAmB,CAAgE;IAE3F,SAAS,CAAC,aAAa,IAAI,MAAM;IAIjC,SAAS,CAAC,mBAAmB,IAAI,MAAM;IAIvC;;OAEG;IACH,SAAS,CAAC,kBAAkB,IAAI,GAAG;IAoB1B,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAc/D;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAmB3B,wDAAwD;IACxD,SAAS,CAAC,qBAAqB,IAAI,IAAI;IAS9B,YAAY,IAAI,IAAI;IAkDpB,oBAAoB,IAAI,IAAI;IAiBrC,SAAS,CAAC,kBAAkB,IAAI,IAAI;IAqFpC;;OAEG;IACI,OAAO,IAAI,OAAO;IAIzB;;OAEG;IACI,GAAG,IAAI,IAAI;IASlB;;OAEG;IACI,MAAM,IAAI,IAAI;IAYrB;;OAEG;IACI,OAAO,IAAI,IAAI;IAYtB;;OAEG;IACH,IAAW,cAAc,IAAI,OAAO,CAEnC;IAED;;;;;OAKG;IACI,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,UAAO,GAAG,IAAI;IAajE;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAuB7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;IACI,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAkBhD,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI;IAUrE;;OAEG;IACH,SAAS,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAuE9D;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,IAAI;IA8BlC;;OAEG;IACH,SAAS,CAAC,wBAAwB,IAAI,IAAI;IAI1C;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,IAAI,IAAI;IAEvC,OAAgB,MAAM,0BAuCpB;CACL"}
|
|
@@ -22,6 +22,11 @@ class BaseNetworkGraph extends LitElement {
|
|
|
22
22
|
super(...arguments);
|
|
23
23
|
this.nodes = {};
|
|
24
24
|
this._selectedNodeId = null;
|
|
25
|
+
this._physicsEnabled = true;
|
|
26
|
+
/** Whether auto-freeze has already been applied (to avoid re-freezing after user unfreezes) */
|
|
27
|
+
this._autoFreezeApplied = false;
|
|
28
|
+
/** Whether initial fit has been done (to preserve user's zoom/pan after first load) */
|
|
29
|
+
this._initialFitDone = false;
|
|
25
30
|
/** Store original edge colors for restoration after highlighting */
|
|
26
31
|
this._originalEdgeColors = /* @__PURE__ */ new Map();
|
|
27
32
|
}
|
|
@@ -134,6 +139,7 @@ class BaseNetworkGraph extends LitElement {
|
|
|
134
139
|
super.disconnectedCallback();
|
|
135
140
|
this._resizeObserver?.disconnect();
|
|
136
141
|
this._themeUnsubscribe?.();
|
|
142
|
+
this._cancelAutoFreezeTimer();
|
|
137
143
|
if (this._updateDebounceTimer) {
|
|
138
144
|
clearTimeout(this._updateDebounceTimer);
|
|
139
145
|
}
|
|
@@ -203,20 +209,16 @@ class BaseNetworkGraph extends LitElement {
|
|
|
203
209
|
this._dispatchNodeSelected(null);
|
|
204
210
|
});
|
|
205
211
|
this._network.on("stabilizationIterationsDone", () => {
|
|
206
|
-
this.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
duration: 300,
|
|
217
|
-
easingFunction: "easeInOutQuad"
|
|
218
|
-
}
|
|
219
|
-
});
|
|
212
|
+
if (!this._initialFitDone) {
|
|
213
|
+
this._network?.fit({
|
|
214
|
+
animation: {
|
|
215
|
+
duration: 500,
|
|
216
|
+
easingFunction: "easeInOutQuad"
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
this._initialFitDone = true;
|
|
220
|
+
this._startAutoFreezeTimer();
|
|
221
|
+
}
|
|
220
222
|
});
|
|
221
223
|
this._updateGraph();
|
|
222
224
|
}
|
|
@@ -237,6 +239,88 @@ class BaseNetworkGraph extends LitElement {
|
|
|
237
239
|
}
|
|
238
240
|
});
|
|
239
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Zooms in by 20%.
|
|
244
|
+
*/
|
|
245
|
+
zoomIn() {
|
|
246
|
+
if (!this._network) return;
|
|
247
|
+
const scale = this._network.getScale();
|
|
248
|
+
this._network.moveTo({
|
|
249
|
+
scale: scale * 1.2,
|
|
250
|
+
animation: {
|
|
251
|
+
duration: 200,
|
|
252
|
+
easingFunction: "easeInOutQuad"
|
|
253
|
+
}
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Zooms out by 20%.
|
|
258
|
+
*/
|
|
259
|
+
zoomOut() {
|
|
260
|
+
if (!this._network) return;
|
|
261
|
+
const scale = this._network.getScale();
|
|
262
|
+
this._network.moveTo({
|
|
263
|
+
scale: scale / 1.2,
|
|
264
|
+
animation: {
|
|
265
|
+
duration: 200,
|
|
266
|
+
easingFunction: "easeInOutQuad"
|
|
267
|
+
}
|
|
268
|
+
});
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Returns whether physics simulation is currently enabled.
|
|
272
|
+
*/
|
|
273
|
+
get physicsEnabled() {
|
|
274
|
+
return this._physicsEnabled;
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Enables or disables physics simulation (node movement/settling).
|
|
278
|
+
* When disabled, nodes freeze in place; when enabled, they resume settling.
|
|
279
|
+
* @param enabled Whether to enable physics
|
|
280
|
+
* @param isManual If true, cancels any pending auto-freeze (user manually toggled)
|
|
281
|
+
*/
|
|
282
|
+
setPhysicsEnabled(enabled, isManual = true) {
|
|
283
|
+
if (isManual) {
|
|
284
|
+
this._cancelAutoFreezeTimer();
|
|
285
|
+
this._autoFreezeApplied = true;
|
|
286
|
+
}
|
|
287
|
+
this._physicsEnabled = enabled;
|
|
288
|
+
this._network?.setOptions({
|
|
289
|
+
physics: { enabled }
|
|
290
|
+
});
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Starts the auto-freeze timer. Physics will be disabled after 5 seconds
|
|
294
|
+
* unless the user manually toggles physics or the timer is cancelled.
|
|
295
|
+
*/
|
|
296
|
+
_startAutoFreezeTimer() {
|
|
297
|
+
if (this._autoFreezeApplied) {
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
this._cancelAutoFreezeTimer();
|
|
301
|
+
this._autoFreezeTimer = setTimeout(() => {
|
|
302
|
+
if (!this._autoFreezeApplied && this._physicsEnabled) {
|
|
303
|
+
this.setPhysicsEnabled(false, false);
|
|
304
|
+
this._autoFreezeApplied = true;
|
|
305
|
+
this.dispatchEvent(
|
|
306
|
+
new CustomEvent("physics-changed", {
|
|
307
|
+
detail: { enabled: false },
|
|
308
|
+
bubbles: true,
|
|
309
|
+
composed: true
|
|
310
|
+
})
|
|
311
|
+
);
|
|
312
|
+
}
|
|
313
|
+
}, 5e3);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Cancels any pending auto-freeze timer.
|
|
317
|
+
*/
|
|
318
|
+
_cancelAutoFreezeTimer() {
|
|
319
|
+
if (this._autoFreezeTimer) {
|
|
320
|
+
clearTimeout(this._autoFreezeTimer);
|
|
321
|
+
this._autoFreezeTimer = void 0;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
240
324
|
/**
|
|
241
325
|
* Selects a node by ID and focuses on it.
|
|
242
326
|
*/
|
|
@@ -273,10 +357,9 @@ class BaseNetworkGraph extends LitElement {
|
|
|
273
357
|
const edgeId = String(edge.id);
|
|
274
358
|
if (!this._originalEdgeColors.has(edgeId)) {
|
|
275
359
|
const colorObj = edge.color;
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
});
|
|
360
|
+
const color = colorObj?.color ?? "#999999";
|
|
361
|
+
const highlight = colorObj?.highlight ?? color;
|
|
362
|
+
this._originalEdgeColors.set(edgeId, { color, highlight });
|
|
280
363
|
}
|
|
281
364
|
}
|
|
282
365
|
const connectedEdges = this._edgesDataSet.get({
|
|
@@ -294,14 +377,11 @@ class BaseNetworkGraph extends LitElement {
|
|
|
294
377
|
const edgeUpdates = allEdges.map((edge) => {
|
|
295
378
|
const isConnected = edge.from === nodeId || edge.to === nodeId;
|
|
296
379
|
const originalColor = this._originalEdgeColors.get(String(edge.id));
|
|
380
|
+
const connectedColor = originalColor ?? { color: "#999999", highlight: "#999999" };
|
|
297
381
|
return {
|
|
298
382
|
id: edge.id,
|
|
299
383
|
width: isConnected ? 3 : 1,
|
|
300
|
-
|
|
301
|
-
color: isConnected ? { color: originalColor?.color, highlight: originalColor?.highlight } : {
|
|
302
|
-
color: dimmedColor,
|
|
303
|
-
highlight: dimmedColor
|
|
304
|
-
}
|
|
384
|
+
color: isConnected ? { color: connectedColor.color, highlight: connectedColor.highlight } : { color: dimmedColor, highlight: dimmedColor }
|
|
305
385
|
};
|
|
306
386
|
});
|
|
307
387
|
this._edgesDataSet.update(edgeUpdates);
|
|
@@ -405,6 +485,9 @@ __decorateClass([
|
|
|
405
485
|
__decorateClass([
|
|
406
486
|
state()
|
|
407
487
|
], BaseNetworkGraph.prototype, "_selectedNodeId", 2);
|
|
488
|
+
__decorateClass([
|
|
489
|
+
state()
|
|
490
|
+
], BaseNetworkGraph.prototype, "_physicsEnabled", 2);
|
|
408
491
|
export {
|
|
409
492
|
BaseNetworkGraph
|
|
410
493
|
};
|