@matter-server/dashboard 1.2.2 → 1.2.3

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 (29) hide show
  1. package/dist/esm/components/webrtc-stream-view.d.ts +19 -0
  2. package/dist/esm/components/webrtc-stream-view.d.ts.map +1 -1
  3. package/dist/esm/components/webrtc-stream-view.js +107 -30
  4. package/dist/esm/components/webrtc-stream-view.js.map +1 -1
  5. package/dist/esm/pages/components/node-details.d.ts.map +1 -1
  6. package/dist/esm/pages/components/node-details.js +0 -1
  7. package/dist/esm/pages/components/node-details.js.map +1 -1
  8. package/dist/esm/util/camera-stream-budget.d.ts +51 -0
  9. package/dist/esm/util/camera-stream-budget.d.ts.map +1 -0
  10. package/dist/esm/util/camera-stream-budget.js +34 -0
  11. package/dist/esm/util/camera-stream-budget.js.map +6 -0
  12. package/dist/web/js/{attribute-write-dialog-CCOGtCsc.js → attribute-write-dialog-GOHez9ID.js} +1 -1
  13. package/dist/web/js/{command-invoke-dialog-DineKhxs.js → command-invoke-dialog-cN8yz0uL.js} +1 -1
  14. package/dist/web/js/{commission-node-dialog-BbyLvbCF.js → commission-node-dialog-DlTbsP25.js} +5 -5
  15. package/dist/web/js/{commission-node-existing-C0EQcHOJ.js → commission-node-existing-CObdE63L.js} +1 -1
  16. package/dist/web/js/{commission-node-thread-C_xYn78v.js → commission-node-thread-BUAmDLZC.js} +1 -1
  17. package/dist/web/js/{commission-node-wifi-mRvgT2Ws.js → commission-node-wifi-CNEBEc_C.js} +1 -1
  18. package/dist/web/js/{dialog-box-CcKXxq-S.js → dialog-box-V0om09Bd.js} +1 -1
  19. package/dist/web/js/{fabric-label-dialog-3xl50UuY.js → fabric-label-dialog-BKI2qEOw.js} +1 -1
  20. package/dist/web/js/main.js +1 -1
  21. package/dist/web/js/{matter-dashboard-app-DiMb3vGL.js → matter-dashboard-app-B3BC4HU2.js} +140 -31
  22. package/dist/web/js/{node-acl-add-dialog-SMiX8hhL.js → node-acl-add-dialog-DHEm34fQ.js} +1 -1
  23. package/dist/web/js/{node-binding-dialog-XRgshO0p.js → node-binding-dialog-NdTWDtWj.js} +1 -1
  24. package/dist/web/js/{node-label-dialog-hLkCmvNT.js → node-label-dialog-BElnoFMC.js} +1 -1
  25. package/dist/web/js/{settings-dialog-nBQaH_2q.js → settings-dialog-CmgvIfKt.js} +1 -1
  26. package/package.json +3 -3
  27. package/src/components/webrtc-stream-view.ts +159 -44
  28. package/src/pages/components/node-details.ts +0 -1
  29. package/src/util/camera-stream-budget.ts +74 -0
@@ -4557,7 +4557,7 @@ MdListItem = __decorate([t$1('md-list-item')], MdListItem);
4557
4557
  * SPDX-License-Identifier: Apache-2.0
4558
4558
  */
