@matter-server/dashboard 0.3.6 → 0.3.7
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/dialog-box/dialog-box.d.ts.map +1 -1
- package/dist/esm/components/dialog-box/dialog-box.js.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js +4 -4
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +7 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +3 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +1 -1
- 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 +6 -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.map +1 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +3 -1
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +1 -1
- package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
- package/dist/esm/components/dialogs/settings/log-level-dialog.js +3 -1
- package/dist/esm/components/dialogs/settings/log-level-dialog.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 +3 -1
- package/dist/esm/pages/cluster-commands/clusters/basic-information-commands.js.map +1 -1
- package/dist/esm/pages/components/footer.d.ts.map +1 -1
- package/dist/esm/pages/components/footer.js +1 -3
- package/dist/esm/pages/components/footer.js.map +1 -1
- package/dist/esm/pages/components/header.d.ts.map +1 -1
- package/dist/esm/pages/components/header.js.map +1 -1
- package/dist/esm/pages/components/node-details.d.ts.map +1 -1
- package/dist/esm/pages/components/node-details.js +6 -4
- package/dist/esm/pages/components/node-details.js.map +1 -1
- package/dist/esm/pages/components/server-details.d.ts.map +1 -1
- package/dist/esm/pages/components/server-details.js +3 -1
- 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-node-view.d.ts.map +1 -1
- package/dist/esm/pages/matter-node-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 +3 -1
- package/dist/esm/pages/matter-server-view.js.map +1 -1
- package/dist/esm/pages/network/device-panel.d.ts.map +1 -1
- package/dist/esm/pages/network/device-panel.js.map +1 -1
- package/dist/esm/pages/network/network-details.d.ts.map +1 -1
- package/dist/esm/pages/network/network-details.js +9 -3
- package/dist/esm/pages/network/network-details.js.map +1 -1
- package/dist/esm/pages/network/thread-graph.d.ts.map +1 -1
- package/dist/esm/pages/network/thread-graph.js +3 -1
- package/dist/esm/pages/network/thread-graph.js.map +1 -1
- package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
- package/dist/esm/pages/network/update-connections-dialog.js +6 -2
- package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
- package/dist/esm/pages/network/wifi-graph.d.ts.map +1 -1
- package/dist/esm/pages/network/wifi-graph.js +3 -1
- package/dist/esm/pages/network/wifi-graph.js.map +1 -1
- package/dist/web/js/{commission-node-dialog-DOtOjWT7.js → commission-node-dialog-h9QTg0uL.js} +11 -5
- package/dist/web/js/{commission-node-existing-B0e6xZeB.js → commission-node-existing-TnFjP70Q.js} +5 -3
- package/dist/web/js/{commission-node-thread-CetoXqfb.js → commission-node-thread-DumLBlyw.js} +8 -4
- package/dist/web/js/{commission-node-wifi-B69SoNfD.js → commission-node-wifi-CbT2wQDc.js} +5 -3
- package/dist/web/js/{dialog-box-RdFIn1hd.js → dialog-box-DVtkVga3.js} +1 -1
- package/dist/web/js/{fire_event-DTKKR48v.js → fire_event-D_gZK7cY.js} +1 -1
- package/dist/web/js/{log-level-dialog-BheZgiD2.js → log-level-dialog-ChcYXgfz.js} +4 -2
- package/dist/web/js/main.js +1 -1
- package/dist/web/js/{matter-dashboard-app-Dq3JvQBw.js → matter-dashboard-app-Dpr9EPlS.js} +70 -50
- package/dist/web/js/{node-binding-dialog-CtmtVf1D.js → node-binding-dialog-BI9spkUK.js} +115 -115
- package/package.json +3 -3
- package/src/components/dialog-box/dialog-box.ts +15 -9
- package/src/components/dialogs/binding/node-binding-dialog.ts +6 -9
- package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +15 -7
- package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +7 -1
- package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +14 -2
- package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +12 -4
- package/src/components/dialogs/settings/log-level-dialog.ts +13 -7
- package/src/pages/cluster-commands/clusters/basic-information-commands.ts +7 -3
- package/src/pages/components/footer.ts +1 -3
- package/src/pages/components/header.ts +25 -15
- package/src/pages/components/node-details.ts +34 -21
- package/src/pages/components/server-details.ts +7 -1
- package/src/pages/matter-cluster-view.ts +10 -6
- package/src/pages/matter-node-view.ts +5 -3
- package/src/pages/matter-server-view.ts +7 -1
- package/src/pages/network/device-panel.ts +5 -3
- package/src/pages/network/network-details.ts +134 -82
- package/src/pages/network/thread-graph.ts +3 -1
- package/src/pages/network/update-connections-dialog.ts +31 -17
- package/src/pages/network/wifi-graph.ts +3 -1
|
@@ -4020,7 +4020,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
|
|
|
4020
4020
|
*/
|
|
4021
4021
|
const showLogLevelDialog = async client => {
|
|
4022
4022
|
var _document$querySelect;
|
|
4023
|
-
await import('./log-level-dialog-
|
|
4023
|
+
await import('./log-level-dialog-ChcYXgfz.js');
|
|
4024
4024
|
const dialog = document.createElement("log-level-dialog");
|
|
4025
4025
|
dialog.client = client;
|
|
4026
4026
|
(_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
|
|
@@ -15680,7 +15680,7 @@ const clusters = {
|
|
|
15680
15680
|
* SPDX-License-Identifier: Apache-2.0
|
|
15681
15681
|
*/
|
|
15682
15682
|
const showDialogBox = async (type, dialogParams) => {
|
|
15683
|
-
await import('./dialog-box-
|
|
15683
|
+
await import('./dialog-box-DVtkVga3.js');
|
|
15684
15684
|
return new Promise(resolve => {
|
|
15685
15685
|
const dialog = document.createElement("dialog-box");
|
|
15686
15686
|
dialog.params = dialogParams;
|
|
@@ -15847,6 +15847,39 @@ let MdTextButton = class MdTextButton extends TextButton {};
|
|
|
15847
15847
|
MdTextButton.styles = [styles$g, styles$6];
|
|
15848
15848
|
MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
|
|
15849
15849
|
|
|
15850
|
+
/**
|
|
15851
|
+
* @license
|
|
15852
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
15853
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
15854
|
+
*/
|
|
15855
|
+
const showNodeBindingDialog = async (client, node, endpoint) => {
|
|
15856
|
+
var _document$querySelect;
|
|
15857
|
+
await import('./node-binding-dialog-BI9spkUK.js');
|
|
15858
|
+
const dialog = document.createElement("node-binding-dialog");
|
|
15859
|
+
dialog.client = client;
|
|
15860
|
+
dialog.node = node;
|
|
15861
|
+
dialog.endpoint = endpoint;
|
|
15862
|
+
(_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
|
|
15863
|
+
};
|
|
15864
|
+
|
|
15865
|
+
/**
|
|
15866
|
+
* @license
|
|
15867
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
15868
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
15869
|
+
*/
|
|
15870
|
+
function handleAsync(fn, onError) {
|
|
15871
|
+
return () => {
|
|
15872
|
+
fn().catch(error => {
|
|
15873
|
+
console.error("Async operation failed:", error);
|
|
15874
|
+
});
|
|
15875
|
+
};
|
|
15876
|
+
}
|
|
15877
|
+
function fireAndForget(promise, onError) {
|
|
15878
|
+
promise.catch(error => {
|
|
15879
|
+
console.error("Async operation failed:", error);
|
|
15880
|
+
});
|
|
15881
|
+
}
|
|
15882
|
+
|
|
15850
15883
|
/**
|
|
15851
15884
|
* @license
|
|
15852
15885
|
* Copyright 2025-2026 Open Home Foundation
|
|
@@ -16132,39 +16165,6 @@ function createWiFiRouterIconDataUrl(isSelected = false) {
|
|
|
16132
16165
|
return createIconDataUrl(mdiWifi, color);
|
|
16133
16166
|
}
|
|
16134
16167
|
|
|
16135
|
-
/**
|
|
16136
|
-
* @license
|
|
16137
|
-
* Copyright 2025-2026 Open Home Foundation
|
|
16138
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16139
|
-
*/
|
|
16140
|
-
const showNodeBindingDialog = async (client, node, endpoint) => {
|
|
16141
|
-
var _document$querySelect;
|
|
16142
|
-
await import('./node-binding-dialog-CtmtVf1D.js');
|
|
16143
|
-
const dialog = document.createElement("node-binding-dialog");
|
|
16144
|
-
dialog.client = client;
|
|
16145
|
-
dialog.node = node;
|
|
16146
|
-
dialog.endpoint = endpoint;
|
|
16147
|
-
(_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
|
|
16148
|
-
};
|
|
16149
|
-
|
|
16150
|
-
/**
|
|
16151
|
-
* @license
|
|
16152
|
-
* Copyright 2025-2026 Open Home Foundation
|
|
16153
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
16154
|
-
*/
|
|
16155
|
-
function handleAsync(fn, onError) {
|
|
16156
|
-
return () => {
|
|
16157
|
-
fn().catch(error => {
|
|
16158
|
-
console.error("Async operation failed:", error);
|
|
16159
|
-
});
|
|
16160
|
-
};
|
|
16161
|
-
}
|
|
16162
|
-
function fireAndForget(promise, onError) {
|
|
16163
|
-
promise.catch(error => {
|
|
16164
|
-
console.error("Async operation failed:", error);
|
|
16165
|
-
});
|
|
16166
|
-
}
|
|
16167
|
-
|
|
16168
16168
|
/**
|
|
16169
16169
|
* @license
|
|
16170
16170
|
* Copyright 2018 Google LLC
|
|
@@ -16403,7 +16403,9 @@ let NodeDetails = class extends i$4 {
|
|
|
16403
16403
|
<ha-svg-icon slot="start" class="device-icon" .path=${getDeviceIcon(this.node)}></ha-svg-icon>
|
|
16404
16404
|
<div slot="headline">
|
|
16405
16405
|
<b>${this.node.nodeLabel || "Node Info"}</b>
|
|
16406
|
-
${this.node.available ? A : b
|
|
16406
|
+
${this.node.available ? A : b`
|
|
16407
|
+
<span class="status">OFFLINE</span>
|
|
16408
|
+
`}
|
|
16407
16409
|
</div>
|
|
16408
16410
|
</md-list-item>
|
|
16409
16411
|
<md-list-item>
|
|
@@ -18910,7 +18912,9 @@ let BasicInformationClusterCommands = class extends BaseClusterCommands {
|
|
|
18910
18912
|
<details class="command-panel">
|
|
18911
18913
|
<summary>Node Label</summary>
|
|
18912
18914
|
<div class="command-content">
|
|
18913
|
-
${!this._isNodeAvailable ? b
|
|
18915
|
+
${!this._isNodeAvailable ? b`
|
|
18916
|
+
<div class="offline-warning">Node is offline - cannot edit label</div>
|
|
18917
|
+
` : A}
|
|
18914
18918
|
<div class="command-row">
|
|
18915
18919
|
<md-outlined-text-field
|
|
18916
18920
|
label="Node Label"
|
|
@@ -19334,9 +19338,7 @@ let DashboardFooter = class extends i$4 {
|
|
|
19334
19338
|
return b`
|
|
19335
19339
|
<div class="footer">
|
|
19336
19340
|
The OHF Matter Server is a project by the Open Home Foundation.
|
|
19337
|
-
<a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank"
|
|
19338
|
-
>Support development</a
|
|
19339
|
-
>
|
|
19341
|
+
<a href="https://www.openhomefoundation.org/structure/#support-our-work" target="_blank">Support development</a>
|
|
19340
19342
|
</div>
|
|
19341
19343
|
`;
|
|
19342
19344
|
}
|
|
@@ -21156,7 +21158,9 @@ let UpdateConnectionsDialog = class extends i$4 {
|
|
|
21156
21158
|
Update network data from its ${this.onlineNeighborIds.length} online
|
|
21157
21159
|
neighbor${this.onlineNeighborIds.length !== 1 ? "s" : ""} to refresh connection info.
|
|
21158
21160
|
</p>
|
|
21159
|
-
` : b`
|
|
21161
|
+
` : b`
|
|
21162
|
+
<p>No online neighbors available to update.</p>
|
|
21163
|
+
`}
|
|
21160
21164
|
`;
|
|
21161
21165
|
}
|
|
21162
21166
|
_renderUnknownContent() {
|
|
@@ -21168,7 +21172,9 @@ let UpdateConnectionsDialog = class extends i$4 {
|
|
|
21168
21172
|
node${this.onlineNeighborIds.length !== 1 ? "s" : ""} that
|
|
21169
21173
|
see${this.onlineNeighborIds.length === 1 ? "s" : ""} this device to refresh info.
|
|
21170
21174
|
</p>
|
|
21171
|
-
` : b`
|
|
21175
|
+
` : b`
|
|
21176
|
+
<p>No online nodes available that see this device.</p>
|
|
21177
|
+
`}
|
|
21172
21178
|
`;
|
|
21173
21179
|
}
|
|
21174
21180
|
render() {
|
|
@@ -21451,7 +21457,9 @@ let NetworkDetails = class extends i$4 {
|
|
|
21451
21457
|
${conn.rssi !== null ? b`RSSI: ${conn.rssi} dBm` : A}${conn.rssi !== null && conn.lqi !== null ? ", " : A}${conn.lqi !== null ? b`LQI: ${conn.lqi}` : A}${conn.bidirectionalLqi !== void 0 ? b`<span class="route-info"
|
|
21452
21458
|
>, Bidir: ${conn.bidirectionalLqi}</span
|
|
21453
21459
|
>` : A}${conn.pathCost !== void 0 ? b`<span class="route-info">, Cost: ${conn.pathCost}</span>` : A}
|
|
21454
|
-
${!conn.isOutgoing ? b
|
|
21460
|
+
${!conn.isOutgoing ? b`
|
|
21461
|
+
<span class="direction-hint">(reverse)</span>
|
|
21462
|
+
` : A}
|
|
21455
21463
|
</div>
|
|
21456
21464
|
</div>
|
|
21457
21465
|
</div>
|
|
@@ -21523,7 +21531,9 @@ let NetworkDetails = class extends i$4 {
|
|
|
21523
21531
|
_renderUnknownDeviceInfo(deviceId) {
|
|
21524
21532
|
const unknown = this.unknownDevices.get(deviceId);
|
|
21525
21533
|
if (!unknown) {
|
|
21526
|
-
return b
|
|
21534
|
+
return b`
|
|
21535
|
+
<p>Unknown device data not available</p>
|
|
21536
|
+
`;
|
|
21527
21537
|
}
|
|
21528
21538
|
return b`
|
|
21529
21539
|
<div class="section">
|
|
@@ -21683,7 +21693,9 @@ let NetworkDetails = class extends i$4 {
|
|
|
21683
21693
|
_renderWiFiAccessPointInfo(apId) {
|
|
21684
21694
|
const ap = this.wifiAccessPoints.get(apId);
|
|
21685
21695
|
if (!ap) {
|
|
21686
|
-
return b
|
|
21696
|
+
return b`
|
|
21697
|
+
<p>Access point data not available</p>
|
|
21698
|
+
`;
|
|
21687
21699
|
}
|
|
21688
21700
|
return b`
|
|
21689
21701
|
<div class="section">
|
|
@@ -30639,7 +30651,9 @@ let ThreadGraph = class extends BaseNetworkGraph {
|
|
|
30639
30651
|
</div>
|
|
30640
30652
|
`;
|
|
30641
30653
|
}
|
|
30642
|
-
return b
|
|
30654
|
+
return b`
|
|
30655
|
+
<div class="graph-container"></div>
|
|
30656
|
+
`;
|
|
30643
30657
|
}
|
|
30644
30658
|
};
|
|
30645
30659
|
ThreadGraph = __decorateClass$6([t$1("thread-graph")], ThreadGraph);
|
|
@@ -30783,7 +30797,9 @@ let WiFiGraph = class extends BaseNetworkGraph {
|
|
|
30783
30797
|
</div>
|
|
30784
30798
|
`;
|
|
30785
30799
|
}
|
|
30786
|
-
return b
|
|
30800
|
+
return b`
|
|
30801
|
+
<div class="graph-container"></div>
|
|
30802
|
+
`;
|
|
30787
30803
|
}
|
|
30788
30804
|
};
|
|
30789
30805
|
WiFiGraph = __decorateClass$5([t$1("wifi-graph")], WiFiGraph);
|
|
@@ -31345,7 +31361,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
|
|
|
31345
31361
|
*/
|
|
31346
31362
|
const showCommissionNodeDialog = async client => {
|
|
31347
31363
|
var _document$querySelect;
|
|
31348
|
-
await import('./commission-node-dialog-
|
|
31364
|
+
await import('./commission-node-dialog-h9QTg0uL.js');
|
|
31349
31365
|
const dialog = document.createElement("commission-node-dialog");
|
|
31350
31366
|
dialog.client = client;
|
|
31351
31367
|
(_document$querySelect = document.querySelector("matter-dashboard-app")) === null || _document$querySelect === void 0 || _document$querySelect.renderRoot.appendChild(dialog);
|
|
@@ -31388,7 +31404,9 @@ let ServerDetails = class extends i$4 {
|
|
|
31388
31404
|
<md-list-item>
|
|
31389
31405
|
<div slot="headline">
|
|
31390
31406
|
<b>Open Home Foundation Matter Server ${this.client.isProduction ? "" : `(${this.client.serverBaseAddress})`}</b>
|
|
31391
|
-
${this.client.connection.connected ? A : b
|
|
31407
|
+
${this.client.connection.connected ? A : b`
|
|
31408
|
+
<span class="status">OFFLINE</span>
|
|
31409
|
+
`}
|
|
31392
31410
|
</div>
|
|
31393
31411
|
</md-list-item>
|
|
31394
31412
|
<md-list-item>
|
|
@@ -31528,7 +31546,9 @@ let MatterServerView = class extends i$4 {
|
|
|
31528
31546
|
<span class="hex-id"
|
|
31529
31547
|
>(${formatNodeAddress(isTestNodeId(node.node_id) || this.client.serverInfo.fabric_index === void 0 ? void 0 : this.client.serverInfo.fabric_index, node.node_id)})</span
|
|
31530
31548
|
>
|
|
31531
|
-
${node.available ? "" : b
|
|
31549
|
+
${node.available ? "" : b`
|
|
31550
|
+
<span class="status">OFFLINE</span>
|
|
31551
|
+
`}
|
|
31532
31552
|
</div>
|
|
31533
31553
|
<div slot="supporting-text">
|
|
31534
31554
|
${node.nodeLabel ? `${node.nodeLabel} | ` : A} ${node.vendorName} |
|
|
@@ -1,121 +1,7 @@
|
|
|
1
|
-
import { k as i, G as c, H as clientContext, n, a as e, i as i$1, A, j as b, F as handleAsync, t } from './matter-dashboard-app-
|
|
1
|
+
import { k as i, G as c, H as clientContext, n, a as e, i as i$1, A, j as b, F as handleAsync, t } from './matter-dashboard-app-Dpr9EPlS.js';
|
|
2
2
|
import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
|
|
3
3
|
import './main.js';
|
|
4
4
|
|
|
5
|
-
var _staticBlock$1;
|
|
6
|
-
/**
|
|
7
|
-
* @license
|
|
8
|
-
* Copyright 2025-2026 Open Home Foundation
|
|
9
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
10
|
-
*/
|
|
11
|
-
class BindingEntryDataTransformer {
|
|
12
|
-
static transform(input) {
|
|
13
|
-
if (!input || typeof input !== "object") {
|
|
14
|
-
throw new Error("Invalid input: expected an object");
|
|
15
|
-
}
|
|
16
|
-
const result = {};
|
|
17
|
-
const keyMapping = BindingEntryDataTransformer.KEY_MAPPING;
|
|
18
|
-
for (const key in input) {
|
|
19
|
-
if (key in keyMapping) {
|
|
20
|
-
const mappedKey = keyMapping[key];
|
|
21
|
-
if (mappedKey) {
|
|
22
|
-
const value = input[key];
|
|
23
|
-
if (value === void 0) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
if (mappedKey === "fabricIndex") {
|
|
27
|
-
result[mappedKey] = value === void 0 ? void 0 : Number(value);
|
|
28
|
-
} else if (mappedKey === "node" || mappedKey === "endpoint") {
|
|
29
|
-
result[mappedKey] = Number(value);
|
|
30
|
-
} else {
|
|
31
|
-
result[mappedKey] = value;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return result;
|
|
37
|
-
}
|
|
38
|
-
static #_ = _staticBlock$1 = () => this.KEY_MAPPING = {
|
|
39
|
-
"1": "node",
|
|
40
|
-
"3": "endpoint",
|
|
41
|
-
"4": "cluster",
|
|
42
|
-
"254": "fabricIndex"
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
_staticBlock$1();
|
|
46
|
-
|
|
47
|
-
var _staticBlock, _staticBlock2;
|
|
48
|
-
/**
|
|
49
|
-
* @license
|
|
50
|
-
* Copyright 2025-2026 Open Home Foundation
|
|
51
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
52
|
-
*/
|
|
53
|
-
class AccessControlTargetTransformer {
|
|
54
|
-
static transform(input) {
|
|
55
|
-
if (!input || typeof input !== "object") {
|
|
56
|
-
throw new Error("Invalid input: expected an object");
|
|
57
|
-
}
|
|
58
|
-
const result = {};
|
|
59
|
-
const keyMapping = AccessControlTargetTransformer.KEY_MAPPING;
|
|
60
|
-
for (const key in input) {
|
|
61
|
-
if (key in keyMapping) {
|
|
62
|
-
const mappedKey = keyMapping[key];
|
|
63
|
-
if (mappedKey) {
|
|
64
|
-
const value = input[key];
|
|
65
|
-
if (value === void 0) continue;
|
|
66
|
-
result[mappedKey] = value;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return result;
|
|
71
|
-
}
|
|
72
|
-
static #_ = _staticBlock = () => this.KEY_MAPPING = {
|
|
73
|
-
"0": "cluster",
|
|
74
|
-
"1": "endpoint",
|
|
75
|
-
"2": "deviceType"
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
_staticBlock();
|
|
79
|
-
class AccessControlEntryDataTransformer {
|
|
80
|
-
static transform(input) {
|
|
81
|
-
if (!input || typeof input !== "object") {
|
|
82
|
-
throw new Error("Invalid input: expected an object");
|
|
83
|
-
}
|
|
84
|
-
const result = {};
|
|
85
|
-
const keyMapping = AccessControlEntryDataTransformer.KEY_MAPPING;
|
|
86
|
-
for (const key in input) {
|
|
87
|
-
if (key in keyMapping) {
|
|
88
|
-
const mappedKey = keyMapping[key];
|
|
89
|
-
if (mappedKey) {
|
|
90
|
-
const value = input[key];
|
|
91
|
-
if (value === void 0) continue;
|
|
92
|
-
if (mappedKey === "subjects") {
|
|
93
|
-
result[mappedKey] = Array.isArray(value) ? value : void 0;
|
|
94
|
-
} else if (mappedKey === "targets") {
|
|
95
|
-
if (Array.isArray(value)) {
|
|
96
|
-
const _targets = Object.values(value).map(val => AccessControlTargetTransformer.transform(val));
|
|
97
|
-
result[mappedKey] = _targets;
|
|
98
|
-
} else {
|
|
99
|
-
result[mappedKey] = void 0;
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
result[mappedKey] = value;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
return result;
|
|
108
|
-
}
|
|
109
|
-
static #_ = _staticBlock2 = () => this.KEY_MAPPING = {
|
|
110
|
-
"1": "privilege",
|
|
111
|
-
"2": "authMode",
|
|
112
|
-
"3": "subjects",
|
|
113
|
-
"4": "targets",
|
|
114
|
-
"254": "fabricIndex"
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
_staticBlock2();
|
|
118
|
-
|
|
119
5
|
/**
|
|
120
6
|
* @license
|
|
121
7
|
* Copyright 2025-2026 Open Home Foundation
|
|
@@ -214,6 +100,120 @@ function formatBatchMessage(outcome, successCount, failureCount, errorCounts) {
|
|
|
214
100
|
return `Partial failure: ${successCount} ${entryWord(successCount)} succeeded, ${failureCount} failed (${errorParts}). Please verify.`;
|
|
215
101
|
}
|
|
216
102
|
|
|
103
|
+
var _staticBlock$1, _staticBlock2;
|
|
104
|
+
/**
|
|
105
|
+
* @license
|
|
106
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
107
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
108
|
+
*/
|
|
109
|
+
class AccessControlTargetTransformer {
|
|
110
|
+
static transform(input) {
|
|
111
|
+
if (!input || typeof input !== "object") {
|
|
112
|
+
throw new Error("Invalid input: expected an object");
|
|
113
|
+
}
|
|
114
|
+
const result = {};
|
|
115
|
+
const keyMapping = AccessControlTargetTransformer.KEY_MAPPING;
|
|
116
|
+
for (const key in input) {
|
|
117
|
+
if (key in keyMapping) {
|
|
118
|
+
const mappedKey = keyMapping[key];
|
|
119
|
+
if (mappedKey) {
|
|
120
|
+
const value = input[key];
|
|
121
|
+
if (value === void 0) continue;
|
|
122
|
+
result[mappedKey] = value;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
static #_ = _staticBlock$1 = () => this.KEY_MAPPING = {
|
|
129
|
+
"0": "cluster",
|
|
130
|
+
"1": "endpoint",
|
|
131
|
+
"2": "deviceType"
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
_staticBlock$1();
|
|
135
|
+
class AccessControlEntryDataTransformer {
|
|
136
|
+
static transform(input) {
|
|
137
|
+
if (!input || typeof input !== "object") {
|
|
138
|
+
throw new Error("Invalid input: expected an object");
|
|
139
|
+
}
|
|
140
|
+
const result = {};
|
|
141
|
+
const keyMapping = AccessControlEntryDataTransformer.KEY_MAPPING;
|
|
142
|
+
for (const key in input) {
|
|
143
|
+
if (key in keyMapping) {
|
|
144
|
+
const mappedKey = keyMapping[key];
|
|
145
|
+
if (mappedKey) {
|
|
146
|
+
const value = input[key];
|
|
147
|
+
if (value === void 0) continue;
|
|
148
|
+
if (mappedKey === "subjects") {
|
|
149
|
+
result[mappedKey] = Array.isArray(value) ? value : void 0;
|
|
150
|
+
} else if (mappedKey === "targets") {
|
|
151
|
+
if (Array.isArray(value)) {
|
|
152
|
+
const _targets = Object.values(value).map(val => AccessControlTargetTransformer.transform(val));
|
|
153
|
+
result[mappedKey] = _targets;
|
|
154
|
+
} else {
|
|
155
|
+
result[mappedKey] = void 0;
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
result[mappedKey] = value;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
static #_ = _staticBlock2 = () => this.KEY_MAPPING = {
|
|
166
|
+
"1": "privilege",
|
|
167
|
+
"2": "authMode",
|
|
168
|
+
"3": "subjects",
|
|
169
|
+
"4": "targets",
|
|
170
|
+
"254": "fabricIndex"
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
_staticBlock2();
|
|
174
|
+
|
|
175
|
+
var _staticBlock;
|
|
176
|
+
/**
|
|
177
|
+
* @license
|
|
178
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
179
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
180
|
+
*/
|
|
181
|
+
class BindingEntryDataTransformer {
|
|
182
|
+
static transform(input) {
|
|
183
|
+
if (!input || typeof input !== "object") {
|
|
184
|
+
throw new Error("Invalid input: expected an object");
|
|
185
|
+
}
|
|
186
|
+
const result = {};
|
|
187
|
+
const keyMapping = BindingEntryDataTransformer.KEY_MAPPING;
|
|
188
|
+
for (const key in input) {
|
|
189
|
+
if (key in keyMapping) {
|
|
190
|
+
const mappedKey = keyMapping[key];
|
|
191
|
+
if (mappedKey) {
|
|
192
|
+
const value = input[key];
|
|
193
|
+
if (value === void 0) {
|
|
194
|
+
continue;
|
|
195
|
+
}
|
|
196
|
+
if (mappedKey === "fabricIndex") {
|
|
197
|
+
result[mappedKey] = value === void 0 ? void 0 : Number(value);
|
|
198
|
+
} else if (mappedKey === "node" || mappedKey === "endpoint") {
|
|
199
|
+
result[mappedKey] = Number(value);
|
|
200
|
+
} else {
|
|
201
|
+
result[mappedKey] = value;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
static #_ = _staticBlock = () => this.KEY_MAPPING = {
|
|
209
|
+
"1": "node",
|
|
210
|
+
"3": "endpoint",
|
|
211
|
+
"4": "cluster",
|
|
212
|
+
"254": "fabricIndex"
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
_staticBlock();
|
|
216
|
+
|
|
217
217
|
var __defProp = Object.defineProperty;
|
|
218
218
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
219
219
|
var __decorateClass = (decorators, target, key, kind) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@matter-server/dashboard",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.7",
|
|
4
4
|
"description": "Dashboard for OHF Matter Server",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"url": "https://github.com/matter-js/matterjs-server/issues"
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@lit/context": "^1.1.6",
|
|
39
39
|
"@material/web": "^2.4.1",
|
|
40
|
-
"@matter-server/ws-client": "0.3.
|
|
41
|
-
"@matter-server/custom-clusters": "0.3.
|
|
40
|
+
"@matter-server/ws-client": "0.3.7",
|
|
41
|
+
"@matter-server/custom-clusters": "0.3.7",
|
|
42
42
|
"@mdi/js": "^7.4.47",
|
|
43
43
|
"lit": "^3.3.2",
|
|
44
44
|
"tslib": "^2.8.1",
|
|
@@ -24,19 +24,25 @@ export class DialogBox extends LitElement {
|
|
|
24
24
|
return html`
|
|
25
25
|
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
26
26
|
${params.title ? html`<div slot="headline">${params.title}</div>` : ""}
|
|
27
|
-
${
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
${
|
|
28
|
+
params.text
|
|
29
|
+
? html`<div slot="content">
|
|
30
|
+
${
|
|
31
|
+
params.asCodeBlock && typeof params.text === "string"
|
|
32
|
+
? html`<code>${params.text}</code>`
|
|
33
|
+
: params.text
|
|
34
|
+
}
|
|
32
35
|
</div>`
|
|
33
|
-
|
|
36
|
+
: ""
|
|
37
|
+
}
|
|
34
38
|
<div slot="actions">
|
|
35
|
-
${
|
|
36
|
-
|
|
39
|
+
${
|
|
40
|
+
this.type === "prompt"
|
|
41
|
+
? html`
|
|
37
42
|
<md-text-button @click=${this._cancel}>${params.cancelText ?? "Cancel"}</md-text-button>
|
|
38
43
|
`
|
|
39
|
-
|
|
44
|
+
: ""
|
|
45
|
+
}
|
|
40
46
|
<md-text-button @click=${this._confirm}>${params.confirmText ?? "OK"}</md-text-button>
|
|
41
47
|
</div>
|
|
42
48
|
</md-dialog>
|
|
@@ -6,29 +6,26 @@
|
|
|
6
6
|
|
|
7
7
|
import "@material/web/button/text-button";
|
|
8
8
|
import "@material/web/dialog/dialog";
|
|
9
|
-
import
|
|
9
|
+
import { consume } from "@lit/context";
|
|
10
10
|
import "@material/web/list/list";
|
|
11
11
|
import "@material/web/list/list-item";
|
|
12
12
|
import "@material/web/textfield/outlined-text-field";
|
|
13
|
-
import type {
|
|
13
|
+
import type { MdDialog } from "@material/web/dialog/dialog.js";
|
|
14
14
|
import "../../../components/ha-svg-icon";
|
|
15
|
-
|
|
15
|
+
import type { MdOutlinedTextField } from "@material/web/textfield/outlined-text-field.js";
|
|
16
16
|
import { AccessControlEntry, BindingTarget, MatterClient, MatterNode } from "@matter-server/ws-client";
|
|
17
17
|
import { css, html, LitElement, nothing } from "lit";
|
|
18
18
|
import { customElement, property, query } from "lit/decorators.js";
|
|
19
|
+
import { clientContext } from "../../../client/client-context.js";
|
|
19
20
|
import { handleAsync } from "../../../util/async-handler.js";
|
|
21
|
+
import { analyzeBatchResults, type MatterBatchResult } from "../../../util/matter-status.js";
|
|
20
22
|
import { preventDefault } from "../../../util/prevent_default.js";
|
|
21
|
-
import { BindingEntryDataTransformer, BindingEntryStruct, InputType } from "./model.js";
|
|
22
|
-
|
|
23
23
|
import {
|
|
24
24
|
AccessControlEntryDataTransformer,
|
|
25
25
|
AccessControlEntryStruct,
|
|
26
26
|
AccessControlTargetStruct,
|
|
27
27
|
} from "../acl/model.js";
|
|
28
|
-
|
|
29
|
-
import { consume } from "@lit/context";
|
|
30
|
-
import { clientContext } from "../../../client/client-context.js";
|
|
31
|
-
import { analyzeBatchResults, type MatterBatchResult } from "../../../util/matter-status.js";
|
|
28
|
+
import { BindingEntryDataTransformer, BindingEntryStruct, InputType } from "./model.js";
|
|
32
29
|
|
|
33
30
|
@customElement("node-binding-dialog")
|
|
34
31
|
export class NodeBindingDialog extends LitElement {
|
|
@@ -25,8 +25,9 @@ export class ComissionNodeDialog extends LitElement {
|
|
|
25
25
|
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
26
26
|
<div slot="headline">Commission node</div>
|
|
27
27
|
<div slot="content" @node-commissioned=${this._nodeCommissioned}>
|
|
28
|
-
${
|
|
29
|
-
|
|
28
|
+
${
|
|
29
|
+
!this._mode
|
|
30
|
+
? html`<md-list>
|
|
30
31
|
<md-list-item
|
|
31
32
|
type="button"
|
|
32
33
|
.disabled=${!this.client.serverInfo.bluetooth_enabled}
|
|
@@ -43,11 +44,18 @@ export class ComissionNodeDialog extends LitElement {
|
|
|
43
44
|
>Commission existing device</md-list-item
|
|
44
45
|
>
|
|
45
46
|
</md-list>`
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
: this._mode === "wifi"
|
|
48
|
+
? html`
|
|
49
|
+
<commission-node-wifi></commission-node-wifi>
|
|
50
|
+
`
|
|
51
|
+
: this._mode === "thread"
|
|
52
|
+
? html`
|
|
53
|
+
<commission-node-thread></commission-node-thread>
|
|
54
|
+
`
|
|
55
|
+
: html`
|
|
56
|
+
<commission-node-existing></commission-node-existing>
|
|
57
|
+
`
|
|
58
|
+
}
|
|
51
59
|
</div>
|
|
52
60
|
<div slot="actions">
|
|
53
61
|
<md-text-button @click=${this._close}>Cancel</md-text-button>
|
|
@@ -33,7 +33,13 @@ export class CommissionNodeExisting extends LitElement {
|
|
|
33
33
|
<br />
|
|
34
34
|
<md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
|
|
35
35
|
>Commission</md-outlined-button
|
|
36
|
-
>${
|
|
36
|
+
>${
|
|
37
|
+
this._loading
|
|
38
|
+
? html`
|
|
39
|
+
<md-circular-progress indeterminate></md-circular-progress>
|
|
40
|
+
`
|
|
41
|
+
: nothing
|
|
42
|
+
}`;
|
|
37
43
|
}
|
|
38
44
|
|
|
39
45
|
private async _commissionNode() {
|
|
@@ -37,14 +37,26 @@ export class CommissionNodeThread extends LitElement {
|
|
|
37
37
|
<br />
|
|
38
38
|
<md-outlined-button @click=${handleAsync(() => this._setThreadDataset())} .disabled="${this._loading}"
|
|
39
39
|
>Set Thread Dataset</md-outlined-button
|
|
40
|
-
>${
|
|
40
|
+
>${
|
|
41
|
+
this._loading
|
|
42
|
+
? html`
|
|
43
|
+
<md-circular-progress indeterminate></md-circular-progress>
|
|
44
|
+
`
|
|
45
|
+
: nothing
|
|
46
|
+
}`;
|
|
41
47
|
}
|
|
42
48
|
return html`<md-outlined-text-field label="Pairing code" .disabled="${this._loading}"> </md-outlined-text-field>
|
|
43
49
|
<br />
|
|
44
50
|
<br />
|
|
45
51
|
<md-outlined-button @click=${handleAsync(() => this._commissionNode())} .disabled="${this._loading}"
|
|
46
52
|
>Commission</md-outlined-button
|
|
47
|
-
>${
|
|
53
|
+
>${
|
|
54
|
+
this._loading
|
|
55
|
+
? html`
|
|
56
|
+
<md-circular-progress indeterminate></md-circular-progress>
|
|
57
|
+
`
|
|
58
|
+
: nothing
|
|
59
|
+
}`;
|
|
48
60
|
}
|
|
49
61
|
|
|
50
62
|
private async _setThreadDataset() {
|