@matter-server/dashboard 1.1.8-alpha.0-20260707-c552b9d → 1.2.1
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/README.md +30 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +55 -2
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +53 -3
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
- package/dist/esm/components/dialogs/fabric-label-dialog/fabric-label-dialog.d.ts +29 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/fabric-label-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/fabric-label-dialog.js +112 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/fabric-label-dialog.js.map +6 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.d.ts +8 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.js +17 -0
- package/dist/esm/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.js.map +6 -0
- package/dist/esm/components/dialogs/settings/settings-dialog.d.ts +28 -0
- package/dist/esm/components/dialogs/settings/settings-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/settings/settings-dialog.js +496 -105
- package/dist/esm/components/dialogs/settings/settings-dialog.js.map +1 -1
- package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts +6 -0
- package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/base-cluster-commands.js +8 -0
- package/dist/esm/pages/cluster-commands/base-cluster-commands.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/access-control-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/access-control-commands.js +21 -7
- package/dist/esm/pages/cluster-commands/clusters/access-control-commands.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/avsum-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/avsum-commands.js +34 -13
- package/dist/esm/pages/cluster-commands/clusters/avsum-commands.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js +17 -11
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/binding-commands.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/binding-commands.js +24 -9
- package/dist/esm/pages/cluster-commands/clusters/binding-commands.js.map +1 -1
- package/dist/esm/pages/cluster-commands/clusters/icd-management-commands.d.ts +54 -0
- package/dist/esm/pages/cluster-commands/clusters/icd-management-commands.d.ts.map +1 -0
- package/dist/esm/pages/cluster-commands/clusters/icd-management-commands.js +514 -0
- package/dist/esm/pages/cluster-commands/clusters/icd-management-commands.js.map +6 -0
- package/dist/esm/pages/cluster-commands/index.d.ts +1 -0
- package/dist/esm/pages/cluster-commands/index.d.ts.map +1 -1
- package/dist/esm/pages/cluster-commands/index.js +1 -0
- package/dist/esm/pages/cluster-commands/index.js.map +1 -1
- package/dist/esm/pages/components/node-details.d.ts +2 -0
- package/dist/esm/pages/components/node-details.d.ts.map +1 -1
- package/dist/esm/pages/components/node-details.js +43 -2
- package/dist/esm/pages/components/node-details.js.map +1 -1
- package/dist/esm/pages/components/server-details.d.ts +4 -0
- package/dist/esm/pages/components/server-details.d.ts.map +1 -1
- package/dist/esm/pages/components/server-details.js +50 -2
- package/dist/esm/pages/components/server-details.js.map +1 -1
- package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-cluster-view.js +1 -1
- package/dist/esm/pages/matter-cluster-view.js.map +1 -1
- package/dist/esm/pages/matter-network-view.d.ts +2 -0
- package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-network-view.js +23 -0
- package/dist/esm/pages/matter-network-view.js.map +1 -1
- package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-server-view.js +35 -1
- package/dist/esm/pages/matter-server-view.js.map +1 -1
- package/dist/esm/pages/network/border-router-store.d.ts +11 -4
- package/dist/esm/pages/network/border-router-store.d.ts.map +1 -1
- package/dist/esm/pages/network/border-router-store.js +39 -0
- package/dist/esm/pages/network/border-router-store.js.map +1 -1
- package/dist/esm/pages/network/network-details.d.ts +11 -1
- package/dist/esm/pages/network/network-details.d.ts.map +1 -1
- package/dist/esm/pages/network/network-details.js +305 -3
- package/dist/esm/pages/network/network-details.js.map +1 -1
- package/dist/esm/pages/network/network-types.d.ts +3 -183
- package/dist/esm/pages/network/network-types.d.ts.map +1 -1
- package/dist/esm/pages/network/network-types.js +1 -10
- package/dist/esm/pages/network/network-types.js.map +2 -2
- package/dist/esm/pages/network/network-utils.d.ts +19 -171
- package/dist/esm/pages/network/network-utils.d.ts.map +1 -1
- package/dist/esm/pages/network/network-utils.js +118 -510
- package/dist/esm/pages/network/network-utils.js.map +2 -2
- package/dist/esm/pages/network/thread-graph.d.ts +23 -1
- package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
- package/dist/esm/pages/network/thread-graph.js +187 -10
- package/dist/esm/pages/network/thread-graph.js.map +1 -1
- package/dist/esm/util/duration.d.ts +8 -0
- package/dist/esm/util/duration.d.ts.map +1 -0
- package/dist/esm/util/duration.js +25 -0
- package/dist/esm/util/duration.js.map +6 -0
- package/dist/esm/util/icd.d.ts +54 -0
- package/dist/esm/util/icd.d.ts.map +1 -0
- package/dist/esm/util/icd.js +139 -0
- package/dist/esm/util/icd.js.map +6 -0
- package/dist/web/js/{attribute-write-dialog-Bk3AWMoZ.js → attribute-write-dialog-Bu7d1xMh.js} +1 -1
- package/dist/web/js/{command-invoke-dialog-H8A7dCFd.js → command-invoke-dialog-BK7MYWq-.js} +1 -1
- package/dist/web/js/{commission-node-dialog-GIvqBYGw.js → commission-node-dialog-BeRg7rEp.js} +5 -5
- package/dist/web/js/{commission-node-existing-DglV5NXP.js → commission-node-existing-ugSNvMcK.js} +2 -2
- package/dist/web/js/{commission-node-thread-DzrHWt8R.js → commission-node-thread-CT_Qbe1U.js} +53 -4
- package/dist/web/js/{commission-node-wifi-DWQ9mxqk.js → commission-node-wifi-Bx1nhWl4.js} +48 -5
- package/dist/web/js/{dialog-box-CsqgNzj2.js → dialog-box-DolVvXoK.js} +1 -1
- package/dist/web/js/fabric-label-dialog-D4NlfZS9.js +94 -0
- package/dist/web/js/fire_event-CJVsUQ4T.js +18 -0
- package/dist/web/js/main.js +101 -22
- package/dist/web/js/{matter-dashboard-app-BrbVPiqG.js → matter-dashboard-app-DMIDxj8f.js} +3118 -944
- package/dist/web/js/{node-acl-add-dialog-COL4myAw.js → node-acl-add-dialog-8qtV5Lx-.js} +1 -1
- package/dist/web/js/{node-binding-dialog-_Odw2AGk.js → node-binding-dialog-B75AcGPb.js} +1 -1
- package/dist/web/js/{node-label-dialog-D6hA1gVX.js → node-label-dialog-QxhxDvAP.js} +1 -1
- package/dist/web/js/settings-dialog-CeBkVje3.js +980 -0
- package/package.json +4 -4
- package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +64 -3
- package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +62 -4
- package/src/components/dialogs/fabric-label-dialog/fabric-label-dialog.ts +109 -0
- package/src/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.ts +16 -0
- package/src/components/dialogs/settings/settings-dialog.ts +526 -118
- package/src/pages/cluster-commands/base-cluster-commands.ts +11 -0
- package/src/pages/cluster-commands/clusters/access-control-commands.ts +21 -7
- package/src/pages/cluster-commands/clusters/avsum-commands.ts +34 -13
- package/src/pages/cluster-commands/clusters/basic-information-commands.ts +17 -12
- package/src/pages/cluster-commands/clusters/binding-commands.ts +26 -10
- package/src/pages/cluster-commands/clusters/icd-management-commands.ts +551 -0
- package/src/pages/cluster-commands/index.ts +1 -0
- package/src/pages/components/node-details.ts +46 -2
- package/src/pages/components/server-details.ts +55 -2
- package/src/pages/matter-cluster-view.ts +4 -3
- package/src/pages/matter-network-view.ts +25 -0
- package/src/pages/matter-server-view.ts +37 -1
- package/src/pages/network/border-router-store.ts +51 -4
- package/src/pages/network/network-details.ts +379 -3
- package/src/pages/network/network-types.ts +19 -193
- package/src/pages/network/network-utils.ts +125 -803
- package/src/pages/network/thread-graph.ts +241 -13
- package/src/util/duration.ts +24 -0
- package/src/util/icd.ts +197 -0
- package/dist/web/js/fire_event-BEdDUG4R.js +0 -168
- package/dist/web/js/settings-dialog-DUmZpfSq.js +0 -606
package/README.md
CHANGED
|
@@ -111,13 +111,42 @@ A connection with neither tag is bidirectional: both nodes see each other.
|
|
|
111
111
|
|
|
112
112
|
#### Data Sources
|
|
113
113
|
|
|
114
|
-
Thread devices maintain two tables:
|
|
114
|
+
Thread devices itself maintain two tables:
|
|
115
115
|
|
|
116
116
|
1. **Neighbor Table** (0/53/7): Direct RF neighbors visible to the device. All Thread devices have this.
|
|
117
117
|
2. **Route Table** (0/53/8): Routing paths to other nodes. Only routers maintain this table.
|
|
118
118
|
|
|
119
119
|
The visualization combines both tables directly from the devices to provide the most complete picture of your network.
|
|
120
120
|
|
|
121
|
+
Additionally, if REST-APIs or network credentials are available on the Matter Server we also query the Border routers directly to get more detailed information (see below) and combine it with the device tables.
|
|
122
|
+
|
|
123
|
+
### Thread Diagnostics from Border Routers
|
|
124
|
+
|
|
125
|
+
Beyond what your own commissioned devices report, the dashboard can build a much fuller Thread mesh by
|
|
126
|
+
asking the Thread **Border Routers** directly — including routers and children that aren't on your
|
|
127
|
+
Matter fabric. Border Routers are discovered automatically on your LAN; querying their diagnostics
|
|
128
|
+
needs a way into each Thread network:
|
|
129
|
+
|
|
130
|
+
- **Store the network's credentials.** Open **Settings** (cog icon) and add the Thread network's
|
|
131
|
+
operational dataset. A dataset that includes the network key lets the server query that network's
|
|
132
|
+
Border Routers directly (over Thread's MeshCoP protocol). You can store **several networks** — one
|
|
133
|
+
entry per Thread network (e.g. your own, plus a Home Assistant, Apple, or Google network you also
|
|
134
|
+
have the dataset for) — and the dashboard will show each network's mesh.
|
|
135
|
+
- **Some Border Routers need no credentials.** OpenThread-based Border Routers (e.g. the Home
|
|
136
|
+
Assistant add-on) expose a local API the dashboard can read directly, so their network populates
|
|
137
|
+
even without a stored dataset.
|
|
138
|
+
- Networks with neither a stored dataset nor a readable Border Router are listed but show no per-node
|
|
139
|
+
diagnostics.
|
|
140
|
+
|
|
141
|
+
**First view is live, then cached.** The first time you open the Thread network view in a session, the
|
|
142
|
+
data is collected live from the Border Routers. This takes a moment: nodes **pop in progressively over
|
|
143
|
+
about 20 seconds** as each responds — so an initially sparse mesh filling itself out is normal, not an
|
|
144
|
+
error. Once collected, results are **cached** and shown instantly on later views. Use the refresh
|
|
145
|
+
button to re-collect the latest data on demand.
|
|
146
|
+
|
|
147
|
+
This whole subsystem is optional and can be turned off by the server operator (`--disable-thread-diagnostics`);
|
|
148
|
+
Matter-over-Thread commissioning still works either way.
|
|
149
|
+
|
|
121
150
|
### Update Connections
|
|
122
151
|
|
|
123
152
|
Click the refresh button in the device details panel to update network data:
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import "@material/web/progress/circular-progress";
|
|
7
|
+
import "@material/web/select/outlined-select";
|
|
8
|
+
import "@material/web/select/select-option";
|
|
7
9
|
import "@material/web/textfield/outlined-text-field";
|
|
8
10
|
import { MatterClient } from "@matter-server/ws-client";
|
|
9
11
|
import { LitElement } from "lit";
|
|
@@ -12,10 +14,14 @@ export declare class CommissionNodeThread extends LitElement {
|
|
|
12
14
|
static styles: import("lit").CSSResult;
|
|
13
15
|
client: MatterClient;
|
|
14
16
|
private _loading;
|
|
17
|
+
private _credentials;
|
|
18
|
+
private _selectedId;
|
|
15
19
|
private _datasetField;
|
|
16
20
|
private _pairingCodeField;
|
|
17
21
|
private _pairingFocused;
|
|
18
22
|
private _credsFocused;
|
|
23
|
+
connectedCallback(): void;
|
|
24
|
+
private _loadCredentials;
|
|
19
25
|
protected updated(): void;
|
|
20
26
|
private _maybeAutofocus;
|
|
21
27
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commission-node-thread.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/commission-node-dialog/commission-node-thread.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,0CAA0C,CAAC;AAClD,OAAO,6CAA6C,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"commission-node-thread.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/commission-node-dialog/commission-node-thread.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,0CAA0C,CAAC;AAClD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,6CAA6C,CAAC;AAErD,OAAO,EAAyB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAMrD,OAAO,sBAAsB,CAAC;AAE9B,qBACa,oBAAqB,SAAQ,UAAU;IAChD,OAAgB,MAAM,0BA8BpB;IAGK,MAAM,EAAG,YAAY,CAAC;IAG7B,OAAO,CAAC,QAAQ,CAAkB;IAGlC,OAAO,CAAC,YAAY,CAAsC;IAG1D,OAAO,CAAC,WAAW,CAAqB;IAGxC,OAAO,CAAC,aAAa,CAAuB;IAE5C,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;IAErB,iBAAiB,IAAI,IAAI,CAGjC;YAEa,gBAAgB;IAgB9B,UAAmB,OAAO,IAAI,IAAI,CAEjC;YAEa,eAAe;IAY7B,UAAmB,MAAM,yCAuDxB;YAEa,iBAAiB;YAuBjB,eAAe;CAgBhC;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,aAAa;QACnB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC7C;CACJ"}
|
|
@@ -15,6 +15,8 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
15
15
|
*/
|
|
16
16
|
import { consume } from "@lit/context";
|
|
17
17
|
import "@material/web/progress/circular-progress";
|
|
18
|
+
import "@material/web/select/outlined-select";
|
|
19
|
+
import "@material/web/select/select-option";
|
|
18
20
|
import "@material/web/textfield/outlined-text-field";
|
|
19
21
|
import { mdiAccessPoint } from "@mdi/js";
|
|
20
22
|
import { LitElement, css, html, nothing } from "lit";
|
|
@@ -28,9 +30,27 @@ let CommissionNodeThread = class extends LitElement {
|
|
|
28
30
|
constructor() {
|
|
29
31
|
super(...arguments);
|
|
30
32
|
this._loading = false;
|
|
33
|
+
this._credentials = null;
|
|
34
|
+
this._selectedId = "default";
|
|
31
35
|
this._pairingFocused = false;
|
|
32
36
|
this._credsFocused = false;
|
|
33
37
|
}
|
|
38
|
+
connectedCallback() {
|
|
39
|
+
super.connectedCallback();
|
|
40
|
+
void this._loadCredentials().catch((err) => console.warn("Failed to load credentials:", err));
|
|
41
|
+
}
|
|
42
|
+
async _loadCredentials() {
|
|
43
|
+
if (this._credentials !== null) return;
|
|
44
|
+
if (!this.client || this.client.serverInfo.schema_version < 12) return;
|
|
45
|
+
try {
|
|
46
|
+
this._credentials = await this.client.getAllCredentials();
|
|
47
|
+
if (!(this.client.serverInfo.thread_credentials_set ?? false)) {
|
|
48
|
+
const firstNamed = this._credentials.thread.find((e) => e.id !== "default");
|
|
49
|
+
if (firstNamed !== void 0) this._selectedId = firstNamed.id;
|
|
50
|
+
}
|
|
51
|
+
} catch {
|
|
52
|
+
}
|
|
53
|
+
}
|
|
34
54
|
updated() {
|
|
35
55
|
void this._maybeAutofocus().catch((err) => console.warn("Autofocus failed:", err));
|
|
36
56
|
}
|
|
@@ -46,7 +66,10 @@ let CommissionNodeThread = class extends LitElement {
|
|
|
46
66
|
}
|
|
47
67
|
}
|
|
48
68
|
render() {
|
|
49
|
-
|
|
69
|
+
const defaultSet = this.client.serverInfo.thread_credentials_set ?? false;
|
|
70
|
+
const threadList = this._credentials?.thread ?? [];
|
|
71
|
+
const selectable = threadList.filter((e) => e.id !== "default" || defaultSet);
|
|
72
|
+
if (selectable.length === 0) {
|
|
50
73
|
return html`<md-outlined-text-field
|
|
51
74
|
label="Thread dataset"
|
|
52
75
|
.disabled="${this._loading}"
|
|
@@ -59,6 +82,7 @@ let CommissionNodeThread = class extends LitElement {
|
|
|
59
82
|
>Set Thread Dataset</md-outlined-button
|
|
60
83
|
>${this._loading ? html` <md-circular-progress indeterminate></md-circular-progress> ` : nothing}`;
|
|
61
84
|
}
|
|
85
|
+
const showPicker = selectable.length > 1;
|
|
62
86
|
return html`<div class="cred-chip">
|
|
63
87
|
<ha-svg-icon .path=${mdiAccessPoint}></ha-svg-icon>
|
|
64
88
|
<span>Thread network set</span>
|
|
@@ -67,6 +91,24 @@ let CommissionNodeThread = class extends LitElement {
|
|
|
67
91
|
Edit in Settings
|
|
68
92
|
</button>
|
|
69
93
|
</div>
|
|
94
|
+
${showPicker ? html`<md-outlined-select
|
|
95
|
+
label="Thread network"
|
|
96
|
+
.disabled=${this._loading}
|
|
97
|
+
.value=${this._selectedId}
|
|
98
|
+
@change=${(e) => {
|
|
99
|
+
this._selectedId = e.target.value;
|
|
100
|
+
}}
|
|
101
|
+
>
|
|
102
|
+
${selectable.map(
|
|
103
|
+
(entry) => html`
|
|
104
|
+
<md-select-option value=${entry.id}>
|
|
105
|
+
<div slot="headline">${entry.networkName || entry.id}</div>
|
|
106
|
+
</md-select-option>
|
|
107
|
+
`
|
|
108
|
+
)}
|
|
109
|
+
</md-outlined-select>
|
|
110
|
+
<br />
|
|
111
|
+
<br />` : nothing}
|
|
70
112
|
<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
|
|
71
113
|
<br />
|
|
72
114
|
<br />
|
|
@@ -97,9 +139,14 @@ let CommissionNodeThread = class extends LitElement {
|
|
|
97
139
|
}
|
|
98
140
|
}
|
|
99
141
|
async _commissionNode() {
|
|
142
|
+
if (!this._pairingCodeField.value) {
|
|
143
|
+
showAlertDialog({ title: "Validation error", text: "Pairing code is required" });
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
100
146
|
this._loading = true;
|
|
101
147
|
try {
|
|
102
|
-
const
|
|
148
|
+
const opts = this._selectedId !== "default" ? { threadDatasetId: this._selectedId } : void 0;
|
|
149
|
+
const node = await this.client.commissionWithCode(this._pairingCodeField.value, false, opts);
|
|
103
150
|
fireEvent(this, "node-commissioned", node);
|
|
104
151
|
} catch (err) {
|
|
105
152
|
showAlertDialog({ title: "Error commissioning node", text: err.message });
|
|
@@ -146,6 +193,12 @@ __decorateClass([
|
|
|
146
193
|
__decorateClass([
|
|
147
194
|
state()
|
|
148
195
|
], CommissionNodeThread.prototype, "_loading", 2);
|
|
196
|
+
__decorateClass([
|
|
197
|
+
state()
|
|
198
|
+
], CommissionNodeThread.prototype, "_credentials", 2);
|
|
199
|
+
__decorateClass([
|
|
200
|
+
state()
|
|
201
|
+
], CommissionNodeThread.prototype, "_selectedId", 2);
|
|
149
202
|
__decorateClass([
|
|
150
203
|
query("md-outlined-text-field[label='Thread dataset']")
|
|
151
204
|
], CommissionNodeThread.prototype, "_datasetField", 2);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/dialogs/commission-node-dialog/commission-node-thread.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,eAAe;AACxB,OAAO;AACP,OAAO;AAGP,SAAS,sBAAsB;AAC/B,SAAS,YAAY,KAAK,MAAM,eAAe;AAC/C,SAAS,eAAe,UAAU,OAAO,aAAa;AACtD,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,OAAO;AAGA,IAAM,uBAAN,cAAmC,WAAW;AAAA,EAA9C;AAAA;AAqCH,SAAQ,WAAoB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import "@material/web/progress/circular-progress";
|
|
7
|
+
import "@material/web/select/outlined-select";
|
|
8
|
+
import "@material/web/select/select-option";
|
|
7
9
|
import "@material/web/textfield/outlined-text-field";
|
|
8
10
|
import { MatterClient } from "@matter-server/ws-client";
|
|
9
11
|
import { LitElement } from "lit";
|
|
@@ -12,11 +14,15 @@ export declare class CommissionNodeWifi extends LitElement {
|
|
|
12
14
|
static styles: import("lit").CSSResult;
|
|
13
15
|
client: MatterClient;
|
|
14
16
|
private _loading;
|
|
17
|
+
private _credentials;
|
|
18
|
+
private _selectedId;
|
|
15
19
|
private _ssidField;
|
|
16
20
|
private _passwordField;
|
|
17
21
|
private _pairingCodeField;
|
|
18
22
|
private _pairingFocused;
|
|
19
23
|
private _credsFocused;
|
|
24
|
+
connectedCallback(): void;
|
|
25
|
+
private _loadCredentials;
|
|
20
26
|
protected updated(): void;
|
|
21
27
|
private _maybeAutofocus;
|
|
22
28
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"commission-node-wifi.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/commission-node-dialog/commission-node-wifi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,0CAA0C,CAAC;AAClD,OAAO,6CAA6C,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"commission-node-wifi.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/commission-node-dialog/commission-node-wifi.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,0CAA0C,CAAC;AAClD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,6CAA6C,CAAC;AAErD,OAAO,EAAyB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAE,UAAU,EAAsB,MAAM,KAAK,CAAC;AAMrD,OAAO,sBAAsB,CAAC;AAE9B,qBACa,kBAAmB,SAAQ,UAAU;IAC9C,OAAgB,MAAM,0BA8BpB;IAGK,MAAM,EAAG,YAAY,CAAC;IAG7B,OAAO,CAAC,QAAQ,CAAkB;IAGlC,OAAO,CAAC,YAAY,CAAsC;IAG1D,OAAO,CAAC,WAAW,CAAqB;IAGxC,OAAO,CAAC,UAAU,CAAuB;IAEzC,OAAO,CAAC,cAAc,CAAuB;IAE7C,OAAO,CAAC,iBAAiB,CAAuB;IAEhD,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,aAAa,CAAS;IAErB,iBAAiB,IAAI,IAAI,CAGjC;YAEa,gBAAgB;IAgB9B,UAAmB,OAAO,IAAI,IAAI,CAEjC;YAEa,eAAe;IAY7B,UAAmB,MAAM,yCA0DxB;YAEa,mBAAmB;YAqBnB,eAAe;CAgBhC;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,aAAa;QACnB,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KAC7C;CACJ"}
|
|
@@ -15,6 +15,8 @@ var __decorateClass = (decorators, target, key, kind) => {
|
|
|
15
15
|
*/
|
|
16
16
|
import { consume } from "@lit/context";
|
|
17
17
|
import "@material/web/progress/circular-progress";
|
|
18
|
+
import "@material/web/select/outlined-select";
|
|
19
|
+
import "@material/web/select/select-option";
|
|
18
20
|
import "@material/web/textfield/outlined-text-field";
|
|
19
21
|
import { mdiWifi } from "@mdi/js";
|
|
20
22
|
import { LitElement, css, html, nothing } from "lit";
|
|
@@ -28,9 +30,27 @@ let CommissionNodeWifi = class extends LitElement {
|
|
|
28
30
|
constructor() {
|
|
29
31
|
super(...arguments);
|
|
30
32
|
this._loading = false;
|
|
33
|
+
this._credentials = null;
|
|
34
|
+
this._selectedId = "default";
|
|
31
35
|
this._pairingFocused = false;
|
|
32
36
|
this._credsFocused = false;
|
|
33
37
|
}
|
|
38
|
+
connectedCallback() {
|
|
39
|
+
super.connectedCallback();
|
|
40
|
+
void this._loadCredentials().catch((err) => console.warn("Failed to load credentials:", err));
|
|
41
|
+
}
|
|
42
|
+
async _loadCredentials() {
|
|
43
|
+
if (this._credentials !== null) return;
|
|
44
|
+
if (!this.client || this.client.serverInfo.schema_version < 12) return;
|
|
45
|
+
try {
|
|
46
|
+
this._credentials = await this.client.getAllCredentials();
|
|
47
|
+
if (!(this.client.serverInfo.wifi_credentials_set ?? false)) {
|
|
48
|
+
const firstNamed = this._credentials.wifi.find((e) => e.id !== "default");
|
|
49
|
+
if (firstNamed !== void 0) this._selectedId = firstNamed.id;
|
|
50
|
+
}
|
|
51
|
+
} catch {
|
|
52
|
+
}
|
|
53
|
+
}
|
|
34
54
|
updated() {
|
|
35
55
|
void this._maybeAutofocus().catch((err) => console.warn("Autofocus failed:", err));
|
|
36
56
|
}
|
|
@@ -46,7 +66,10 @@ let CommissionNodeWifi = class extends LitElement {
|
|
|
46
66
|
}
|
|
47
67
|
}
|
|
48
68
|
render() {
|
|
49
|
-
|
|
69
|
+
const defaultSet = this.client.serverInfo.wifi_credentials_set ?? false;
|
|
70
|
+
const wifiList = this._credentials?.wifi ?? [];
|
|
71
|
+
const selectable = wifiList.filter((e) => e.id !== "default" || defaultSet);
|
|
72
|
+
if (selectable.length === 0) {
|
|
50
73
|
return html`<md-outlined-text-field
|
|
51
74
|
label="SSID"
|
|
52
75
|
.disabled="${this._loading}"
|
|
@@ -61,14 +84,34 @@ let CommissionNodeWifi = class extends LitElement {
|
|
|
61
84
|
>Set WiFi Credentials</md-outlined-button
|
|
62
85
|
>${this._loading ? html`<md-circular-progress indeterminate></md-circular-progress>` : nothing}`;
|
|
63
86
|
}
|
|
87
|
+
const showPicker = selectable.length > 1;
|
|
88
|
+
const chipLabel = defaultSet ? this.client.serverInfo.wifi_ssid ?? "network set" : "network set";
|
|
64
89
|
return html`<div class="cred-chip">
|
|
65
90
|
<ha-svg-icon .path=${mdiWifi}></ha-svg-icon>
|
|
66
|
-
<span>WiFi: ${
|
|
91
|
+
<span>WiFi: ${chipLabel}</span>
|
|
67
92
|
<span class="sep">·</span>
|
|
68
93
|
<button class="edit-link" @click=${() => fireEvent(this, "request-settings", {})}>
|
|
69
94
|
Edit in Settings
|
|
70
95
|
</button>
|
|
71
96
|
</div>
|
|
97
|
+
${showPicker ? html`<md-outlined-select
|
|
98
|
+
label="WiFi network"
|
|
99
|
+
.disabled=${this._loading}
|
|
100
|
+
.value=${this._selectedId}
|
|
101
|
+
@change=${(e) => {
|
|
102
|
+
this._selectedId = e.target.value;
|
|
103
|
+
}}
|
|
104
|
+
>
|
|
105
|
+
${selectable.map(
|
|
106
|
+
(entry) => html`
|
|
107
|
+
<md-select-option value=${entry.id}>
|
|
108
|
+
<div slot="headline">${entry.ssid || entry.id}</div>
|
|
109
|
+
</md-select-option>
|
|
110
|
+
`
|
|
111
|
+
)}
|
|
112
|
+
</md-outlined-select>
|
|
113
|
+
<br />
|
|
114
|
+
<br />` : nothing}
|
|
72
115
|
<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
|
|
73
116
|
<br />
|
|
74
117
|
<br />
|
|
@@ -103,7 +146,8 @@ let CommissionNodeWifi = class extends LitElement {
|
|
|
103
146
|
return;
|
|
104
147
|
}
|
|
105
148
|
this._loading = true;
|
|
106
|
-
const
|
|
149
|
+
const opts = this._selectedId !== "default" ? { wifiCredentialsId: this._selectedId } : void 0;
|
|
150
|
+
const node = await this.client.commissionWithCode(this._pairingCodeField.value, false, opts);
|
|
107
151
|
fireEvent(this, "node-commissioned", node);
|
|
108
152
|
} catch (err) {
|
|
109
153
|
showAlertDialog({ title: "Error commissioning node", text: err.message });
|
|
@@ -150,6 +194,12 @@ __decorateClass([
|
|
|
150
194
|
__decorateClass([
|
|
151
195
|
state()
|
|
152
196
|
], CommissionNodeWifi.prototype, "_loading", 2);
|
|
197
|
+
__decorateClass([
|
|
198
|
+
state()
|
|
199
|
+
], CommissionNodeWifi.prototype, "_credentials", 2);
|
|
200
|
+
__decorateClass([
|
|
201
|
+
state()
|
|
202
|
+
], CommissionNodeWifi.prototype, "_selectedId", 2);
|
|
153
203
|
__decorateClass([
|
|
154
204
|
query("md-outlined-text-field[label='SSID']")
|
|
155
205
|
], CommissionNodeWifi.prototype, "_ssidField", 2);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/components/dialogs/commission-node-dialog/commission-node-wifi.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,SAAS,eAAe;AACxB,OAAO;AACP,OAAO;AAGP,SAAS,eAAe;AACxB,SAAS,YAAY,KAAK,MAAM,eAAe;AAC/C,SAAS,eAAe,UAAU,OAAO,aAAa;AACtD,SAAS,qBAAqB;AAC9B,SAAS,mBAAmB;AAC5B,SAAS,iBAAiB;AAC1B,SAAS,uBAAuB;AAChC,OAAO;AAGA,IAAM,qBAAN,cAAiC,WAAW;AAAA,EAA5C;AAAA;AAqCH,SAAQ,WAAoB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import "@material/web/button/text-button";
|
|
7
|
+
import "@material/web/dialog/dialog";
|
|
8
|
+
import "@material/web/textfield/outlined-text-field";
|
|
9
|
+
import type { MatterClient } from "@matter-server/ws-client";
|
|
10
|
+
import { LitElement } from "lit";
|
|
11
|
+
export declare class FabricLabelDialog extends LitElement {
|
|
12
|
+
client: MatterClient;
|
|
13
|
+
currentLabel: string;
|
|
14
|
+
onSaved?: () => void;
|
|
15
|
+
private _fabricLabel;
|
|
16
|
+
private _saving;
|
|
17
|
+
protected firstUpdated(): void;
|
|
18
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
19
|
+
private _handleInput;
|
|
20
|
+
private _close;
|
|
21
|
+
private _handleClosed;
|
|
22
|
+
private _save;
|
|
23
|
+
}
|
|
24
|
+
declare global {
|
|
25
|
+
interface HTMLElementTagNameMap {
|
|
26
|
+
"fabric-label-dialog": FabricLabelDialog;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=fabric-label-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fabric-label-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/fabric-label-dialog/fabric-label-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AACrC,OAAO,6CAA6C,CAAC;AAGrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAQ,UAAU,EAAE,MAAM,KAAK,CAAC;AAOvC,qBACa,iBAAkB,SAAQ,UAAU;IAEtC,MAAM,EAAG,YAAY,CAAC;IAGtB,YAAY,EAAE,MAAM,CAAM;IAG1B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAG5B,OAAO,CAAC,YAAY,CAAc;IAGlC,OAAO,CAAC,OAAO,CAAkB;IAEjC,UAAmB,YAAY,SAE9B;IAED,UAAmB,MAAM,yCAqBxB;IAED,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;YAIP,KAAK;CA2BtB;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __decorateClass = (decorators, target, key, kind) => {
|
|
4
|
+
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
5
|
+
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
6
|
+
if (decorator = decorators[i])
|
|
7
|
+
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
8
|
+
if (kind && result) __defProp(target, key, result);
|
|
9
|
+
return result;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* @license
|
|
13
|
+
* Copyright 2026 Open Home Foundation
|
|
14
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
15
|
+
*/
|
|
16
|
+
import "@material/web/button/text-button";
|
|
17
|
+
import "@material/web/dialog/dialog";
|
|
18
|
+
import "@material/web/textfield/outlined-text-field";
|
|
19
|
+
import { html, LitElement } from "lit";
|
|
20
|
+
import { customElement, property, state } from "lit/decorators.js";
|
|
21
|
+
import { preventDefault } from "../../../util/prevent_default.js";
|
|
22
|
+
import { showAlertDialog } from "../../dialog-box/show-dialog-box.js";
|
|
23
|
+
const MAX_FABRIC_LABEL_LENGTH = 32;
|
|
24
|
+
let FabricLabelDialog = class extends LitElement {
|
|
25
|
+
constructor() {
|
|
26
|
+
super(...arguments);
|
|
27
|
+
this.currentLabel = "";
|
|
28
|
+
this._fabricLabel = "";
|
|
29
|
+
this._saving = false;
|
|
30
|
+
}
|
|
31
|
+
firstUpdated() {
|
|
32
|
+
this._fabricLabel = this.currentLabel;
|
|
33
|
+
}
|
|
34
|
+
render() {
|
|
35
|
+
return html`
|
|
36
|
+
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
37
|
+
<div slot="headline">Edit Fabric Label</div>
|
|
38
|
+
<div slot="content">
|
|
39
|
+
<md-outlined-text-field
|
|
40
|
+
label="Fabric Label"
|
|
41
|
+
.value=${this._fabricLabel}
|
|
42
|
+
@input=${this._handleInput}
|
|
43
|
+
maxlength=${MAX_FABRIC_LABEL_LENGTH}
|
|
44
|
+
?disabled=${this._saving}
|
|
45
|
+
supporting-text="Max ${MAX_FABRIC_LABEL_LENGTH} characters. Applies to the whole fabric."
|
|
46
|
+
style="width: 100%; margin-top: 8px;"
|
|
47
|
+
></md-outlined-text-field>
|
|
48
|
+
</div>
|
|
49
|
+
<div slot="actions">
|
|
50
|
+
<md-text-button @click=${this._close} ?disabled=${this._saving}>Cancel</md-text-button>
|
|
51
|
+
<md-text-button @click=${this._save} ?disabled=${this._saving}>Save</md-text-button>
|
|
52
|
+
</div>
|
|
53
|
+
</md-dialog>
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
_handleInput(e) {
|
|
57
|
+
this._fabricLabel = e.target.value;
|
|
58
|
+
}
|
|
59
|
+
_close() {
|
|
60
|
+
this.shadowRoot.querySelector("md-dialog").close();
|
|
61
|
+
}
|
|
62
|
+
_handleClosed() {
|
|
63
|
+
this.parentNode.removeChild(this);
|
|
64
|
+
}
|
|
65
|
+
async _save() {
|
|
66
|
+
this._saving = true;
|
|
67
|
+
try {
|
|
68
|
+
await this.client.setDefaultFabricLabel(this._fabricLabel);
|
|
69
|
+
const expected = (this._fabricLabel.trim() || "HomeAssistant").substring(0, MAX_FABRIC_LABEL_LENGTH);
|
|
70
|
+
const current = await this.client.getFabricLabel();
|
|
71
|
+
if (current !== expected) {
|
|
72
|
+
showAlertDialog({
|
|
73
|
+
title: "Failed to set fabric label",
|
|
74
|
+
text: "Could not set the fabric label \u2014 see the server log for details."
|
|
75
|
+
});
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
this.onSaved?.();
|
|
79
|
+
this._close();
|
|
80
|
+
} catch (error) {
|
|
81
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
82
|
+
showAlertDialog({
|
|
83
|
+
title: "Failed to set fabric label",
|
|
84
|
+
text: errorMessage
|
|
85
|
+
});
|
|
86
|
+
} finally {
|
|
87
|
+
this._saving = false;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
__decorateClass([
|
|
92
|
+
property({ attribute: false })
|
|
93
|
+
], FabricLabelDialog.prototype, "client", 2);
|
|
94
|
+
__decorateClass([
|
|
95
|
+
property({ attribute: false })
|
|
96
|
+
], FabricLabelDialog.prototype, "currentLabel", 2);
|
|
97
|
+
__decorateClass([
|
|
98
|
+
property({ attribute: false })
|
|
99
|
+
], FabricLabelDialog.prototype, "onSaved", 2);
|
|
100
|
+
__decorateClass([
|
|
101
|
+
state()
|
|
102
|
+
], FabricLabelDialog.prototype, "_fabricLabel", 2);
|
|
103
|
+
__decorateClass([
|
|
104
|
+
state()
|
|
105
|
+
], FabricLabelDialog.prototype, "_saving", 2);
|
|
106
|
+
FabricLabelDialog = __decorateClass([
|
|
107
|
+
customElement("fabric-label-dialog")
|
|
108
|
+
], FabricLabelDialog);
|
|
109
|
+
export {
|
|
110
|
+
FabricLabelDialog
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=fabric-label-dialog.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dialogs/fabric-label-dialog/fabric-label-dialog.ts"],
|
|
4
|
+
"mappings": ";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,OAAO;AACP,OAAO;AACP,OAAO;AAIP,SAAS,MAAM,kBAAkB;AACjC,SAAS,eAAe,UAAU,aAAa;AAC/C,SAAS,sBAAsB;AAC/B,SAAS,uBAAuB;AAEhC,MAAM,0BAA0B;AAGzB,IAAM,oBAAN,cAAgC,WAAW;AAAA,EAA3C;AAAA;AAKH,SAAO,eAAuB;AAM9B,SAAQ,eAAuB;AAG/B,SAAQ,UAAmB;AAAA;AAAA,EAER,eAAe;AAC9B,SAAK,eAAe,KAAK;AAAA,EAC7B;AAAA,EAEmB,SAAS;AACxB,WAAO;AAAA,sCACuB,cAAc,YAAY,KAAK,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,iCAKjD,KAAK,YAAY;AAAA,iCACjB,KAAK,YAAY;AAAA,oCACd,uBAAuB;AAAA,oCACvB,KAAK,OAAO;AAAA,+CACD,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,6CAKzB,KAAK,MAAM,cAAc,KAAK,OAAO;AAAA,6CACrC,KAAK,KAAK,cAAc,KAAK,OAAO;AAAA;AAAA;AAAA;AAAA,EAI7E;AAAA,EAEQ,aAAa,GAAU;AAC3B,SAAK,eAAgB,EAAE,OAA+B;AAAA,EAC1D;AAAA,EAEQ,SAAS;AACb,SAAK,WAAY,cAAwB,WAAW,EAAG,MAAM;AAAA,EACjE;AAAA,EAEQ,gBAAgB;AACpB,SAAK,WAAY,YAAY,IAAI;AAAA,EACrC;AAAA,EAEA,MAAc,QAAQ;AAClB,SAAK,UAAU;AACf,QAAI;AACA,YAAM,KAAK,OAAO,sBAAsB,KAAK,YAAY;AAGzD,YAAM,YAAY,KAAK,aAAa,KAAK,KAAK,iBAAiB,UAAU,GAAG,uBAAuB;AACnG,YAAM,UAAU,MAAM,KAAK,OAAO,eAAe;AACjD,UAAI,YAAY,UAAU;AACtB,wBAAgB;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,QACV,CAAC;AACD;AAAA,MACJ;AACA,WAAK,UAAU;AACf,WAAK,OAAO;AAAA,IAChB,SAAS,OAAO;AACZ,YAAM,eAAe,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC1E,sBAAgB;AAAA,QACZ,OAAO;AAAA,QACP,MAAM;AAAA,MACV,CAAC;AAAA,IACL,UAAE;AACE,WAAK,UAAU;AAAA,IACnB;AAAA,EACJ;AACJ;AAhFW;AAAA,EADN,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GADrB,kBAEF;AAGA;AAAA,EADN,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAJrB,kBAKF;AAGA;AAAA,EADN,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,GAPrB,kBAQF;AAGC;AAAA,EADP,MAAM;AAAA,GAVE,kBAWD;AAGA;AAAA,EADP,MAAM;AAAA,GAbE,kBAcD;AAdC,oBAAN;AAAA,EADN,cAAc,qBAAqB;AAAA,GACvB;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { MatterClient } from "@matter-server/ws-client";
|
|
7
|
+
export declare const showFabricLabelDialog: (client: MatterClient, currentLabel: string, onSaved?: () => void) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=show-fabric-label-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-fabric-label-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,eAAO,MAAM,qBAAqB,WAAkB,YAAY,gBAAgB,MAAM,YAAY,MAAM,IAAI,kBAO3G,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const showFabricLabelDialog = async (client, currentLabel, onSaved) => {
|
|
7
|
+
await import("./fabric-label-dialog.js");
|
|
8
|
+
const dialog = document.createElement("fabric-label-dialog");
|
|
9
|
+
dialog.client = client;
|
|
10
|
+
dialog.currentLabel = currentLabel;
|
|
11
|
+
dialog.onSaved = onSaved;
|
|
12
|
+
document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
showFabricLabelDialog
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=show-fabric-label-dialog.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dialogs/fabric-label-dialog/show-fabric-label-dialog.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,MAAM,wBAAwB,OAAO,QAAsB,cAAsB,YAAyB;AAC7G,QAAM,OAAO,0BAA0B;AACvC,QAAM,SAAS,SAAS,cAAc,qBAAqB;AAC3D,SAAO,SAAS;AAChB,SAAO,eAAe;AACtB,SAAO,UAAU;AACjB,WAAS,cAAc,sBAAsB,GAAG,WAAW,YAAY,MAAM;AACjF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -23,23 +23,51 @@ export declare class SettingsDialog extends LitElement {
|
|
|
23
23
|
private _expandedRow;
|
|
24
24
|
private _credLoading;
|
|
25
25
|
private _showPassword;
|
|
26
|
+
private _creds?;
|
|
27
|
+
private _wifiEditId;
|
|
28
|
+
private _wifiAdding;
|
|
29
|
+
private _threadEditId;
|
|
30
|
+
private _threadAdding;
|
|
31
|
+
private _credError;
|
|
26
32
|
private _wifiSsidField;
|
|
27
33
|
private _wifiPasswordField;
|
|
34
|
+
private _wifiIdField?;
|
|
28
35
|
private _threadDatasetField;
|
|
36
|
+
private _threadIdField?;
|
|
37
|
+
private get _supportsCredentialLists();
|
|
29
38
|
connectedCallback(): void;
|
|
30
39
|
disconnectedCallback(): void;
|
|
31
40
|
firstUpdated(): void;
|
|
41
|
+
private _loadCredentials;
|
|
32
42
|
private _close;
|
|
33
43
|
private _handleClosed;
|
|
34
44
|
private _onDevToggle;
|
|
35
45
|
private _copyDevLink;
|
|
36
46
|
private _toggleExpand;
|
|
47
|
+
private _resetCredForms;
|
|
37
48
|
private _cancelCred;
|
|
38
49
|
private _togglePassword;
|
|
50
|
+
private _editWifi;
|
|
51
|
+
private _addWifi;
|
|
52
|
+
private _cancelWifiForm;
|
|
53
|
+
private _editThread;
|
|
54
|
+
private _addThread;
|
|
55
|
+
private _cancelThreadForm;
|
|
56
|
+
/** Mirror the server's id validation. Returns the trimmed id, or null after setting an inline error. */
|
|
57
|
+
private _validateNewCredId;
|
|
39
58
|
private _saveWifi;
|
|
40
59
|
private _removeWifi;
|
|
41
60
|
private _saveThread;
|
|
42
61
|
private _removeThread;
|
|
62
|
+
private _renderCredError;
|
|
63
|
+
private _renderWifiList;
|
|
64
|
+
private _renderWifiEntry;
|
|
65
|
+
private _renderWifiForm;
|
|
66
|
+
private _renderThreadList;
|
|
67
|
+
private _renderThreadEntry;
|
|
68
|
+
private _renderThreadForm;
|
|
69
|
+
private _renderLegacyWifi;
|
|
70
|
+
private _renderLegacyThread;
|
|
43
71
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
44
72
|
static styles: import("lit").CSSResult;
|
|
45
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settings-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/settings/settings-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,6BAA6B,CAAC;AAIrC,OAAO,6CAA6C,CAAC;AAErD,OAAO,
|
|
1
|
+
{"version":3,"file":"settings-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/settings/settings-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,6BAA6B,CAAC;AACrC,OAAO,+BAA+B,CAAC;AACvC,OAAO,sCAAsC,CAAC;AAC9C,OAAO,6BAA6B,CAAC;AAIrC,OAAO,6CAA6C,CAAC;AAErD,OAAO,EAAyB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,EAAa,UAAU,EAAW,MAAM,KAAK,CAAC;AAMrD,OAAO,oCAAoC,CAAC;AAE5C,OAAO,wBAAwB,CAAC;AAEhC,qBACa,cAAe,SAAQ,UAAU;IAEnC,MAAM,EAAG,YAAY,CAAC;IAG7B,SAAS,CAAC,KAAK,SAAK;IAEX,OAAO,CAAC,QAAQ,CAAyB;IAElD,OAAO,CAAC,eAAe,CAAC,CAAa;IAEE,eAAe,CAAC,EAAE,MAAM,CAAC;IAEvD,OAAO,CAAC,YAAY,CAAkC;IACtD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAS;IAE9B,OAAO,CAAC,MAAM,CAAC,CAAwB;IAEvC,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAuB;IAExB,OAAO,CAAC,cAAc,CAAuB;IACzC,OAAO,CAAC,kBAAkB,CAAuB;IACvD,OAAO,CAAC,YAAY,CAAC,CAAsB;IACpC,OAAO,CAAC,mBAAmB,CAAuB;IACvD,OAAO,CAAC,cAAc,CAAC,CAAsB;IAEvE,OAAO,KAAK,wBAAwB,GAEnC;IAEQ,iBAAiB,SAKzB;IAEQ,oBAAoB,SAG5B;IAEQ,YAAY,SAWpB;YAEa,gBAAgB;IAa9B,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,YAAY;IAKpB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,iBAAiB;IAMzB,wGAAwG;IACxG,OAAO,CAAC,kBAAkB;YAkBZ,SAAS;YAiCT,WAAW;YAaX,WAAW;YA6BX,aAAa;IAa3B,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,gBAAgB;IAsDxB,OAAO,CAAC,eAAe;IA2CvB,OAAO,CAAC,iBAAiB;IAyBzB,OAAO,CAAC,kBAAkB;IAqD1B,OAAO,CAAC,iBAAiB;IA+BzB,OAAO,CAAC,iBAAiB;IAsDzB,OAAO,CAAC,mBAAmB;IA6C3B,UAAmB,MAAM,yCAiDxB;IAED,OAAgB,MAAM,0BAwLpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC,CAAC;IACZ,UAAU,qBAAqB;QAC3B,iBAAiB,EAAE,cAAc,CAAC;KACrC;CACJ"}
|