@matter-server/dashboard 0.7.0-alpha.0-20260512-b404bea → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/esm/client/client-context.d.ts +3 -0
  2. package/dist/esm/client/client-context.d.ts.map +1 -1
  3. package/dist/esm/client/client-context.js +3 -1
  4. package/dist/esm/client/client-context.js.map +1 -1
  5. package/dist/esm/client/models/descriptions.js +45 -45
  6. package/dist/esm/components/avsum-ptz-strip.d.ts +41 -0
  7. package/dist/esm/components/avsum-ptz-strip.d.ts.map +1 -0
  8. package/dist/esm/components/avsum-ptz-strip.js +379 -0
  9. package/dist/esm/components/avsum-ptz-strip.js.map +6 -0
  10. package/dist/esm/components/dialogs/binding/node-binding-dialog.js +1 -1
  11. package/dist/esm/components/dialogs/binding/show-node-binding-dialog.d.ts +2 -2
  12. package/dist/esm/components/dialogs/binding/show-node-binding-dialog.d.ts.map +1 -1
  13. package/dist/esm/components/dialogs/binding/show-node-binding-dialog.js +1 -2
  14. package/dist/esm/components/dialogs/binding/show-node-binding-dialog.js.map +1 -1
  15. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts +1 -0
  16. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.d.ts.map +1 -1
  17. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js +12 -3
  18. package/dist/esm/components/dialogs/commission-node-dialog/commission-node-dialog.js.map +1 -1
  19. package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.d.ts +1 -2
  20. package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.d.ts.map +1 -1
  21. package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.js +1 -2
  22. package/dist/esm/components/dialogs/commission-node-dialog/show-commission-node-dialog.js.map +1 -1
  23. package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts +0 -2
  24. package/dist/esm/components/dialogs/settings/log-level-dialog.d.ts.map +1 -1
  25. package/dist/esm/components/dialogs/settings/log-level-dialog.js +2 -8
  26. package/dist/esm/components/dialogs/settings/log-level-dialog.js.map +1 -1
  27. package/dist/esm/components/dialogs/settings/log-level-section.d.ts +2 -1
  28. package/dist/esm/components/dialogs/settings/log-level-section.d.ts.map +1 -1
  29. package/dist/esm/components/dialogs/settings/log-level-section.js +10 -2
  30. package/dist/esm/components/dialogs/settings/log-level-section.js.map +1 -1
  31. package/dist/esm/components/dialogs/settings/settings-dialog.d.ts +1 -0
  32. package/dist/esm/components/dialogs/settings/settings-dialog.d.ts.map +1 -1
  33. package/dist/esm/components/dialogs/settings/settings-dialog.js +8 -2
  34. package/dist/esm/components/dialogs/settings/settings-dialog.js.map +1 -1
  35. package/dist/esm/components/dialogs/settings/show-log-level-dialog.d.ts +1 -2
  36. package/dist/esm/components/dialogs/settings/show-log-level-dialog.d.ts.map +1 -1
  37. package/dist/esm/components/dialogs/settings/show-log-level-dialog.js +1 -2
  38. package/dist/esm/components/dialogs/settings/show-log-level-dialog.js.map +1 -1
  39. package/dist/esm/components/dialogs/settings/show-settings-dialog.d.ts +1 -2
  40. package/dist/esm/components/dialogs/settings/show-settings-dialog.d.ts.map +1 -1
  41. package/dist/esm/components/dialogs/settings/show-settings-dialog.js +1 -2
  42. package/dist/esm/components/dialogs/settings/show-settings-dialog.js.map +1 -1
  43. package/dist/esm/components/webrtc-stream-view.d.ts +97 -0
  44. package/dist/esm/components/webrtc-stream-view.d.ts.map +1 -0
  45. package/dist/esm/components/webrtc-stream-view.js +878 -0
  46. package/dist/esm/components/webrtc-stream-view.js.map +6 -0
  47. package/dist/esm/pages/camera-overlay.d.ts +63 -0
  48. package/dist/esm/pages/camera-overlay.d.ts.map +1 -0
  49. package/dist/esm/pages/camera-overlay.js +546 -0
  50. package/dist/esm/pages/camera-overlay.js.map +6 -0
  51. package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts +1 -0
  52. package/dist/esm/pages/cluster-commands/base-cluster-commands.d.ts.map +1 -1
  53. package/dist/esm/pages/cluster-commands/base-cluster-commands.js +11 -1
  54. package/dist/esm/pages/cluster-commands/base-cluster-commands.js.map +1 -1
  55. package/dist/esm/pages/cluster-commands/clusters/avsum-commands.d.ts +38 -0
  56. package/dist/esm/pages/cluster-commands/clusters/avsum-commands.d.ts.map +1 -0
  57. package/dist/esm/pages/cluster-commands/clusters/avsum-commands.js +534 -0
  58. package/dist/esm/pages/cluster-commands/clusters/avsum-commands.js.map +6 -0
  59. package/dist/esm/pages/cluster-commands/clusters/chime-commands.d.ts +32 -0
  60. package/dist/esm/pages/cluster-commands/clusters/chime-commands.d.ts.map +1 -0
  61. package/dist/esm/pages/cluster-commands/clusters/chime-commands.js +261 -0
  62. package/dist/esm/pages/cluster-commands/clusters/chime-commands.js.map +6 -0
  63. package/dist/esm/pages/cluster-commands/index.d.ts +2 -0
  64. package/dist/esm/pages/cluster-commands/index.d.ts.map +1 -1
  65. package/dist/esm/pages/cluster-commands/index.js +2 -0
  66. package/dist/esm/pages/cluster-commands/index.js.map +1 -1
  67. package/dist/esm/pages/components/header.d.ts +1 -0
  68. package/dist/esm/pages/components/header.d.ts.map +1 -1
  69. package/dist/esm/pages/components/header.js +10 -3
  70. package/dist/esm/pages/components/header.js.map +1 -1
  71. package/dist/esm/pages/components/node-details.d.ts +3 -0
  72. package/dist/esm/pages/components/node-details.d.ts.map +1 -1
  73. package/dist/esm/pages/components/node-details.js +34 -4
  74. package/dist/esm/pages/components/node-details.js.map +1 -1
  75. package/dist/esm/pages/components/server-details.d.ts +1 -0
  76. package/dist/esm/pages/components/server-details.d.ts.map +1 -1
  77. package/dist/esm/pages/components/server-details.js +11 -2
  78. package/dist/esm/pages/components/server-details.js.map +1 -1
  79. package/dist/esm/pages/matter-cluster-view.d.ts +1 -0
  80. package/dist/esm/pages/matter-cluster-view.d.ts.map +1 -1
  81. package/dist/esm/pages/matter-cluster-view.js +15 -8
  82. package/dist/esm/pages/matter-cluster-view.js.map +1 -1
  83. package/dist/esm/pages/matter-dashboard-app.d.ts +3 -1
  84. package/dist/esm/pages/matter-dashboard-app.d.ts.map +1 -1
  85. package/dist/esm/pages/matter-dashboard-app.js +12 -16
  86. package/dist/esm/pages/matter-dashboard-app.js.map +1 -1
  87. package/dist/esm/pages/matter-endpoint-view.d.ts +2 -1
  88. package/dist/esm/pages/matter-endpoint-view.d.ts.map +1 -1
  89. package/dist/esm/pages/matter-endpoint-view.js +17 -3
  90. package/dist/esm/pages/matter-endpoint-view.js.map +1 -1
  91. package/dist/esm/pages/matter-network-view.d.ts.map +1 -1
  92. package/dist/esm/pages/matter-network-view.js +5 -1
  93. package/dist/esm/pages/matter-network-view.js.map +1 -1
  94. package/dist/esm/pages/matter-node-view.d.ts +1 -0
  95. package/dist/esm/pages/matter-node-view.d.ts.map +1 -1
  96. package/dist/esm/pages/matter-node-view.js +15 -7
  97. package/dist/esm/pages/matter-node-view.js.map +1 -1
  98. package/dist/esm/pages/matter-server-view.d.ts +1 -0
  99. package/dist/esm/pages/matter-server-view.d.ts.map +1 -1
  100. package/dist/esm/pages/matter-server-view.js +13 -2
  101. package/dist/esm/pages/matter-server-view.js.map +1 -1
  102. package/dist/esm/pages/network/network-details.d.ts.map +1 -1
  103. package/dist/esm/pages/network/network-details.js +0 -3
  104. package/dist/esm/pages/network/network-details.js.map +1 -1
  105. package/dist/esm/pages/network/update-connections-dialog.d.ts +1 -0
  106. package/dist/esm/pages/network/update-connections-dialog.d.ts.map +1 -1
  107. package/dist/esm/pages/network/update-connections-dialog.js +7 -1
  108. package/dist/esm/pages/network/update-connections-dialog.js.map +1 -1
  109. package/dist/esm/util/attribute-shapes.d.ts +11 -0
  110. package/dist/esm/util/attribute-shapes.d.ts.map +1 -0
  111. package/dist/esm/util/attribute-shapes.js +37 -0
  112. package/dist/esm/util/attribute-shapes.js.map +6 -0
  113. package/dist/esm/util/avsum.d.ts +69 -0
  114. package/dist/esm/util/avsum.d.ts.map +1 -0
  115. package/dist/esm/util/avsum.js +150 -0
  116. package/dist/esm/util/avsum.js.map +6 -0
  117. package/dist/esm/util/chime.d.ts +20 -0
  118. package/dist/esm/util/chime.d.ts.map +1 -0
  119. package/dist/esm/util/chime.js +60 -0
  120. package/dist/esm/util/chime.js.map +6 -0
  121. package/dist/web/js/{attribute-write-dialog-DzMWN_T3.js → attribute-write-dialog-DLRP2hlx.js} +1 -1
  122. package/dist/web/js/{command-invoke-dialog-BhAOXzjX.js → command-invoke-dialog-BcCfT1sn.js} +1 -1
  123. package/dist/web/js/{commission-node-dialog-DF87YIqR.js → commission-node-dialog-BfldkUxD.js} +16 -8
  124. package/dist/web/js/{commission-node-existing-DLcWvJTL.js → commission-node-existing-omW-An0J.js} +2 -2
  125. package/dist/web/js/{commission-node-thread-m2fqED-2.js → commission-node-thread-BZpJIxlI.js} +2 -2
  126. package/dist/web/js/{commission-node-wifi-PCsot-CX.js → commission-node-wifi-HA2pYTW2.js} +2 -2
  127. package/dist/web/js/{dialog-box-DiqYXM8c.js → dialog-box-BjDID9j4.js} +1 -1
  128. package/dist/web/js/{fire_event-BnpND_gK.js → fire_event-CChLgSiV.js} +1 -1
  129. package/dist/web/js/main.js +39 -1
  130. package/dist/web/js/{matter-dashboard-app-BZOhBELR.js → matter-dashboard-app-XUWBcruM.js} +8265 -2035
  131. package/dist/web/js/{node-binding-dialog-B3lVN-FU.js → node-binding-dialog-_yHtf7WP.js} +2 -2
  132. package/dist/web/js/settings-dialog-BFPfOSOI.js +607 -0
  133. package/package.json +4 -4
  134. package/src/client/client-context.ts +1 -0
  135. package/src/client/models/descriptions.ts +45 -45
  136. package/src/components/avsum-ptz-strip.ts +388 -0
  137. package/src/components/dialogs/binding/node-binding-dialog.ts +1 -1
  138. package/src/components/dialogs/binding/show-node-binding-dialog.ts +2 -3
  139. package/src/components/dialogs/commission-node-dialog/commission-node-dialog.ts +10 -4
  140. package/src/components/dialogs/commission-node-dialog/show-commission-node-dialog.ts +1 -4
  141. package/src/components/dialogs/settings/log-level-dialog.ts +2 -9
  142. package/src/components/dialogs/settings/log-level-section.ts +11 -4
  143. package/src/components/dialogs/settings/settings-dialog.ts +8 -3
  144. package/src/components/dialogs/settings/show-log-level-dialog.ts +1 -4
  145. package/src/components/dialogs/settings/show-settings-dialog.ts +1 -4
  146. package/src/components/webrtc-stream-view.ts +999 -0
  147. package/src/pages/camera-overlay.ts +562 -0
  148. package/src/pages/cluster-commands/base-cluster-commands.ts +7 -1
  149. package/src/pages/cluster-commands/clusters/avsum-commands.ts +562 -0
  150. package/src/pages/cluster-commands/clusters/chime-commands.ts +272 -0
  151. package/src/pages/cluster-commands/index.ts +2 -0
  152. package/src/pages/components/header.ts +7 -3
  153. package/src/pages/components/node-details.ts +33 -3
  154. package/src/pages/components/server-details.ts +8 -2
  155. package/src/pages/matter-cluster-view.ts +13 -9
  156. package/src/pages/matter-dashboard-app.ts +11 -16
  157. package/src/pages/matter-endpoint-view.ts +13 -5
  158. package/src/pages/matter-network-view.ts +3 -1
  159. package/src/pages/matter-node-view.ts +9 -7
  160. package/src/pages/matter-server-view.ts +7 -2
  161. package/src/pages/network/network-details.ts +0 -3
  162. package/src/pages/network/update-connections-dialog.ts +6 -1
  163. package/src/util/attribute-shapes.ts +34 -0
  164. package/src/util/avsum.ts +212 -0
  165. package/src/util/chime.ts +82 -0
  166. package/dist/esm/util/clone_class.d.ts +0 -7
  167. package/dist/esm/util/clone_class.d.ts.map +0 -1
  168. package/dist/esm/util/clone_class.js +0 -10
  169. package/dist/esm/util/clone_class.js.map +0 -6
  170. package/dist/web/js/settings-dialog-D75IAPKe.js +0 -4039
  171. package/src/util/clone_class.ts +0 -7
