@matter-server/dashboard 0.2.0-alpha.0-00000000-000000000
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/LICENSE +201 -0
- package/README.md +11 -0
- package/dist/esm/client/client-context.d.ts +10 -0
- package/dist/esm/client/client-context.d.ts.map +1 -0
- package/dist/esm/client/client-context.js +11 -0
- package/dist/esm/client/client-context.js.map +6 -0
- package/dist/esm/client/models/descriptions.d.ts +20 -0
- package/dist/esm/client/models/descriptions.d.ts.map +1 -0
- package/dist/esm/client/models/descriptions.js +10929 -0
- package/dist/esm/client/models/descriptions.js.map +6 -0
- package/dist/esm/components/dialog-box/dialog-box.d.ts +25 -0
- package/dist/esm/components/dialog-box/dialog-box.d.ts.map +1 -0
- package/dist/esm/components/dialog-box/dialog-box.js +66 -0
- package/dist/esm/components/dialog-box/dialog-box.js.map +6 -0
- package/dist/esm/components/dialog-box/show-dialog-box.d.ts +18 -0
- package/dist/esm/components/dialog-box/show-dialog-box.d.ts.map +1 -0
- package/dist/esm/components/dialog-box/show-dialog-box.js +22 -0
- package/dist/esm/components/dialog-box/show-dialog-box.js.map +6 -0
- package/dist/esm/components/dialogs/acl/model.d.ts +33 -0
- package/dist/esm/components/dialogs/acl/model.d.ts.map +1 -0
- package/dist/esm/components/dialogs/acl/model.js +79 -0
- package/dist/esm/components/dialogs/acl/model.js.map +6 -0
- package/dist/esm/components/dialogs/binding/model.d.ts +20 -0
- package/dist/esm/components/dialogs/binding/model.d.ts.map +1 -0
- package/dist/esm/components/dialogs/binding/model.js +45 -0
- package/dist/esm/components/dialogs/binding/model.js.map +6 -0
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts +49 -0
- package/dist/esm/components/dialogs/binding/node-binding-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js +357 -0
- package/dist/esm/components/dialogs/binding/node-binding-dialog.js.map +6 -0
- package/dist/esm/components/dialogs/binding/show-node-binding-dialog.d.ts +8 -0
- package/dist/esm/components/dialogs/binding/show-node-binding-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/binding/show-node-binding-dialog.js +17 -0
- package/dist/esm/components/dialogs/binding/show-node-binding-dialog.js.map +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts +31 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +94 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts +17 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.d.ts.map +1 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js +64 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-existing.js.map +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts +19 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.d.ts.map +1 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js +91 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-thread.js.map +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts +20 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.d.ts.map +1 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js +106 -0
- package/dist/esm/components/dialogs/commission-node-dialog/commission-node-wifi.js.map +6 -0
- package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.d.ts +8 -0
- package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.d.ts.map +1 -0
- package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.js +15 -0
- package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.js.map +6 -0
- package/dist/esm/components/ha-svg-icon.d.ts +19 -0
- package/dist/esm/components/ha-svg-icon.d.ts.map +1 -0
- package/dist/esm/components/ha-svg-icon.js +77 -0
- package/dist/esm/components/ha-svg-icon.js.map +6 -0
- package/dist/esm/entrypoint/main.d.ts +7 -0
- package/dist/esm/entrypoint/main.d.ts.map +1 -0
- package/dist/esm/entrypoint/main.js +45 -0
- package/dist/esm/entrypoint/main.js.map +6 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/pages/components/context.d.ts +9 -0
- package/dist/esm/pages/components/context.d.ts.map +1 -0
- package/dist/esm/pages/components/context.js +11 -0
- package/dist/esm/pages/components/context.js.map +6 -0
- package/dist/esm/pages/components/footer.d.ts +11 -0
- package/dist/esm/pages/components/footer.d.ts.map +1 -0
- package/dist/esm/pages/components/footer.js +52 -0
- package/dist/esm/pages/components/footer.js.map +6 -0
- package/dist/esm/pages/components/header.d.ts +27 -0
- package/dist/esm/pages/components/header.d.ts.map +1 -0
- package/dist/esm/pages/components/header.js +90 -0
- package/dist/esm/pages/components/header.js.map +6 -0
- package/dist/esm/pages/components/node-details.d.ts +29 -0
- package/dist/esm/pages/components/node-details.d.ts.map +1 -0
- package/dist/esm/pages/components/node-details.js +241 -0
- package/dist/esm/pages/components/node-details.js.map +6 -0
- package/dist/esm/pages/components/server-details.d.ts +24 -0
- package/dist/esm/pages/components/server-details.d.ts.map +1 -0
- package/dist/esm/pages/components/server-details.js +130 -0
- package/dist/esm/pages/components/server-details.js.map +6 -0
- package/dist/esm/pages/matter-cluster-view.d.ts +30 -0
- package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -0
- package/dist/esm/pages/matter-cluster-view.js +154 -0
- package/dist/esm/pages/matter-cluster-view.js.map +6 -0
- package/dist/esm/pages/matter-dashboard-app.d.ts +27 -0
- package/dist/esm/pages/matter-dashboard-app.d.ts.map +1 -0
- package/dist/esm/pages/matter-dashboard-app.js +122 -0
- package/dist/esm/pages/matter-dashboard-app.js.map +6 -0
- package/dist/esm/pages/matter-endpoint-view.d.ts +29 -0
- package/dist/esm/pages/matter-endpoint-view.d.ts.map +1 -0
- package/dist/esm/pages/matter-endpoint-view.js +149 -0
- package/dist/esm/pages/matter-endpoint-view.js.map +6 -0
- package/dist/esm/pages/matter-node-view.d.ts +28 -0
- package/dist/esm/pages/matter-node-view.d.ts.map +1 -0
- package/dist/esm/pages/matter-node-view.js +122 -0
- package/dist/esm/pages/matter-node-view.js.map +6 -0
- package/dist/esm/pages/matter-server-view.d.ts +31 -0
- package/dist/esm/pages/matter-server-view.d.ts.map +1 -0
- package/dist/esm/pages/matter-server-view.js +113 -0
- package/dist/esm/pages/matter-server-view.js.map +6 -0
- package/dist/esm/util/clone_class.d.ts +7 -0
- package/dist/esm/util/clone_class.d.ts.map +1 -0
- package/dist/esm/util/clone_class.js +10 -0
- package/dist/esm/util/clone_class.js.map +6 -0
- package/dist/esm/util/fire_event.d.ts +34 -0
- package/dist/esm/util/fire_event.d.ts.map +1 -0
- package/dist/esm/util/fire_event.js +21 -0
- package/dist/esm/util/fire_event.js.map +6 -0
- package/dist/esm/util/prevent_default.d.ts +7 -0
- package/dist/esm/util/prevent_default.d.ts.map +1 -0
- package/dist/esm/util/prevent_default.js +10 -0
- package/dist/esm/util/prevent_default.js.map +6 -0
- package/dist/esm/util/routing.d.ts +10 -0
- package/dist/esm/util/routing.d.ts.map +1 -0
- package/dist/esm/util/routing.js +6 -0
- package/dist/esm/util/routing.js.map +6 -0
- package/dist/web/index.html +40 -0
- package/dist/web/js/commission-node-dialog-BJsfA4IV.js +78 -0
- package/dist/web/js/commission-node-dialog-DEZ3EqYO.js +78 -0
- package/dist/web/js/commission-node-existing-CzRtUgBm.js +50 -0
- package/dist/web/js/commission-node-existing-OK1ybPFI.js +50 -0
- package/dist/web/js/commission-node-thread-DLmclivF.js +75 -0
- package/dist/web/js/commission-node-thread-FcLFz84I.js +75 -0
- package/dist/web/js/commission-node-wifi-C8ho-UYb.js +88 -0
- package/dist/web/js/commission-node-wifi-C8iGfy7c.js +88 -0
- package/dist/web/js/dialog-box-BPz-oO3d.js +52 -0
- package/dist/web/js/dialog-box-DN32sjfR.js +52 -0
- package/dist/web/js/fire_event-BERTqZpV.js +169 -0
- package/dist/web/js/fire_event-BlsbXpOL.js +169 -0
- package/dist/web/js/main.js +547 -0
- package/dist/web/js/matter-dashboard-app-5UjO1Ik8.js +16068 -0
- package/dist/web/js/matter-dashboard-app-BazvuIIi.js +16068 -0
- package/dist/web/js/node-binding-dialog-2yitVn0R.js +443 -0
- package/dist/web/js/node-binding-dialog-Cw6QEmL3.js +443 -0
- package/dist/web/js/outlined-text-field-BMLYwwlc.js +2086 -0
- package/dist/web/js/outlined-text-field-Sqd4JHxo.js +2086 -0
- package/dist/web/js/prevent_default-BsT53c0u.js +814 -0
- package/dist/web/js/prevent_default-D4GG_QeD.js +814 -0
- package/package.json +54 -0
- package/src/client/client-context.ts +10 -0
- package/src/client/models/descriptions.ts +10948 -0
- package/src/components/dialog-box/dialog-box.ts +62 -0
- package/src/components/dialog-box/show-dialog-box.ts +32 -0
- package/src/components/dialogs/acl/model.ts +105 -0
- package/src/components/dialogs/binding/model.ts +58 -0
- package/src/components/dialogs/binding/node-binding-dialog.ts +419 -0
- package/src/components/dialogs/binding/show-node-binding-dialog.ts +16 -0
- package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +102 -0
- package/src/components/dialogs/commission-node-dialog/commission-node-existing.ts +49 -0
- package/src/components/dialogs/commission-node-dialog/commission-node-thread.ts +76 -0
- package/src/components/dialogs/commission-node-dialog/commission-node-wifi.ts +90 -0
- package/src/components/dialogs/commission-node-dialog/show-commission-node-dialog.ts +14 -0
- package/src/components/ha-svg-icon.ts +66 -0
- package/src/entrypoint/main.ts +60 -0
- package/src/pages/components/context.ts +10 -0
- package/src/pages/components/footer.ts +39 -0
- package/src/pages/components/header.ts +87 -0
- package/src/pages/components/node-details.ts +252 -0
- package/src/pages/components/server-details.ts +124 -0
- package/src/pages/matter-cluster-view.ts +162 -0
- package/src/pages/matter-dashboard-app.ts +125 -0
- package/src/pages/matter-endpoint-view.ts +152 -0
- package/src/pages/matter-node-view.ts +126 -0
- package/src/pages/matter-server-view.ts +117 -0
- package/src/tsconfig.json +16 -0
- package/src/util/clone_class.ts +7 -0
- package/src/util/fire_event.ts +83 -0
- package/src/util/prevent_default.ts +7 -0
- package/src/util/routing.ts +10 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
class AccessControlTargetTransformer {
|
|
7
|
+
static {
|
|
8
|
+
this.KEY_MAPPING = {
|
|
9
|
+
"0": "cluster",
|
|
10
|
+
"1": "endpoint",
|
|
11
|
+
"2": "deviceType"
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
static transform(input) {
|
|
15
|
+
if (!input || typeof input !== "object") {
|
|
16
|
+
throw new Error("Invalid input: expected an object");
|
|
17
|
+
}
|
|
18
|
+
const result = {};
|
|
19
|
+
const keyMapping = AccessControlTargetTransformer.KEY_MAPPING;
|
|
20
|
+
for (const key in input) {
|
|
21
|
+
if (key in keyMapping) {
|
|
22
|
+
const mappedKey = keyMapping[key];
|
|
23
|
+
if (mappedKey) {
|
|
24
|
+
const value = input[key];
|
|
25
|
+
if (value === void 0) continue;
|
|
26
|
+
result[mappedKey] = value;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
class AccessControlEntryDataTransformer {
|
|
34
|
+
static {
|
|
35
|
+
this.KEY_MAPPING = {
|
|
36
|
+
"1": "privilege",
|
|
37
|
+
"2": "authMode",
|
|
38
|
+
"3": "subjects",
|
|
39
|
+
"4": "targets",
|
|
40
|
+
"254": "fabricIndex"
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
static transform(input) {
|
|
44
|
+
if (!input || typeof input !== "object") {
|
|
45
|
+
throw new Error("Invalid input: expected an object");
|
|
46
|
+
}
|
|
47
|
+
const result = {};
|
|
48
|
+
const keyMapping = AccessControlEntryDataTransformer.KEY_MAPPING;
|
|
49
|
+
for (const key in input) {
|
|
50
|
+
if (key in keyMapping) {
|
|
51
|
+
const mappedKey = keyMapping[key];
|
|
52
|
+
if (mappedKey) {
|
|
53
|
+
const value = input[key];
|
|
54
|
+
if (value === void 0) continue;
|
|
55
|
+
if (mappedKey === "subjects") {
|
|
56
|
+
result[mappedKey] = Array.isArray(value) ? value : void 0;
|
|
57
|
+
} else if (mappedKey === "targets") {
|
|
58
|
+
if (Array.isArray(value)) {
|
|
59
|
+
const _targets = Object.values(value).map(
|
|
60
|
+
(val) => AccessControlTargetTransformer.transform(val)
|
|
61
|
+
);
|
|
62
|
+
result[mappedKey] = _targets;
|
|
63
|
+
} else {
|
|
64
|
+
result[mappedKey] = void 0;
|
|
65
|
+
}
|
|
66
|
+
} else {
|
|
67
|
+
result[mappedKey] = value;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return result;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export {
|
|
76
|
+
AccessControlEntryDataTransformer,
|
|
77
|
+
AccessControlTargetTransformer
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dialogs/acl/model.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AA4BO,MAAM,+BAA+B;AAAA,EACxC;AAAA,SAAwB,cAEpB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,IACT;AAAA;AAAA,EAEA,OAAc,UAAU,OAAuC;AAC3D,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,SAA6C,CAAC;AACpD,UAAM,aAAa,+BAA+B;AAElD,eAAW,OAAO,OAAO;AACrB,UAAI,OAAO,YAAY;AACnB,cAAM,YAAY,WAAW,GAAG;AAChC,YAAI,WAAW;AACX,gBAAM,QAAQ,MAAM,GAAG;AACvB,cAAI,UAAU,OAAW;AACzB,iBAAO,SAAS,IAAI;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;AAEO,MAAM,kCAAkC;AAAA,EAC3C;AAAA,SAAwB,cAEpB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACX;AAAA;AAAA,EAEA,OAAc,UAAU,OAAsC;AAC1D,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,SAA4C,CAAC;AACnD,UAAM,aAAa,kCAAkC;AAErD,eAAW,OAAO,OAAO;AACrB,UAAI,OAAO,YAAY;AACnB,cAAM,YAAY,WAAW,GAAG;AAChC,YAAI,WAAW;AACX,gBAAM,QAAQ,MAAM,GAAG;AACvB,cAAI,UAAU,OAAW;AACzB,cAAI,cAAc,YAAY;AAC1B,mBAAO,SAAS,IAAI,MAAM,QAAQ,KAAK,IAAI,QAAQ;AAAA,UACvD,WAAW,cAAc,WAAW;AAChC,gBAAI,MAAM,QAAQ,KAAK,GAAG;AACtB,oBAAM,WAAW,OAAO,OAAO,KAAK,EAAE;AAAA,gBAAI,SACtC,+BAA+B,UAAU,GAAG;AAAA,cAChD;AACA,qBAAO,SAAS,IAAI;AAAA,YACxB,OAAO;AACH,qBAAO,SAAS,IAAI;AAAA,YACxB;AAAA,UACJ,OAAO;AACH,mBAAO,SAAS,IAAI;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
export type InputType = {
|
|
7
|
+
[key: string]: number | number[] | undefined;
|
|
8
|
+
};
|
|
9
|
+
export interface BindingEntryStruct {
|
|
10
|
+
node: number | undefined;
|
|
11
|
+
group: number | undefined;
|
|
12
|
+
endpoint: number | undefined;
|
|
13
|
+
cluster: number | undefined;
|
|
14
|
+
fabricIndex: number | undefined;
|
|
15
|
+
}
|
|
16
|
+
export declare class BindingEntryDataTransformer {
|
|
17
|
+
private static readonly KEY_MAPPING;
|
|
18
|
+
static transform(input: any): BindingEntryStruct;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/model.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,MAAM,SAAS,GAAG;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC;CAChD,CAAC;AAEF,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,qBAAa,2BAA2B;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAOjC;WAEY,SAAS,CAAC,KAAK,EAAE,GAAG,GAAG,kBAAkB;CA6B1D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
class BindingEntryDataTransformer {
|
|
7
|
+
static {
|
|
8
|
+
this.KEY_MAPPING = {
|
|
9
|
+
"1": "node",
|
|
10
|
+
"3": "endpoint",
|
|
11
|
+
"4": "cluster",
|
|
12
|
+
"254": "fabricIndex"
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
static transform(input) {
|
|
16
|
+
if (!input || typeof input !== "object") {
|
|
17
|
+
throw new Error("Invalid input: expected an object");
|
|
18
|
+
}
|
|
19
|
+
const result = {};
|
|
20
|
+
const keyMapping = BindingEntryDataTransformer.KEY_MAPPING;
|
|
21
|
+
for (const key in input) {
|
|
22
|
+
if (key in keyMapping) {
|
|
23
|
+
const mappedKey = keyMapping[key];
|
|
24
|
+
if (mappedKey) {
|
|
25
|
+
const value = input[key];
|
|
26
|
+
if (value === void 0) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (mappedKey === "fabricIndex") {
|
|
30
|
+
result[mappedKey] = value === void 0 ? void 0 : Number(value);
|
|
31
|
+
} else if (mappedKey === "node" || mappedKey === "endpoint") {
|
|
32
|
+
result[mappedKey] = Number(value);
|
|
33
|
+
} else {
|
|
34
|
+
result[mappedKey] = value;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export {
|
|
43
|
+
BindingEntryDataTransformer
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dialogs/binding/model.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,MAAM,4BAA4B;AAAA,EACrC;AAAA,SAAwB,cAEpB;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,OAAO;AAAA,IACX;AAAA;AAAA,EAEA,OAAc,UAAU,OAAgC;AACpD,QAAI,CAAC,SAAS,OAAO,UAAU,UAAU;AACrC,YAAM,IAAI,MAAM,mCAAmC;AAAA,IACvD;AAEA,UAAM,SAAsC,CAAC;AAC7C,UAAM,aAAa,4BAA4B;AAE/C,eAAW,OAAO,OAAO;AACrB,UAAI,OAAO,YAAY;AACnB,cAAM,YAAY,WAAW,GAAG;AAChC,YAAI,WAAW;AACX,gBAAM,QAAQ,MAAM,GAAG;AACvB,cAAI,UAAU,QAAW;AACrB;AAAA,UACJ;AACA,cAAI,cAAc,eAAe;AAC7B,mBAAO,SAAS,IAAI,UAAU,SAAY,SAAY,OAAO,KAAK;AAAA,UACtE,WAAW,cAAc,UAAU,cAAc,YAAY;AACzD,mBAAO,SAAS,IAAI,OAAO,KAAK;AAAA,UACpC,OAAO;AACH,mBAAO,SAAS,IAAI;AAAA,UACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AACJ;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-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/list/list";
|
|
9
|
+
import "@material/web/list/list-item";
|
|
10
|
+
import "@material/web/textfield/outlined-text-field";
|
|
11
|
+
import "../../../components/ha-svg-icon";
|
|
12
|
+
import { MatterClient, MatterNode } from "@matter-server/ws-client";
|
|
13
|
+
import { LitElement } from "lit";
|
|
14
|
+
export declare class NodeBindingDialog extends LitElement {
|
|
15
|
+
client: MatterClient;
|
|
16
|
+
node?: MatterNode;
|
|
17
|
+
endpoint: number;
|
|
18
|
+
private _targetNodeId;
|
|
19
|
+
private _targetEndpoint;
|
|
20
|
+
private _targetCluster;
|
|
21
|
+
private fetchBindingEntry;
|
|
22
|
+
private fetchACLEntry;
|
|
23
|
+
private deleteBindingHandler;
|
|
24
|
+
/** Helper to convert node_id (number | bigint) to number for API calls */
|
|
25
|
+
private getNodeIdAsNumber;
|
|
26
|
+
private removeNodeAtACLEntry;
|
|
27
|
+
private removeEntryAtACL;
|
|
28
|
+
private removeBindingAtIndex;
|
|
29
|
+
private syncBindingUpdates;
|
|
30
|
+
private handleBindingDeletionError;
|
|
31
|
+
private add_target_acl;
|
|
32
|
+
/** Convert local BindingEntryStruct to API BindingTarget (without fabricIndex) */
|
|
33
|
+
private toBindingTarget;
|
|
34
|
+
/** Convert local AccessControlEntryStruct to API AccessControlEntry (without fabricIndex) */
|
|
35
|
+
private toAccessControlEntry;
|
|
36
|
+
private add_bindings;
|
|
37
|
+
addBindingHandler(): Promise<void>;
|
|
38
|
+
private _close;
|
|
39
|
+
private _handleClosed;
|
|
40
|
+
private onChange;
|
|
41
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
42
|
+
static styles: import("lit").CSSResult;
|
|
43
|
+
}
|
|
44
|
+
declare global {
|
|
45
|
+
interface HTMLElementTagNameMap {
|
|
46
|
+
"node-binding-dialog": NodeBindingDialog;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=node-binding-dialog.d.ts.map
|
|
@@ -0,0 +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;AAcrD,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;IAuB5B,kFAAkF;IAClF,OAAO,CAAC,eAAe;IASvB,6FAA6F;IAC7F,OAAO,CAAC,oBAAoB;YAcd,YAAY;IAkBpB,iBAAiB;IAkEvB,OAAO,CAAC,MAAM;IAId,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,QAAQ;cAcG,MAAM;IAqFzB,OAAgB,MAAM,0BAkCpB;CACL;AAED,OAAO,CAAC,MAAM,CAAC;IACX,UAAU,qBAAqB;QAC3B,qBAAqB,EAAE,iBAAiB,CAAC;KAC5C;CACJ"}
|
|
@@ -0,0 +1,357 @@
|
|
|
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 2025-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/list/list";
|
|
19
|
+
import "@material/web/list/list-item";
|
|
20
|
+
import "@material/web/textfield/outlined-text-field";
|
|
21
|
+
import "../../../components/ha-svg-icon";
|
|
22
|
+
import { css, html, LitElement, nothing } from "lit";
|
|
23
|
+
import { customElement, property, query } from "lit/decorators.js";
|
|
24
|
+
import { preventDefault } from "../../../util/prevent_default.js";
|
|
25
|
+
import { BindingEntryDataTransformer } from "./model.js";
|
|
26
|
+
import {
|
|
27
|
+
AccessControlEntryDataTransformer
|
|
28
|
+
} from "../acl/model.js";
|
|
29
|
+
import { consume } from "@lit/context";
|
|
30
|
+
import { clientContext } from "../../../client/client-context.js";
|
|
31
|
+
let NodeBindingDialog = class extends LitElement {
|
|
32
|
+
fetchBindingEntry() {
|
|
33
|
+
const bindings_raw = this.node.attributes[this.endpoint + "/30/0"];
|
|
34
|
+
if (!bindings_raw) return [];
|
|
35
|
+
return Object.values(bindings_raw).map((value) => BindingEntryDataTransformer.transform(value));
|
|
36
|
+
}
|
|
37
|
+
fetchACLEntry(targetNodeId) {
|
|
38
|
+
const acl_cluster_raw = this.client.nodes[targetNodeId]?.attributes["0/31/0"];
|
|
39
|
+
if (!acl_cluster_raw) return [];
|
|
40
|
+
return Object.values(acl_cluster_raw).map(
|
|
41
|
+
(value) => AccessControlEntryDataTransformer.transform(value)
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
async deleteBindingHandler(index) {
|
|
45
|
+
const rawBindings = this.fetchBindingEntry();
|
|
46
|
+
try {
|
|
47
|
+
const targetNodeId = rawBindings[index].node;
|
|
48
|
+
const endpoint = rawBindings[index].endpoint;
|
|
49
|
+
if (targetNodeId === void 0 || endpoint === void 0) return;
|
|
50
|
+
await this.removeNodeAtACLEntry(this.getNodeIdAsNumber(), endpoint, targetNodeId);
|
|
51
|
+
const updatedBindings = this.removeBindingAtIndex(rawBindings, index);
|
|
52
|
+
await this.syncBindingUpdates(updatedBindings, index);
|
|
53
|
+
} catch (error) {
|
|
54
|
+
this.handleBindingDeletionError(error);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/** Helper to convert node_id (number | bigint) to number for API calls */
|
|
58
|
+
getNodeIdAsNumber() {
|
|
59
|
+
const nodeId = this.node.node_id;
|
|
60
|
+
return typeof nodeId === "bigint" ? Number(nodeId) : nodeId;
|
|
61
|
+
}
|
|
62
|
+
async removeNodeAtACLEntry(sourceNodeId, sourceEndpoint, targetNodeId) {
|
|
63
|
+
const aclEntries = this.fetchACLEntry(targetNodeId);
|
|
64
|
+
const updatedACLEntries = aclEntries.map((entry) => this.removeEntryAtACL(sourceNodeId, sourceEndpoint, entry)).filter((entry) => entry !== void 0);
|
|
65
|
+
const apiEntries = updatedACLEntries.map((e) => this.toAccessControlEntry(e));
|
|
66
|
+
await this.client.setACLEntry(targetNodeId, apiEntries);
|
|
67
|
+
}
|
|
68
|
+
removeEntryAtACL(nodeId, sourceEndpoint, entry) {
|
|
69
|
+
const hasSubject = entry.subjects.includes(nodeId);
|
|
70
|
+
if (!hasSubject) return entry;
|
|
71
|
+
const hasTarget = entry.targets.filter((item) => item.endpoint === sourceEndpoint);
|
|
72
|
+
return hasTarget.length > 0 ? void 0 : entry;
|
|
73
|
+
}
|
|
74
|
+
removeBindingAtIndex(bindings, index) {
|
|
75
|
+
return [...bindings.slice(0, index), ...bindings.slice(index + 1)];
|
|
76
|
+
}
|
|
77
|
+
async syncBindingUpdates(updatedBindings, index) {
|
|
78
|
+
const apiBindings = updatedBindings.map((b) => this.toBindingTarget(b));
|
|
79
|
+
await this.client.setNodeBinding(this.getNodeIdAsNumber(), this.endpoint, apiBindings);
|
|
80
|
+
const attributePath = `${this.endpoint}/30/0`;
|
|
81
|
+
const currentBindings = this.node.attributes[attributePath];
|
|
82
|
+
const updatedAttributes = {
|
|
83
|
+
...this.node.attributes,
|
|
84
|
+
[attributePath]: currentBindings ? this.removeBindingAtIndex(currentBindings, index) : []
|
|
85
|
+
};
|
|
86
|
+
this.node.attributes = updatedAttributes;
|
|
87
|
+
this.requestUpdate();
|
|
88
|
+
}
|
|
89
|
+
handleBindingDeletionError(error) {
|
|
90
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
91
|
+
console.error(`Binding deletion failed: ${errorMessage}`);
|
|
92
|
+
}
|
|
93
|
+
async add_target_acl(targetNodeId, entry) {
|
|
94
|
+
try {
|
|
95
|
+
const rawEntries = this.client.nodes[targetNodeId]?.attributes["0/31/0"];
|
|
96
|
+
const entries = rawEntries ? Object.values(rawEntries).map((v) => AccessControlEntryDataTransformer.transform(v)) : [];
|
|
97
|
+
entries.push(entry);
|
|
98
|
+
const apiEntries = entries.map((e) => this.toAccessControlEntry(e));
|
|
99
|
+
const result = await this.client.setACLEntry(targetNodeId, apiEntries);
|
|
100
|
+
if (result && result.length > 0) {
|
|
101
|
+
return result[0].status === 0;
|
|
102
|
+
}
|
|
103
|
+
return true;
|
|
104
|
+
} catch (err) {
|
|
105
|
+
console.error("add acl error:", err);
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/** Convert local BindingEntryStruct to API BindingTarget (without fabricIndex) */
|
|
110
|
+
toBindingTarget(entry) {
|
|
111
|
+
return {
|
|
112
|
+
node: entry.node ?? null,
|
|
113
|
+
group: entry.group ?? null,
|
|
114
|
+
endpoint: entry.endpoint ?? null,
|
|
115
|
+
cluster: entry.cluster ?? null
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
/** Convert local AccessControlEntryStruct to API AccessControlEntry (without fabricIndex) */
|
|
119
|
+
toAccessControlEntry(entry) {
|
|
120
|
+
return {
|
|
121
|
+
privilege: entry.privilege,
|
|
122
|
+
auth_mode: entry.authMode,
|
|
123
|
+
subjects: entry.subjects ?? null,
|
|
124
|
+
targets: entry.targets?.map((t) => ({
|
|
125
|
+
cluster: t.cluster ?? null,
|
|
126
|
+
endpoint: t.endpoint ?? null,
|
|
127
|
+
device_type: t.deviceType ?? null
|
|
128
|
+
})) ?? null
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
async add_bindings(endpoint, bindingEntry) {
|
|
132
|
+
const bindings = this.fetchBindingEntry();
|
|
133
|
+
bindings.push(bindingEntry);
|
|
134
|
+
try {
|
|
135
|
+
const apiBindings = bindings.map((b) => this.toBindingTarget(b));
|
|
136
|
+
const result = await this.client.setNodeBinding(this.getNodeIdAsNumber(), endpoint, apiBindings);
|
|
137
|
+
if (result && result.length > 0) {
|
|
138
|
+
return result[0].status === 0;
|
|
139
|
+
}
|
|
140
|
+
return true;
|
|
141
|
+
} catch (err) {
|
|
142
|
+
console.log("add bindings error:", err);
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async addBindingHandler() {
|
|
147
|
+
const targetNodeId = this._targetNodeId.value ? parseInt(this._targetNodeId.value, 10) : void 0;
|
|
148
|
+
const targetEndpoint = this._targetEndpoint.value ? parseInt(this._targetEndpoint.value, 10) : void 0;
|
|
149
|
+
const targetCluster = this._targetCluster.value ? parseInt(this._targetCluster.value, 10) : void 0;
|
|
150
|
+
if (targetNodeId === void 0 || targetNodeId <= 0 || targetNodeId > 65535) {
|
|
151
|
+
alert("Please enter a valid target node ID");
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
if (targetEndpoint === void 0 || targetEndpoint <= 0 || targetEndpoint > 65534) {
|
|
155
|
+
alert("Please enter a valid target endpoint");
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (targetCluster !== void 0) {
|
|
159
|
+
if (targetCluster < 0 || targetCluster > 32767) {
|
|
160
|
+
alert("Please enter a valid target cluster");
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const targets = {
|
|
165
|
+
endpoint: targetEndpoint,
|
|
166
|
+
cluster: targetCluster,
|
|
167
|
+
deviceType: void 0
|
|
168
|
+
};
|
|
169
|
+
const acl_entry = {
|
|
170
|
+
privilege: 5,
|
|
171
|
+
authMode: 2,
|
|
172
|
+
subjects: [this.getNodeIdAsNumber()],
|
|
173
|
+
targets: [targets],
|
|
174
|
+
fabricIndex: 0
|
|
175
|
+
// Placeholder - server will use correct fabric index
|
|
176
|
+
};
|
|
177
|
+
const result_acl = await this.add_target_acl(targetNodeId, acl_entry);
|
|
178
|
+
if (!result_acl) {
|
|
179
|
+
alert("add target acl error!");
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const endpoint = this.endpoint;
|
|
183
|
+
const bindingEntry = {
|
|
184
|
+
node: targetNodeId,
|
|
185
|
+
endpoint: targetEndpoint,
|
|
186
|
+
group: void 0,
|
|
187
|
+
cluster: targetCluster,
|
|
188
|
+
fabricIndex: void 0
|
|
189
|
+
// Server will use correct fabric index
|
|
190
|
+
};
|
|
191
|
+
const result_binding = await this.add_bindings(endpoint, bindingEntry);
|
|
192
|
+
if (result_binding) {
|
|
193
|
+
this._targetNodeId.value = "";
|
|
194
|
+
this._targetEndpoint.value = "";
|
|
195
|
+
this._targetCluster.value = "";
|
|
196
|
+
this.requestUpdate();
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
_close() {
|
|
200
|
+
this.shadowRoot.querySelector("md-dialog").close();
|
|
201
|
+
}
|
|
202
|
+
_handleClosed() {
|
|
203
|
+
this.parentNode.removeChild(this);
|
|
204
|
+
}
|
|
205
|
+
onChange(e) {
|
|
206
|
+
const textfield = e.target;
|
|
207
|
+
const value = parseInt(textfield.value, 10);
|
|
208
|
+
if (parseInt(textfield.max, 10) < value || value < parseInt(textfield.min, 10)) {
|
|
209
|
+
textfield.error = true;
|
|
210
|
+
textfield.errorText = "value error";
|
|
211
|
+
} else {
|
|
212
|
+
textfield.error = false;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
render() {
|
|
216
|
+
const rawBindings = this.node.attributes[this.endpoint + "/30/0"];
|
|
217
|
+
const bindings = rawBindings ? Object.values(rawBindings).map((entry) => BindingEntryDataTransformer.transform(entry)) : [];
|
|
218
|
+
return html`
|
|
219
|
+
<md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
|
|
220
|
+
<div slot="headline">
|
|
221
|
+
<div>Binding</div>
|
|
222
|
+
</div>
|
|
223
|
+
<div slot="content">
|
|
224
|
+
<div>
|
|
225
|
+
<md-list style="padding-bottom:18px;">
|
|
226
|
+
${Object.values(bindings).map(
|
|
227
|
+
(entry, index) => html`
|
|
228
|
+
<md-list-item style="background:cornsilk;">
|
|
229
|
+
<div style="display:flex;gap:10px;">
|
|
230
|
+
<div>node:${entry["node"]}</div>
|
|
231
|
+
<div>endpoint:${entry["endpoint"]}</div>
|
|
232
|
+
${entry["cluster"] ? html` <div>cluster:${entry["cluster"]}</div> ` : nothing}
|
|
233
|
+
</div>
|
|
234
|
+
<div slot="end">
|
|
235
|
+
<md-text-button
|
|
236
|
+
@click=${() => this.deleteBindingHandler(index)}
|
|
237
|
+
>delete</md-text-button
|
|
238
|
+
</div>
|
|
239
|
+
</md-list-item>
|
|
240
|
+
`
|
|
241
|
+
)}
|
|
242
|
+
</md-list>
|
|
243
|
+
<div class="inline-group">
|
|
244
|
+
<div class="group-label">target</div>
|
|
245
|
+
<div class="group-input">
|
|
246
|
+
<md-outlined-text-field
|
|
247
|
+
label="node id"
|
|
248
|
+
name="NodeId"
|
|
249
|
+
type="number"
|
|
250
|
+
min="0"
|
|
251
|
+
max="65535"
|
|
252
|
+
class="target-item"
|
|
253
|
+
@change=${this.onChange}
|
|
254
|
+
supporting-text="required"
|
|
255
|
+
></md-outlined-text-field>
|
|
256
|
+
<md-outlined-text-field
|
|
257
|
+
label="endpoint"
|
|
258
|
+
name="Endpoint"
|
|
259
|
+
type="number"
|
|
260
|
+
min="0"
|
|
261
|
+
max="65534"
|
|
262
|
+
@change=${this.onChange}
|
|
263
|
+
class="target-item"
|
|
264
|
+
supporting-text="required"
|
|
265
|
+
></md-outlined-text-field>
|
|
266
|
+
<md-outlined-text-field
|
|
267
|
+
label="cluster"
|
|
268
|
+
name="Cluster"
|
|
269
|
+
type="number"
|
|
270
|
+
min="0"
|
|
271
|
+
max="32767"
|
|
272
|
+
@change=${this.onChange}
|
|
273
|
+
class="target-item"
|
|
274
|
+
supporting-text="optional"
|
|
275
|
+
></md-outlined-text-field>
|
|
276
|
+
</div>
|
|
277
|
+
</div>
|
|
278
|
+
<div style="margin:8px;">
|
|
279
|
+
<Text style="font-size: 10px;font-style: italic;font-weight: bold;">
|
|
280
|
+
Note: The Cluster ID field is optional according to the Matter specification. If you
|
|
281
|
+
leave it blank, the binding applies to all eligible clusters on the target endpoint.
|
|
282
|
+
However, some devices may require a specific cluster to be set in order for the binding
|
|
283
|
+
to function correctly. If you experience unexpected behavior, try specifying the cluster
|
|
284
|
+
explicitly.
|
|
285
|
+
</Text>
|
|
286
|
+
</div>
|
|
287
|
+
</div>
|
|
288
|
+
</div>
|
|
289
|
+
<div slot="actions">
|
|
290
|
+
<md-text-button @click=${this.addBindingHandler}>Add</md-text-button>
|
|
291
|
+
<md-text-button @click=${this._close}>Cancel</md-text-button>
|
|
292
|
+
</div>
|
|
293
|
+
</md-dialog>
|
|
294
|
+
`;
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
NodeBindingDialog.styles = css`
|
|
298
|
+
.inline-group {
|
|
299
|
+
display: flex;
|
|
300
|
+
border: 2px solid #673ab7;
|
|
301
|
+
padding: 1px;
|
|
302
|
+
border-radius: 8px;
|
|
303
|
+
position: relative;
|
|
304
|
+
margin: 8px;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
.group-input {
|
|
308
|
+
display: flex;
|
|
309
|
+
width: -webkit-fill-available;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
.target-item {
|
|
313
|
+
display: inline-block;
|
|
314
|
+
padding: 20px 10px 10px 10px;
|
|
315
|
+
border-radius: 4px;
|
|
316
|
+
vertical-align: middle;
|
|
317
|
+
min-width: 80px;
|
|
318
|
+
text-align: center;
|
|
319
|
+
width: -webkit-fill-available;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
.group-label {
|
|
323
|
+
position: absolute;
|
|
324
|
+
left: 15px;
|
|
325
|
+
top: -12px;
|
|
326
|
+
background: #673ab7;
|
|
327
|
+
color: white;
|
|
328
|
+
padding: 3px 15px;
|
|
329
|
+
border-radius: 4px;
|
|
330
|
+
}
|
|
331
|
+
`;
|
|
332
|
+
__decorateClass([
|
|
333
|
+
consume({ context: clientContext, subscribe: true }),
|
|
334
|
+
property({ attribute: false })
|
|
335
|
+
], NodeBindingDialog.prototype, "client", 2);
|
|
336
|
+
__decorateClass([
|
|
337
|
+
property()
|
|
338
|
+
], NodeBindingDialog.prototype, "node", 2);
|
|
339
|
+
__decorateClass([
|
|
340
|
+
property({ attribute: false })
|
|
341
|
+
], NodeBindingDialog.prototype, "endpoint", 2);
|
|
342
|
+
__decorateClass([
|
|
343
|
+
query("md-outlined-text-field[name='NodeId']")
|
|
344
|
+
], NodeBindingDialog.prototype, "_targetNodeId", 2);
|
|
345
|
+
__decorateClass([
|
|
346
|
+
query("md-outlined-text-field[name='Endpoint']")
|
|
347
|
+
], NodeBindingDialog.prototype, "_targetEndpoint", 2);
|
|
348
|
+
__decorateClass([
|
|
349
|
+
query("md-outlined-text-field[name='Cluster']")
|
|
350
|
+
], NodeBindingDialog.prototype, "_targetCluster", 2);
|
|
351
|
+
NodeBindingDialog = __decorateClass([
|
|
352
|
+
customElement("node-binding-dialog")
|
|
353
|
+
], NodeBindingDialog);
|
|
354
|
+
export {
|
|
355
|
+
NodeBindingDialog
|
|
356
|
+
};
|
|
357
|
+
//# sourceMappingURL=node-binding-dialog.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dialogs/binding/node-binding-dialog.ts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { MatterClient, MatterNode } from "@matter-server/ws-client";
|
|
7
|
+
export declare const showNodeBindingDialog: (client: MatterClient, node: MatterNode, endpoint: number) => Promise<void>;
|
|
8
|
+
//# sourceMappingURL=show-node-binding-dialog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"show-node-binding-dialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/dialogs/binding/show-node-binding-dialog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEpE,eAAO,MAAM,qBAAqB,GAAU,QAAQ,YAAY,EAAE,MAAM,UAAU,EAAE,UAAU,MAAM,kBAOnG,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-2026 Open Home Foundation
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
const showNodeBindingDialog = async (client, node, endpoint) => {
|
|
7
|
+
await import("./node-binding-dialog.js");
|
|
8
|
+
const dialog = document.createElement("node-binding-dialog");
|
|
9
|
+
dialog.client = client;
|
|
10
|
+
dialog.node = node;
|
|
11
|
+
dialog.endpoint = endpoint;
|
|
12
|
+
document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
|
|
13
|
+
};
|
|
14
|
+
export {
|
|
15
|
+
showNodeBindingDialog
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=show-node-binding-dialog.js.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/components/dialogs/binding/show-node-binding-dialog.ts"],
|
|
4
|
+
"mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,MAAM,wBAAwB,OAAO,QAAsB,MAAkB,aAAqB;AACrG,QAAM,OAAO,0BAA0B;AACvC,QAAM,SAAS,SAAS,cAAc,qBAAqB;AAC3D,SAAO,SAAS;AAChB,SAAO,OAAO;AACd,SAAO,WAAW;AAClB,WAAS,cAAc,sBAAsB,GAAG,WAAW,YAAY,MAAM;AACjF;",
|
|
5
|
+
"names": []
|
|
6
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025-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/list/list";
|
|
9
|
+
import "@material/web/list/list-item";
|
|
10
|
+
import { MatterClient, MatterNode } from "@matter-server/ws-client";
|
|
11
|
+
import { LitElement } from "lit";
|
|
12
|
+
export declare class ComissionNodeDialog extends LitElement {
|
|
13
|
+
client: MatterClient;
|
|
14
|
+
private _mode?;
|
|
15
|
+
protected render(): import("lit-html").TemplateResult<1>;
|
|
16
|
+
private _commissionWifi;
|
|
17
|
+
private _commissionThread;
|
|
18
|
+
private _commissionExisting;
|
|
19
|
+
private _nodeCommissioned;
|
|
20
|
+
private _close;
|
|
21
|
+
private _handleClosed;
|
|
22
|
+
}
|
|
23
|
+
declare global {
|
|
24
|
+
interface HTMLElementTagNameMap {
|
|
25
|
+
"commission-node-dialog": ComissionNodeDialog;
|
|
26
|
+
}
|
|
27
|
+
interface HASSDomEvents {
|
|
28
|
+
"node-commissioned": MatterNode;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=commission-node-dialog.d.ts.map
|