4559
4559
  const showSettingsDialog = async section => {
4560
- await import('./settings-dialog-nBQaH_2q.js');
4560
+ await import('./settings-dialog-CmgvIfKt.js');
4561
4561
  const dialog = document.createElement("settings-dialog");
4562
4562
  if (section) dialog.scrollToSection = section;
4563
4563
  document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
@@ -22772,7 +22772,7 @@ const clusters = {
22772
22772
  * SPDX-License-Identifier: Apache-2.0
22773
22773
  */
22774
22774
  const showDialogBox = async (type, dialogParams) => {
22775
- await import('./dialog-box-CcKXxq-S.js');
22775
+ await import('./dialog-box-V0om09Bd.js');
22776
22776
  return new Promise(resolve => {
22777
22777
  const dialog = document.createElement("dialog-box");
22778
22778
  dialog.params = dialogParams;
@@ -22790,7 +22790,7 @@ const showPromptDialog = dialogParams => showDialogBox("prompt", dialogParams);
22790
22790
  * SPDX-License-Identifier: Apache-2.0
22791
22791
  */
22792
22792
  const showAttributeWriteDialog = async options => {
22793
- await import('./attribute-write-dialog-CCOGtCsc.js');
22793
+ await import('./attribute-write-dialog-GOHez9ID.js');
22794
22794
  const dialog = document.createElement("attribute-write-dialog");
22795
22795
  dialog.client = options.client;
22796
22796
  dialog.nodeId = options.nodeId;
@@ -22808,7 +22808,7 @@ const showAttributeWriteDialog = async options => {
22808
22808
  * SPDX-License-Identifier: Apache-2.0
22809
22809
  */
22810
22810
  const showCommandInvokeDialog = async options => {
22811
- await import('./command-invoke-dialog-DineKhxs.js');
22811
+ await import('./command-invoke-dialog-cN8yz0uL.js');
22812
22812
  const dialog = document.createElement("command-invoke-dialog");
22813
22813
  dialog.client = options.client;
22814
22814
  dialog.nodeId = options.nodeId;
@@ -22980,7 +22980,7 @@ MdTextButton = __decorate([t$1('md-text-button')], MdTextButton);
22980
22980
  * SPDX-License-Identifier: Apache-2.0
22981
22981
  */
22982
22982
  const showNodeLabelDialog = async (client, node) => {
22983
- await import('./node-label-dialog-hLkCmvNT.js');
22983
+ await import('./node-label-dialog-BElnoFMC.js');
22984
22984
  const dialog = document.createElement("node-label-dialog");
22985
22985
  dialog.client = client;
22986
22986
  dialog.node = node;
@@ -27325,6 +27325,42 @@ function pickString(obj, key) {
27325
27325
  return typeof v === "string" ? v : null;
27326
27326
  }
27327
27327
 
27328
+ /**
27329
+ * @license
27330
+ * Copyright 2025-2026 Open Home Foundation
27331
+ * SPDX-License-Identifier: Apache-2.0
27332
+ */
27333
+ const VIDEO_MAX_FRAME_RATE = 60;
27334
+ const VIDEO_MIN_FRAME_RATE = 30;
27335
+ function pixelRate(res, frameRate) {
27336
+ return res.width * res.height * frameRate;
27337
+ }
27338
+ function planVideoMaxFrameRate(plan) {
27339
+ const {
27340
+ maxEncodedPixelRate: budget,
27341
+ videoResolution,
27342
+ snapshotReservation
27343
+ } = plan;
27344
+ const videoPixels = videoResolution.width * videoResolution.height;
27345
+ if (!budget || budget <= 0 || videoPixels <= 0) return VIDEO_MAX_FRAME_RATE;
27346
+ const withSnapshot = Math.floor((budget - snapshotReservation) / videoPixels);
27347
+ if (withSnapshot >= VIDEO_MIN_FRAME_RATE) {
27348
+ return Math.min(withSnapshot, VIDEO_MAX_FRAME_RATE);
27349
+ }
27350
+ const videoOnly = Math.floor(budget / videoPixels);
27351
+ return Math.min(Math.max(videoOnly, 1), VIDEO_MAX_FRAME_RATE);
27352
+ }
27353
+ function videoStreamFitsSnapshotBudget(args) {
27354
+ const {
27355
+ maxEncodedPixelRate: budget,
27356
+ candidateResolution,
27357
+ candidateFrameRate,
27358
+ snapshotReservation
27359
+ } = args;
27360
+ if (!budget || budget <= 0 || snapshotReservation <= 0) return true;
27361
+ return pixelRate(candidateResolution, candidateFrameRate) + snapshotReservation <= budget;
27362
+ }
27363
+
27328
27364
  var __defProp$n = Object.defineProperty;
27329
27365
  var __getOwnPropDesc$o = Object.getOwnPropertyDescriptor;
27330
27366
  var __decorateClass$q = (decorators, target, key, kind) => {
@@ -27337,9 +27373,11 @@ const STREAM_USAGE_LIVE_VIEW = 3;
27337
27373
  const END_REASON_USER_HANGUP = 2;
27338
27374
  const CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID = 1361;
27339
27375
  const WEBRTC_TRANSPORT_PROVIDER_CLUSTER_ID = 1363;
27376
+ const AVSM_FEAT_SNP = 1 << 2;
27340
27377
  const AVSM_FEAT_WMARK = 1 << 6;
27341
27378
  const AVSM_FEAT_OSD = 1 << 7;
27342
27379
  const AVSM_FEATURE_MAP_ATTR_ID = 65532;
27380
+ const AVSM_MAX_ENCODED_PIXEL_RATE_ATTR_ID = 1;
27343
27381
  const DEFAULT_MAX_RESOLUTION = {
27344
27382
  width: 1920,
27345
27383
  height: 1080
@@ -27364,10 +27402,17 @@ const SNAPSHOT_DEFAULTS = {
27364
27402
  height: 1080
27365
27403
  },
27366
27404
  maxFrameRate: 30,
27367
- imageCodec: 0
27405
+ imageCodec: 0,
27406
+ requiresEncodedPixels: true
27368
27407
  };
27369
- function parseSnapshotCapabilitiesFromList(list) {
27370
- const candidates = list.map(asObject).filter(c => c !== void 0);
27408
+ function clampToCapability(requested, cap) {
27409
+ return {
27410
+ width: Math.min(requested.width, cap.width),
27411
+ height: Math.min(requested.height, cap.height)
27412
+ };
27413
+ }
27414
+ function parseSnapshotCapabilitiesFromList(list, preferEncoderFree) {
27415
+ const candidates = list.map(asObject).filter(c => c !== null);
27371
27416
  if (candidates.length === 0) return SNAPSHOT_DEFAULTS;
27372
27417
  const parsed = candidates.map(cap => {
27373
27418
  const res = asObject(cap["resolution"] ?? cap["0"]);
@@ -27375,16 +27420,20 @@ function parseSnapshotCapabilitiesFromList(list) {
27375
27420
  const height = res ? pickNumber(res, "height", "1") : null;
27376
27421
  const maxFrameRate = pickNumber(cap, "maxFrameRate", "1");
27377
27422
  const imageCodec = pickNumber(cap, "imageCodec", "2");
27423
+ const requiresEncodedPixels = cap["requiresEncodedPixels"] ?? cap["3"];
27378
27424
  return {
27379
27425
  resolution: {
27380
27426
  width: width ?? SNAPSHOT_DEFAULTS.resolution.width,
27381
27427
  height: height ?? SNAPSHOT_DEFAULTS.resolution.height
27382
27428
  },
27383
27429
  maxFrameRate: maxFrameRate ?? SNAPSHOT_DEFAULTS.maxFrameRate,
27384
- imageCodec: imageCodec ?? SNAPSHOT_DEFAULTS.imageCodec
27430
+ imageCodec: imageCodec ?? SNAPSHOT_DEFAULTS.imageCodec,
27431
+ requiresEncodedPixels: requiresEncodedPixels !== false
27385
27432
  };
27386
27433
  });
27387
- return parsed.reduce((best, cur) => cur.resolution.width * cur.resolution.height > best.resolution.width * best.resolution.height ? cur : best);
27434
+ const encoderFree = parsed.filter(cap => !cap.requiresEncodedPixels);
27435
+ const pool = preferEncoderFree && encoderFree.length > 0 ? encoderFree : parsed;
27436
+ return pool.reduce((best, cur) => cur.resolution.width * cur.resolution.height > best.resolution.width * best.resolution.height ? cur : best);
27388
27437
  }
27389
27438
  function bytesToBase64(bytes) {
27390
27439
  const CHUNK = 8192;
@@ -27564,11 +27613,18 @@ let WebRtcStreamView = class extends i$4 {
27564
27613
  const minResolution = this.resolution ?? DEFAULT_MIN_RESOLUTION;
27565
27614
  const maxResolution = this.resolution ?? DEFAULT_MAX_RESOLUTION;
27566
27615
  const avsmFeatures = this._readAvsmFeatures();
27616
+ const maxEncodedPixelRate = this._readMaxEncodedPixelRate();
27617
+ const snapshotReservation = this._snapshotBudgetReservation();
27618
+ const videoMaxFrameRate = planVideoMaxFrameRate({
27619
+ maxEncodedPixelRate,
27620
+ videoResolution: maxResolution,
27621
+ snapshotReservation
27622
+ });
27567
27623
  const videoAllocPayload = {
27568
27624
  streamUsage: STREAM_USAGE_LIVE_VIEW,
27569
27625
  videoCodec: 0,
27570
- minFrameRate: 30,
27571
- maxFrameRate: 120,
27626
+ minFrameRate: Math.min(VIDEO_MIN_FRAME_RATE, videoMaxFrameRate),
27627
+ maxFrameRate: videoMaxFrameRate,
27572
27628
  minResolution,
27573
27629
  maxResolution,
27574
27630
  minBitRate: 1e4,
@@ -27577,15 +27633,21 @@ let WebRtcStreamView = class extends i$4 {
27577
27633
  };
27578
27634
  if (avsmFeatures.wmark) videoAllocPayload.watermarkEnabled = this.watermarkEnabled;
27579
27635
  if (avsmFeatures.osd) videoAllocPayload.osdEnabled = this.osdEnabled;
27580
- const reusedVideoId = this._findMatchingVideoStream({
27636
+ const videoWant = {
27581
27637
  streamUsage: STREAM_USAGE_LIVE_VIEW,
27582
27638
  videoCodec: 0,
27583
27639
  minRes: minResolution,
27584
27640
  maxRes: maxResolution,
27585
27641
  watermarkEnabled: avsmFeatures.wmark ? this.watermarkEnabled : void 0,
27586
- osdEnabled: avsmFeatures.osd ? this.osdEnabled : void 0
27587
- });
27642
+ osdEnabled: avsmFeatures.osd ? this.osdEnabled : void 0,
27643
+ budget: {
27644
+ maxEncodedPixelRate,
27645
+ snapshotReservation
27646
+ }
27647
+ };
27648
+ const reusedVideoId = this._findMatchingVideoStream(videoWant);
27588
27649
  let videoAlloc = null;
27650
+ let usedFallbackReuse = false;
27589
27651
  if (reusedVideoId !== null) {
27590
27652
  console.info("[webrtc-stream-view] reusing existing video stream", reusedVideoId);
27591
27653
  this._videoStreamId = reusedVideoId;
@@ -27596,17 +27658,31 @@ let WebRtcStreamView = class extends i$4 {
27596
27658
  } catch (err) {
27597
27659
  const message = err instanceof Error ? err.message : String(err);
27598
27660
  const isResourceExhausted = message.includes("Resource exhausted") || message.includes("(code 137)");
27599
- if (!isResourceExhausted || this._snapshotStreamId === null) throw err;
27600
- console.info("[webrtc-stream-view] VideoStreamAllocate ResourceExhausted; freeing snapshot stream and retrying");
27601
- await this.deallocateSnapshot();
27602
- videoAlloc = await this.client.deviceCommand(this.nodeId, this.endpointId, CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID, "VideoStreamAllocate", videoAllocPayload);
27661
+ if (!isResourceExhausted) throw err;
27662
+ if (this._snapshotStreamId !== null) {
27663
+ console.info("[webrtc-stream-view] VideoStreamAllocate ResourceExhausted; freeing snapshot stream and retrying");
27664
+ await this.deallocateSnapshot();
27665
+ videoAlloc = await this.client.deviceCommand(this.nodeId, this.endpointId, CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID, "VideoStreamAllocate", videoAllocPayload);
27666
+ } else {
27667
+ const fallbackId = this._findMatchingVideoStream({
27668
+ ...videoWant,
27669
+ budget: void 0
27670
+ });
27671
+ if (fallbackId === null) throw err;
27672
+ console.warn("[webrtc-stream-view] VideoStreamAllocate ResourceExhausted; reusing over-budget stream", fallbackId, "(concurrent snapshot may be unavailable)");
27673
+ this._videoStreamId = fallbackId;
27674
+ this._videoStreamOwned = false;
27675
+ usedFallbackReuse = true;
27676
+ }
27603
27677
  }
27604
- const videoStreamId = parseStreamAllocate(videoAlloc, "videoStreamId");
27605
- if (videoStreamId === null) {
27606
- throw new Error("VideoStreamAllocate did not return a videoStreamId");
27678
+ if (!usedFallbackReuse) {
27679
+ const videoStreamId = parseStreamAllocate(videoAlloc, "videoStreamId");
27680
+ if (videoStreamId === null) {
27681
+ throw new Error("VideoStreamAllocate did not return a videoStreamId");
27682
+ }
27683
+ this._videoStreamId = videoStreamId;
27684
+ this._videoStreamOwned = true;
27607
27685
  }
27608
- this._videoStreamId = videoStreamId;
27609
- this._videoStreamOwned = true;
27610
27686
  }
27611
27687
  const audioWant = {
27612
27688
  streamUsage: STREAM_USAGE_LIVE_VIEW,
@@ -27757,10 +27833,30 @@ let WebRtcStreamView = class extends i$4 {
27757
27833
  const raw = node?.attributes[`${this.endpointId}/${CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID}/${AVSM_FEATURE_MAP_ATTR_ID}`];
27758
27834
  const bits = typeof raw === "number" ? raw : 0;
27759
27835
  return {
27836
+ snp: (bits & AVSM_FEAT_SNP) !== 0,
27760
27837
  wmark: (bits & AVSM_FEAT_WMARK) !== 0,
27761
27838
  osd: (bits & AVSM_FEAT_OSD) !== 0
27762
27839
  };
27763
27840
  }
27841
+ _readMaxEncodedPixelRate() {
27842
+ const node = this.client?.nodes[String(this.nodeId)];
27843
+ const raw = node?.attributes[`${this.endpointId}/${CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID}/${AVSM_MAX_ENCODED_PIXEL_RATE_ATTR_ID}`];
27844
+ return typeof raw === "number" && raw > 0 ? raw : null;
27845
+ }
27846
+ /**
27847
+ * px/s a concurrent snapshot stream would reserve from MaxEncodedPixelRate, so the
27848
+ * video stream can be sized to leave room. Zero when the camera has no snapshot feature
27849
+ * or the chosen capability does not draw from the encoder budget.
27850
+ */
27851
+ _snapshotBudgetReservation() {
27852
+ if (!this._readAvsmFeatures().snp) return 0;
27853
+ const node = this.client?.nodes[String(this.nodeId)];
27854
+ const capsRaw = node?.attributes[`${this.endpointId}/${CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID}/10`];
27855
+ const cap = Array.isArray(capsRaw) && capsRaw.length > 0 ? parseSnapshotCapabilitiesFromList(capsRaw, true) : SNAPSHOT_DEFAULTS;
27856
+ if (!cap.requiresEncodedPixels) return 0;
27857
+ const resolution = clampToCapability(this.snapshotResolution ?? cap.resolution, cap.resolution);
27858
+ return pixelRate(resolution, cap.maxFrameRate);
27859
+ }
27764
27860
  async deallocateSnapshot() {
27765
27861
  if (this._snapshotStreamId === null) return;
27766
27862
  const id = this._snapshotStreamId;
@@ -27802,6 +27898,19 @@ let WebRtcStreamView = class extends i$4 {
27802
27898
  const eMaxH = pickNumber(maxRes, "height", "1") ?? 0;
27803
27899
  if (eMinW > want.minRes.width || eMaxW < want.maxRes.width) continue;
27804
27900
  if (eMinH > want.minRes.height || eMaxH < want.maxRes.height) continue;
27901
+ if (want.budget) {
27902
+ const eMaxFrameRate = pickNumber(obj, "maxFrameRate", "4") ?? Number.POSITIVE_INFINITY;
27903
+ const fits = videoStreamFitsSnapshotBudget({
27904
+ maxEncodedPixelRate: want.budget.maxEncodedPixelRate,
27905
+ candidateResolution: {
27906
+ width: eMaxW,
27907
+ height: eMaxH
27908
+ },
27909
+ candidateFrameRate: eMaxFrameRate,
27910
+ snapshotReservation: want.budget.snapshotReservation
27911
+ });
27912
+ if (!fits) continue;
27913
+ }
27805
27914
  if (want.watermarkEnabled !== void 0) {
27806
27915
  const v = obj["watermarkEnabled"] ?? obj["10"];
27807
27916
  if (v !== want.watermarkEnabled) continue;
@@ -27874,9 +27983,10 @@ let WebRtcStreamView = class extends i$4 {
27874
27983
  if (this._snapshotStreamId !== null) return this._snapshotStreamId;
27875
27984
  if (!this.client) throw new Error("Matter client not available");
27876
27985
  const node = this.client.nodes[String(this.nodeId)];
27986
+ const encoderBusy = this._videoStreamId !== null;
27877
27987
  const capsRaw = node?.attributes[`${this.endpointId}/${CAMERA_AV_STREAM_MANAGEMENT_CLUSTER_ID}/10`];
27878
- const cap = Array.isArray(capsRaw) && capsRaw.length > 0 ? parseSnapshotCapabilitiesFromList(capsRaw) : SNAPSHOT_DEFAULTS;
27879
- const targetResolution = this.snapshotResolution ?? cap.resolution;
27988
+ const cap = Array.isArray(capsRaw) && capsRaw.length > 0 ? parseSnapshotCapabilitiesFromList(capsRaw, encoderBusy) : SNAPSHOT_DEFAULTS;
27989
+ const targetResolution = clampToCapability(this.snapshotResolution ?? cap.resolution, cap.resolution);
27880
27990
  const avsmFeatures = this._readAvsmFeatures();
27881
27991
  const reused = this._findMatchingSnapshotStream({
27882
27992
  imageCodec: cap.imageCodec,
@@ -29951,7 +30061,6 @@ let NodeDetails = class extends i$4 {
29951
30061
  title: "Reinterview node",
29952
30062
  text: "Success!"
29953
30063
  });
29954
- location.hash = "#";
29955
30064
  } catch (err) {
29956
30065
  showAlertDialog({
29957
30066
  title: "Failed to reinterview node",
@@ -30401,7 +30510,7 @@ async function downgradeToOperate(client, nodeId, keys) {
30401
30510
  * SPDX-License-Identifier: Apache-2.0
30402
30511
  */
30403
30512
  const showNodeAclAddDialog = async node => {
30404
- await import('./node-acl-add-dialog-SMiX8hhL.js');
30513
+ await import('./node-acl-add-dialog-DHEm34fQ.js');
30405
30514
  const dialog = document.createElement("node-acl-add-dialog");
30406
30515
  dialog.node = node;
30407
30516
  document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
@@ -32695,7 +32804,7 @@ async function deleteBindingAtIndex(client, sourceNode, sourceEndpoint, index) {
32695
32804
  * SPDX-License-Identifier: Apache-2.0
32696
32805
  */
32697
32806
  const showNodeBindingDialog = async (node, endpoint) => {
32698
- await import('./node-binding-dialog-XRgshO0p.js');
32807
+ await import('./node-binding-dialog-NdTWDtWj.js');
32699
32808
  const dialog = document.createElement("node-binding-dialog");
32700
32809
  dialog.node = node;
32701
32810
  dialog.endpoint = endpoint;
@@ -48992,7 +49101,7 @@ MatterNodeView = __decorateClass$3([t$1("matter-node-view")], MatterNodeView);
48992
49101
  * SPDX-License-Identifier: Apache-2.0
48993
49102
  */
48994
49103
  const showCommissionNodeDialog = async () => {
48995
- await import('./commission-node-dialog-BbyLvbCF.js');
49104
+ await import('./commission-node-dialog-DlTbsP25.js');
48996
49105
  const dialog = document.createElement("commission-node-dialog");
48997
49106
  document.querySelector("matter-dashboard-app")?.renderRoot.appendChild(dialog);
48998
49107
  };
@@ -49003,7 +49112,7 @@ const showCommissionNodeDialog = async () => {
49003
49112
  * SPDX-License-Identifier: Apache-2.0
49004
49113
  */
49005
49114
  const showFabricLabelDialog = async (client, currentLabel, onSaved) => {
49006
- await import('./fabric-label-dialog-3xl50UuY.js');
49115
+ await import('./fabric-label-dialog-BKI2qEOw.js');
49007
49116
  const dialog = document.createElement("fabric-label-dialog");
49008
49117
  dialog.client = client;
49009
49118
  dialog.currentLabel = currentLabel;
@@ -1,4 +1,4 @@
1
- import { i, c, a as clientContext, n, r, b as i$1, P as Privilege, v as nodeIdKey, x as aclCapacity, s as showAlertDialog, y as targetServerClusters, z as clusters, B as AuthMode, C as addAclEntry, E as PRIVILEGE_NAMES, d as b, F as mdiClose, G as getDeviceName, h as handleAsync, g as t } from './matter-dashboard-app-DiMb3vGL.js';
1
+ import { i, c, a as clientContext, n, r, b as i$1, P as Privilege, v as nodeIdKey, x as aclCapacity, s as showAlertDialog, y as targetServerClusters, z as clusters, B as AuthMode, C as addAclEntry, E as PRIVILEGE_NAMES, d as b, F as mdiClose, G as getDeviceName, h as handleAsync, g as t } from './matter-dashboard-app-B3BC4HU2.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 { i, c, a as clientContext, n, r, b as i$1, v as nodeIdKey, z as clusters, s as showAlertDialog, H as targetAclCapacityForBinding, I as addBinding, J as bindableClusters, A, d as b, G as getDeviceName, K as getEndpointDeviceTypes, h as handleAsync, g as t } from './matter-dashboard-app-DiMb3vGL.js';
1
+ import { i, c, a as clientContext, n, r, b as i$1, v as nodeIdKey, z as clusters, s as showAlertDialog, H as targetAclCapacityForBinding, I as addBinding, J as bindableClusters, A, d as b, G as getDeviceName, K as getEndpointDeviceTypes, h as handleAsync, g as t } from './matter-dashboard-app-B3BC4HU2.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 { r, n, g as t, b as i, M as MAX_NODE_LABEL_LENGTH, d as b, w as writeNodeLabel, s as showAlertDialog } from './matter-dashboard-app-DiMb3vGL.js';
1
+ import { r, n, g as t, b as i, M as MAX_NODE_LABEL_LENGTH, d as b, w as writeNodeLabel, s as showAlertDialog } from './matter-dashboard-app-B3BC4HU2.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 { i, c, a as clientContext, t as tickContext, r, e, b as i$1, f as fireAndForget, s as showAlertDialog, d as b, A, h as handleAsync, g as t, n, D as DevModeService, m as mdiWifi, j as mdiPlus, k as mdiPencil, l as mdiDelete, o as mdiEyeOff, p as mdiEye, q as mdiAccessPoint } from './matter-dashboard-app-DiMb3vGL.js';
1
+ import { i, c, a as clientContext, t as tickContext, r, e, b as i$1, f as fireAndForget, s as showAlertDialog, d as b, A, h as handleAsync, g as t, n, D as DevModeService, m as mdiWifi, j as mdiPlus, k as mdiPencil, l as mdiDelete, o as mdiEyeOff, p as mdiEye, q as mdiAccessPoint } from './matter-dashboard-app-B3BC4HU2.js';
2
2
  import { p as preventDefault } from './prevent_default-D-ohDGsN.js';
3
3
  import './main.js';
4
4
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@matter-server/dashboard",
3
- "version": "1.2.2",
3
+ "version": "1.2.3",
4
4
  "description": "Dashboard for OHF Matter Server",
5
5
  "homepage": "https://github.com/matter-js/matterjs-server",
6
6
  "bugs": {
@@ -33,8 +33,8 @@
33
33
  "dependencies": {
34
34
  "@lit/context": "^1.1.6",
35
35
  "@material/web": "^2.4.1",
36
- "@matter-server/custom-clusters": "1.2.2",
37
- "@matter-server/ws-client": "1.2.2",
36
+ "@matter-server/custom-clusters": "1.2.3",
37
+ "@matter-server/ws-client": "1.2.3",
38
38
  "@mdi/js": "^7.4.47",
39
39
  "lit": "^3.3.3",
40
40
  "tslib": "^2.8.1",