@@ -0,0 +1,150 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025-2026 Open Home Foundation
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { asObject, pickNumber, pickString } from "./attribute-shapes.js";
7
+ const AVSUM_CLUSTER_ID = 1362;
8
+ const ATTR_MPTZ_POSITION = 0;
9
+ const ATTR_MAX_PRESETS = 1;
10
+ const ATTR_MPTZ_PRESETS = 2;
11
+ const ATTR_DPTZ_STREAMS = 3;
12
+ const ATTR_ZOOM_MAX = 4;
13
+ const ATTR_TILT_MIN = 5;
14
+ const ATTR_TILT_MAX = 6;
15
+ const ATTR_PAN_MIN = 7;
16
+ const ATTR_PAN_MAX = 8;
17
+ const ATTR_MOVEMENT_STATE = 9;
18
+ const ATTR_FEATURE_MAP = 65532;
19
+ const AVSUM_FEAT_DPTZ = 1 << 0;
20
+ const AVSUM_FEAT_MPAN = 1 << 1;
21
+ const AVSUM_FEAT_MTILT = 1 << 2;
22
+ const AVSUM_FEAT_MZOOM = 1 << 3;
23
+ const AVSUM_FEAT_MPRESETS = 1 << 4;
24
+ function readAttr(node, endpoint, attrId) {
25
+ return node.attributes[`${endpoint}/${AVSUM_CLUSTER_ID}/${attrId}`];
26
+ }
27
+ function readFeatures(node, endpoint) {
28
+ const fm = readAttr(node, endpoint, ATTR_FEATURE_MAP);
29
+ const bits = typeof fm === "number" ? fm : 0;
30
+ return {
31
+ dptz: (bits & AVSUM_FEAT_DPTZ) !== 0,
32
+ mPan: (bits & AVSUM_FEAT_MPAN) !== 0,
33
+ mTilt: (bits & AVSUM_FEAT_MTILT) !== 0,
34
+ mZoom: (bits & AVSUM_FEAT_MZOOM) !== 0,
35
+ mPresets: (bits & AVSUM_FEAT_MPRESETS) !== 0
36
+ };
37
+ }
38
+ function pickFieldNumber(obj, named, tagId) {
39
+ return pickNumber(obj, named) ?? pickNumber(obj, tagId);
40
+ }
41
+ function readPosition(node, endpoint) {
42
+ const obj = asObject(readAttr(node, endpoint, ATTR_MPTZ_POSITION));
43
+ if (!obj) return { pan: null, tilt: null, zoom: null };
44
+ return {
45
+ pan: pickFieldNumber(obj, "pan", "0"),
46
+ tilt: pickFieldNumber(obj, "tilt", "1"),
47
+ zoom: pickFieldNumber(obj, "zoom", "2")
48
+ };
49
+ }
50
+ function readRanges(node, endpoint) {
51
+ const v = (id) => {
52
+ const x = readAttr(node, endpoint, id);
53
+ return typeof x === "number" ? x : null;
54
+ };
55
+ return {
56
+ panMin: v(ATTR_PAN_MIN),
57
+ panMax: v(ATTR_PAN_MAX),
58
+ tiltMin: v(ATTR_TILT_MIN),
59
+ tiltMax: v(ATTR_TILT_MAX),
60
+ zoomMax: v(ATTR_ZOOM_MAX)
61
+ };
62
+ }
63
+ function readMovementState(node, endpoint) {
64
+ const v = readAttr(node, endpoint, ATTR_MOVEMENT_STATE);
65
+ if (v === 0) return "idle";
66
+ if (v === 1) return "moving";
67
+ return "unknown";
68
+ }
69
+ function readPresets(node, endpoint) {
70
+ const max = readAttr(node, endpoint, ATTR_MAX_PRESETS);
71
+ const raw = readAttr(node, endpoint, ATTR_MPTZ_PRESETS);
72
+ const items = new Array();
73
+ if (Array.isArray(raw)) {
74
+ for (const item of raw) {
75
+ const obj = asObject(item);
76
+ if (!obj) continue;
77
+ const presetId = pickFieldNumber(obj, "presetId", "0");
78
+ const name = pickString(obj, "name") ?? pickString(obj, "1");
79
+ const settings = asObject(obj["settings"] ?? obj["2"]);
80
+ if (presetId === null || name === null) continue;
81
+ items.push({
82
+ presetId,
83
+ name,
84
+ settings: {
85
+ pan: settings ? pickFieldNumber(settings, "pan", "0") : null,
86
+ tilt: settings ? pickFieldNumber(settings, "tilt", "1") : null,
87
+ zoom: settings ? pickFieldNumber(settings, "zoom", "2") : null
88
+ }
89
+ });
90
+ }
91
+ }
92
+ return { items, max: typeof max === "number" ? max : 0 };
93
+ }
94
+ function readDptzStreams(node, endpoint) {
95
+ const raw = readAttr(node, endpoint, ATTR_DPTZ_STREAMS);
96
+ if (!Array.isArray(raw)) return [];
97
+ const out = new Array();
98
+ for (const item of raw) {
99
+ const obj = asObject(item);
100
+ if (!obj) continue;
101
+ const id = pickFieldNumber(obj, "videoStreamId", "0");
102
+ if (id !== null) out.push({ videoStreamId: id });
103
+ }
104
+ return out;
105
+ }
106
+ async function relativeMove(client, nodeId, endpoint, delta) {
107
+ await client.deviceCommand(nodeId, endpoint, AVSUM_CLUSTER_ID, "MPTZRelativeMove", delta);
108
+ }
109
+ async function moveToPreset(client, nodeId, endpoint, presetId) {
110
+ await client.deviceCommand(nodeId, endpoint, AVSUM_CLUSTER_ID, "MPTZMoveToPreset", { presetID: presetId });
111
+ }
112
+ async function savePreset(client, nodeId, endpoint, name, presetId) {
113
+ const payload = { name };
114
+ if (presetId !== void 0) payload.presetID = presetId;
115
+ await client.deviceCommand(nodeId, endpoint, AVSUM_CLUSTER_ID, "MPTZSavePreset", payload);
116
+ }
117
+ async function removePreset(client, nodeId, endpoint, presetId) {
118
+ await client.deviceCommand(nodeId, endpoint, AVSUM_CLUSTER_ID, "MPTZRemovePreset", { presetID: presetId });
119
+ }
120
+ async function dptzRelativeMove(client, nodeId, endpoint, streamId, delta) {
121
+ await client.deviceCommand(nodeId, endpoint, AVSUM_CLUSTER_ID, "DPTZRelativeMove", {
122
+ videoStreamID: streamId,
123
+ ...delta
124
+ });
125
+ }
126
+ function hasAvsumOnEndpoint(node, endpoint) {
127
+ const prefix = `${endpoint}/${AVSUM_CLUSTER_ID}/`;
128
+ return Object.keys(node.attributes).some((k) => k.startsWith(prefix));
129
+ }
130
+ export {
131
+ AVSUM_CLUSTER_ID,
132
+ AVSUM_FEAT_DPTZ,
133
+ AVSUM_FEAT_MPAN,
134
+ AVSUM_FEAT_MPRESETS,
135
+ AVSUM_FEAT_MTILT,
136
+ AVSUM_FEAT_MZOOM,
137
+ dptzRelativeMove,
138
+ hasAvsumOnEndpoint,
139
+ moveToPreset,
140
+ readDptzStreams,
141
+ readFeatures,
142
+ readMovementState,
143
+ readPosition,
144
+ readPresets,
145
+ readRanges,
146
+ relativeMove,
147
+ removePreset,
148
+ savePreset
149
+ };
150
+ //# sourceMappingURL=avsum.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/avsum.ts"],
4
+ "mappings": "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",
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
+ import type { MatterClient, MatterNode } from "@matter-server/ws-client";
7
+ /** Chime cluster (spec 1.5.1 §11.8). */
8
+ export declare const CHIME_CLUSTER_ID = 1366;
9
+ export interface ChimeSound {
10
+ chimeId: number;
11
+ name: string;
12
+ }
13
+ export declare function readSounds(node: MatterNode, endpoint: number): ChimeSound[];
14
+ export declare function readSelected(node: MatterNode, endpoint: number): number | null;
15
+ export declare function readEnabled(node: MatterNode, endpoint: number): boolean;
16
+ export declare function readRevision(node: MatterNode, endpoint: number): number;
17
+ export declare function setEnabled(client: MatterClient, nodeId: number | bigint, endpoint: number, enabled: boolean): Promise<void>;
18
+ export declare function setSelected(client: MatterClient, nodeId: number | bigint, endpoint: number, chimeId: number): Promise<void>;
19
+ export declare function play(client: MatterClient, nodeId: number | bigint, endpoint: number, chimeId?: number): Promise<void>;
20
+ //# sourceMappingURL=chime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chime.d.ts","sourceRoot":"","sources":["../../../src/util/chime.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAGzE,wCAAwC;AACxC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AAOrC,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB;AAMD,wBAAgB,UAAU,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,UAAU,EAAE,CAY3E;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG9E;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvE;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAGvE;AAED,wBAAsB,UAAU,CAC5B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,WAAW,CAC7B,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,wBAAsB,IAAI,CACtB,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,MAAM,GAAG,MAAM,EACvB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025-2026 Open Home Foundation
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { asObject, pickNumber, pickString } from "./attribute-shapes.js";
7
+ const CHIME_CLUSTER_ID = 1366;
8
+ const ATTR_INSTALLED_SOUNDS = 0;
9
+ const ATTR_SELECTED_CHIME = 1;
10
+ const ATTR_ENABLED = 2;
11
+ const ATTR_CLUSTER_REVISION = 65533;
12
+ function readAttr(node, endpoint, attrId) {
13
+ return node.attributes[`${endpoint}/${CHIME_CLUSTER_ID}/${attrId}`];
14
+ }
15
+ function readSounds(node, endpoint) {
16
+ const raw = readAttr(node, endpoint, ATTR_INSTALLED_SOUNDS);
17
+ if (!Array.isArray(raw)) return [];
18
+ const out = new Array();
19
+ for (const item of raw) {
20
+ const obj = asObject(item);
21
+ if (!obj) continue;
22
+ const id = pickNumber(obj, "chimeId") ?? pickNumber(obj, "0");
23
+ const name = pickString(obj, "name") ?? pickString(obj, "1");
24
+ if (id !== null && name !== null) out.push({ chimeId: id, name });
25
+ }
26
+ return out;
27
+ }
28
+ function readSelected(node, endpoint) {
29
+ const v = readAttr(node, endpoint, ATTR_SELECTED_CHIME);
30
+ return typeof v === "number" ? v : null;
31
+ }
32
+ function readEnabled(node, endpoint) {
33
+ const v = readAttr(node, endpoint, ATTR_ENABLED);
34
+ return v === true;
35
+ }
36
+ function readRevision(node, endpoint) {
37
+ const v = readAttr(node, endpoint, ATTR_CLUSTER_REVISION);
38
+ return typeof v === "number" ? v : 1;
39
+ }
40
+ async function setEnabled(client, nodeId, endpoint, enabled) {
41
+ await client.writeAttribute(nodeId, `${endpoint}/${CHIME_CLUSTER_ID}/${ATTR_ENABLED}`, enabled);
42
+ }
43
+ async function setSelected(client, nodeId, endpoint, chimeId) {
44
+ await client.writeAttribute(nodeId, `${endpoint}/${CHIME_CLUSTER_ID}/${ATTR_SELECTED_CHIME}`, chimeId);
45
+ }
46
+ async function play(client, nodeId, endpoint, chimeId) {
47
+ const payload = chimeId !== void 0 ? { chimeID: chimeId } : {};
48
+ await client.deviceCommand(nodeId, endpoint, CHIME_CLUSTER_ID, "PlayChimeSound", payload);
49
+ }
50
+ export {
51
+ CHIME_CLUSTER_ID,
52
+ play,
53
+ readEnabled,
54
+ readRevision,
55
+ readSelected,
56
+ readSounds,
57
+ setEnabled,
58
+ setSelected
59
+ };
60
+ //# sourceMappingURL=chime.js.map
@@ -0,0 +1,6 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/chime.ts"],
4
+ "mappings": "AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,SAAS,UAAU,YAAY,kBAAkB;AAG1C,MAAM,mBAAmB;AAEhC,MAAM,wBAAwB;AAC9B,MAAM,sBAAsB;AAC5B,MAAM,eAAe;AACrB,MAAM,wBAAwB;AAO9B,SAAS,SAAS,MAAkB,UAAkB,QAAyB;AAC3E,SAAO,KAAK,WAAW,GAAG,QAAQ,IAAI,gBAAgB,IAAI,MAAM,EAAE;AACtE;AAEO,SAAS,WAAW,MAAkB,UAAgC;AACzE,QAAM,MAAM,SAAS,MAAM,UAAU,qBAAqB;AAC1D,MAAI,CAAC,MAAM,QAAQ,GAAG,EAAG,QAAO,CAAC;AACjC,QAAM,MAAM,IAAI,MAAkB;AAClC,aAAW,QAAQ,KAAK;AACpB,UAAM,MAAM,SAAS,IAAI;AACzB,QAAI,CAAC,IAAK;AACV,UAAM,KAAK,WAAW,KAAK,SAAS,KAAK,WAAW,KAAK,GAAG;AAC5D,UAAM,OAAO,WAAW,KAAK,MAAM,KAAK,WAAW,KAAK,GAAG;AAC3D,QAAI,OAAO,QAAQ,SAAS,KAAM,KAAI,KAAK,EAAE,SAAS,IAAI,KAAK,CAAC;AAAA,EACpE;AACA,SAAO;AACX;AAEO,SAAS,aAAa,MAAkB,UAAiC;AAC5E,QAAM,IAAI,SAAS,MAAM,UAAU,mBAAmB;AACtD,SAAO,OAAO,MAAM,WAAW,IAAI;AACvC;AAEO,SAAS,YAAY,MAAkB,UAA2B;AACrE,QAAM,IAAI,SAAS,MAAM,UAAU,YAAY;AAC/C,SAAO,MAAM;AACjB;AAEO,SAAS,aAAa,MAAkB,UAA0B;AACrE,QAAM,IAAI,SAAS,MAAM,UAAU,qBAAqB;AACxD,SAAO,OAAO,MAAM,WAAW,IAAI;AACvC;AAEA,eAAsB,WAClB,QACA,QACA,UACA,SACa;AACb,QAAM,OAAO,eAAe,QAAQ,GAAG,QAAQ,IAAI,gBAAgB,IAAI,YAAY,IAAI,OAAO;AAClG;AAEA,eAAsB,YAClB,QACA,QACA,UACA,SACa;AACb,QAAM,OAAO,eAAe,QAAQ,GAAG,QAAQ,IAAI,gBAAgB,IAAI,mBAAmB,IAAI,OAAO;AACzG;AAEA,eAAsB,KAClB,QACA,QACA,UACA,SACa;AACb,QAAM,UAAU,YAAY,SAAY,EAAE,SAAS,QAAQ,IAAI,CAAC;AAChE,QAAM,OAAO,cAAc,QAAQ,UAAU,kBAAkB,kBAAkB,OAAO;AAC5F;",
5
+ "names": []
6
+ }
@@ -1,4 +1,4 @@
1
- import { q as i, n, u as r, d as e, i as i$1, A, S as formatHex, j as b, K as handleAsync, t } from './matter-dashboard-app-BZOhBELR.js';
1
+ import { i, q as n, r, e, j as i$1, A, g as formatHex, b, h as handleAsync, v as t } from './matter-dashboard-app-XUWBcruM.js';
2
2
  import { t as toBigIntAwareJson } from './main.js';
3
3
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
4
4
  import { p as parseJsonPayload } from './parse-json-payload-DU9TWKdu.js';
@@ -1,4 +1,4 @@
1
- import { q as i, n, u as r, d as e, i as i$1, A, S as formatHex, j as b, K as handleAsync, t } from './matter-dashboard-app-BZOhBELR.js';
1
+ import { i, q as n, r, e, j as i$1, A, g as formatHex, b, h as handleAsync, v as t } from './matter-dashboard-app-XUWBcruM.js';
2
2
  import { t as toBigIntAwareJson } from './main.js';
3
3
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
4
4
  import { p as parseJsonPayload, i as isPlainObject } from './parse-json-payload-DU9TWKdu.js';
@@ -1,4 +1,4 @@
1
- import { u as r, n, t, i, j as b } from './matter-dashboard-app-BZOhBELR.js';
1
+ import { r, c, a as clientContext, w as tickContext, v as t, j as i, b } from './matter-dashboard-app-XUWBcruM.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -11,6 +11,10 @@ var __decorateClass = (decorators, target, key, kind) => {
11
11
  return result;
12
12
  };
13
13
  let ComissionNodeDialog = class extends i {
14
+ constructor() {
15
+ super(...arguments);
16
+ this._tick = 0;
17
+ }
14
18
  render() {
15
19
  return b`
16
20
  <md-dialog open @cancel=${preventDefault} @closed=${this._handleClosed}>
@@ -48,18 +52,18 @@ let ComissionNodeDialog = class extends i {
48
52
  if (!this.client.serverInfo.bluetooth_enabled) {
49
53
  return;
50
54
  }
51
- import('./commission-node-wifi-PCsot-CX.js');
55
+ import('./commission-node-wifi-HA2pYTW2.js');
52
56
  this._mode = "wifi";
53
57
  }
54
58
  _commissionThread() {
55
59
  if (!this.client.serverInfo.bluetooth_enabled) {
56
60
  return;
57
61
  }
58
- import('./commission-node-thread-m2fqED-2.js');
62
+ import('./commission-node-thread-BZpJIxlI.js');
59
63
  this._mode = "thread";
60
64
  }
61
65
  _commissionExisting() {
62
- import('./commission-node-existing-DLcWvJTL.js');
66
+ import('./commission-node-existing-omW-An0J.js');
63
67
  this._mode = "existing";
64
68
  }
65
69
  _nodeCommissioned(ev) {
@@ -67,10 +71,10 @@ let ComissionNodeDialog = class extends i {
67
71
  this._close();
68
72
  }
69
73
  _requestSettings() {
70
- import('./matter-dashboard-app-BZOhBELR.js').then(function (n) { return n.X; }).then(({
74
+ import('./matter-dashboard-app-XUWBcruM.js').then(function (n) { return n.u; }).then(({
71
75
  showSettingsDialog
72
76
  }) => {
73
- showSettingsDialog(this.client, "network-credentials");
77
+ showSettingsDialog("network-credentials");
74
78
  });
75
79
  this._close();
76
80
  }
@@ -81,9 +85,13 @@ let ComissionNodeDialog = class extends i {
81
85
  this.parentNode.removeChild(this);
82
86
  }
83
87
  };
84
- __decorateClass([n({
85
- attribute: false
88
+ __decorateClass([c({
89
+ context: clientContext
86
90
  })], ComissionNodeDialog.prototype, "client", 2);
91
+ __decorateClass([c({
92
+ context: tickContext,
93
+ subscribe: true
94
+ })], ComissionNodeDialog.prototype, "_tick", 2);
87
95
  __decorateClass([r()], ComissionNodeDialog.prototype, "_mode", 2);
88
96
  ComissionNodeDialog = __decorateClass([t("commission-node-dialog")], ComissionNodeDialog);
89
97
 
@@ -1,5 +1,5 @@
1
- import { u as r, T as c, U as clientContext, n, d as e, t, i, A, K as handleAsync, j as b, J as showAlertDialog } from './matter-dashboard-app-BZOhBELR.js';
2
- import { f as fireEvent } from './fire_event-BnpND_gK.js';
1
+ import { r, c, a as clientContext, q as n, e, v as t, j as i, A, h as handleAsync, b, s as showAlertDialog } from './matter-dashboard-app-XUWBcruM.js';
2
+ import { f as fireEvent } from './fire_event-CChLgSiV.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { q as i, T as c, U as clientContext, n, u as r, d as e, i as i$1, A, K as handleAsync, j as b, P as mdiAccessPoint, J as showAlertDialog, t } from './matter-dashboard-app-BZOhBELR.js';
2
- import { f as fireEvent } from './fire_event-BnpND_gK.js';
1
+ import { i, c, a as clientContext, q as n, r, e, j as i$1, A, h as handleAsync, b, k as mdiAccessPoint, s as showAlertDialog, v as t } from './matter-dashboard-app-XUWBcruM.js';
2
+ import { f as fireEvent } from './fire_event-CChLgSiV.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,5 +1,5 @@
1
- import { q as i, T as c, U as clientContext, n, u as r, d as e, i as i$1, A, K as handleAsync, j as b, O as mdiWifi, J as showAlertDialog, t } from './matter-dashboard-app-BZOhBELR.js';
2
- import { f as fireEvent } from './fire_event-BnpND_gK.js';
1
+ import { i, c, a as clientContext, q as n, r, e, j as i$1, A, h as handleAsync, b, o as mdiWifi, s as showAlertDialog, v as t } from './matter-dashboard-app-XUWBcruM.js';
2
+ import { f as fireEvent } from './fire_event-CChLgSiV.js';
3
3
  import './main.js';
4
4
 
5
5
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- import { q as i, n, i as i$1, j as b, t } from './matter-dashboard-app-BZOhBELR.js';
1
+ import { i, q as n, j as i$1, b, v as t } from './matter-dashboard-app-XUWBcruM.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
@@ -1,4 +1,4 @@
1
- import { m as mixinDelegatesAria, i, _ as __decorate, n, A, h as e, j as b, q as i$1, t } from './matter-dashboard-app-BZOhBELR.js';
1
+ import { p as mixinDelegatesAria, j as i, _ as __decorate, q as n, A, d as e, b, i as i$1, v as t } from './matter-dashboard-app-XUWBcruM.js';
2
2
 
3
3
  /**
4
4
  * @license
@@ -311,6 +311,8 @@ class MatterClient {
311
311
  // Start with random offset for defense-in-depth and easier debugging across sessions
312
312
  msgId = Math.floor(Math.random() * 2147483647);
313
313
  eventListeners = {};
314
+ webrtcCallbackListeners = [];
315
+ nodeEventListeners = [];
314
316
  get serverInfo() {
315
317
  return this.connection.serverInfo;
316
318
  }
@@ -323,6 +325,22 @@ class MatterClient {
323
325
  this.eventListeners[event] = this.eventListeners[event].filter(l => l !== listener);
324
326
  };
325
327
  }
328
+ /**
329
+ * Subscribe to webrtc_callback events with the typed payload.
330
+ * Returns an unsubscribe function.
331
+ */
332
+ addWebRtcCallbackListener(listener) {
333
+ this.webrtcCallbackListeners.push(listener);
334
+ return () => {
335
+ this.webrtcCallbackListeners = this.webrtcCallbackListeners.filter(l => l !== listener);
336
+ };
337
+ }
338
+ addNodeEventListener(listener) {
339
+ this.nodeEventListeners.push(listener);
340
+ return () => {
341
+ this.nodeEventListeners = this.nodeEventListeners.filter(l => l !== listener);
342
+ };
343
+ }
326
344
  async commissionWithCode(code, networkOnly = true, timeout) {
327
345
  const data = await this.sendCommand("commission_with_code", 0, {
328
346
  code,
@@ -445,6 +463,14 @@ class MatterClient {
445
463
  response_type: null
446
464
  }, timeout);
447
465
  }
466
+ async sendWebRtcProviderCommand(nodeId, endpointId, commandName, payload, timeout) {
467
+ return await this.sendCommand("send_webrtc_provider_command", 0, {
468
+ node_id: nodeId,
469
+ endpoint_id: endpointId,
470
+ command_name: commandName,
471
+ payload
472
+ }, timeout);
473
+ }
448
474
  async getNodes(onlyAvailable = false, timeout) {
449
475
  const data = await this.sendCommand("get_nodes", 0, {
450
476
  only_available: onlyAvailable
@@ -672,6 +698,18 @@ class MatterClient {
672
698
  this.disconnect();
673
699
  return;
674
700
  }
701
+ if (event.event === "webrtc_callback") {
702
+ for (const listener of this.webrtcCallbackListeners) {
703
+ listener(event.data);
704
+ }
705
+ return;
706
+ }
707
+ if (event.event === "node_event") {
708
+ for (const listener of this.nodeEventListeners) {
709
+ listener(event.data);
710
+ }
711
+ return;
712
+ }
675
713
  }
676
714
  fireEvent(event) {
677
715
  const listeners = this.eventListeners[event];
@@ -763,7 +801,7 @@ const ThemeService = new ThemeServiceImpl();
763
801
  * SPDX-License-Identifier: Apache-2.0
764
802
  */
765
803
  async function main() {
766
- import('./matter-dashboard-app-BZOhBELR.js').then(function (n) { return n.Y; });
804
+ import('./matter-dashboard-app-XUWBcruM.js').then(function (n) { return n.m; });
767
805
  let url = "";
768
806
  const isProductionServer = window.__MATTERJS_PRODUCTION_MODE__ === true || location.origin.includes(":5580") || location.href.includes("hassio_ingress") || location.href.includes("/api/ingress/");
769
807
  if (!isProductionServer) {