@camstack/addon-model-studio 1.1.331 → 1.1.332

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 (18) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/{MotionZonesSettings-TRskNMCZ.mjs → MotionZonesSettings-BOx4d1Ua.mjs} +25 -25
  3. package/dist/{PrivacyMaskSettings-DH6RQBr5.mjs → PrivacyMaskSettings-DjczOhqD.mjs} +33 -33
  4. package/dist/{SceneMonitorEditor-BoI9Rdr-.mjs → SceneMonitorEditor-GO3Ncxcb.mjs} +54 -54
  5. package/dist/_stub.js +6678 -6592
  6. package/dist/{_virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-BFgqLpv4.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_model_studio_page-CjYR9sfM.mjs} +3 -3
  7. package/dist/{_virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CuUWnexp.mjs → _virtual_mf___mfe_internal__addon_model_studio_page__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CAr_q7cE.mjs} +5 -5
  8. package/dist/{hostInit-CuSlERor.mjs → hostInit-BkqKC8rn.mjs} +2 -2
  9. package/dist/model-studio.addon.js +19 -4
  10. package/dist/model-studio.addon.mjs +19 -4
  11. package/dist/{player-overlays-BnOwVQOH.mjs → player-overlays-CSRalrk9.mjs} +5 -5
  12. package/dist/remoteEntry.js +1 -1
  13. package/dist/{responsive-BdfGJMHO.mjs → responsive-B-cQZlMu.mjs} +10 -6
  14. package/dist/{scene-monitor-copy-CVS-8qPq.mjs → scene-monitor-copy-DSKHpazF.mjs} +5 -5
  15. package/dist/{square-DlqxlbDO.mjs → square-BtSmfB1z.mjs} +1 -1
  16. package/dist/{trash-2-fWJjK5Xt.mjs → trash-2-BmbtsckV.mjs} +1 -1
  17. package/dist/{virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BtS2uZAv.mjs → virtual_mf-REMOTE_ENTRY_ID___mfe_internal__addon_model_studio_page__remoteEntry_js-BiIQ9kpg.mjs} +1 -1
  18. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
1
  import { S as e, _ as t, d as n, g as r, l as i, v as a } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react__loadShare__.js-DMBKVIH7.mjs";
2
2
  import { n as o, r as s, t as c } from "./_virtual_mf___mfe_internal__addon_model_studio_page__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js-ds_Ehzaa.mjs";
3
3
  import { r as l, t as u } from "./ui-text-BqZa5BNK.mjs";
4
- import { _ as d, d as f, f as p, h as m, l as h, p as g } from "./responsive-BdfGJMHO.mjs";
5
- import { a as _, c as v, d as y, f as ee, i as b, l as x, n as S, o as C, r as w, s as T, t as E, u as D } from "./scene-monitor-copy-CVS-8qPq.mjs";
6
- import { t as O } from "./trash-2-fWJjK5Xt.mjs";
4
+ import { d, f, g as p, l as m, m as h, v as g } from "./responsive-B-cQZlMu.mjs";
5
+ import { a as _, c as v, d as y, f as ee, i as b, l as x, n as S, o as C, r as w, s as T, t as E, u as D } from "./scene-monitor-copy-DSKHpazF.mjs";
6
+ import { t as O } from "./trash-2-BmbtsckV.mjs";
7
7
  import { MaskShapeCanvas as k } from "./MaskShapeCanvas-CrWutXSb.mjs";
8
- var te = d("settings-2", [
8
+ var te = g("settings-2", [
9
9
  ["path", {
10
10
  d: "M14 17H5",
11
11
  key: "gfn3mx"
@@ -56,7 +56,7 @@ var P = "rounded border border-danger/50 bg-danger/10 px-1 py-0.5 text-[10px] fo
56
56
  function ne({ monitor: e, disabled: t, onDelete: n }) {
57
57
  let r = l(), i = M(e), a = N(e), c = x();
58
58
  return i.length === 0 ? /* @__PURE__ */ o("p", {
59
- className: `${h} leading-relaxed`,
59
+ className: `${m} leading-relaxed`,
60
60
  children: r("uiLibrary.sceneReferenceGallery.empty", "No photographs captured yet. Press “Capture daylight” to take the one this scene will judge everything against.")
61
61
  }) : /* @__PURE__ */ o("div", {
62
62
  className: "flex flex-col gap-2",
@@ -78,7 +78,7 @@ function ne({ monitor: e, disabled: t, onDelete: n }) {
78
78
  children: [
79
79
  /* @__PURE__ */ o(F, { reference: i.reference }),
80
80
  /* @__PURE__ */ o("span", {
81
- className: `${h} tabular-nums`,
81
+ className: `${m} tabular-nums`,
82
82
  children: I(i.reference.capturedAt)
83
83
  }),
84
84
  /* @__PURE__ */ s("button", {
@@ -164,12 +164,12 @@ function G(e) {
164
164
  };
165
165
  }
166
166
  function K({ monitor: e, disabled: t, onPatch: r }) {
167
- let i = l(), [d, f] = a(() => G(e)), [p, m] = a(!1);
167
+ let i = l(), [d, f] = a(() => G(e)), [p, h] = a(!1);
168
168
  n(() => {
169
169
  p || f(G(e));
170
170
  }, [e, p]);
171
171
  let g = (e) => {
172
- m(!1), r(e);
172
+ h(!1), r(e);
173
173
  }, _ = (t) => e.check.mode === "similarity" ? {
174
174
  mode: "similarity",
175
175
  threshold: t.threshold ?? e.check.threshold,
@@ -198,14 +198,14 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
198
198
  value: d.label,
199
199
  disabled: t,
200
200
  className: L,
201
- onFocus: () => m(!0),
201
+ onFocus: () => h(!0),
202
202
  onChange: (e) => f((t) => ({
203
203
  ...t,
204
204
  label: e.target.value
205
205
  })),
206
206
  onBlur: () => {
207
207
  let t = d.label.trim();
208
- t.length > 0 && t !== e.label ? g({ label: t }) : m(!1);
208
+ t.length > 0 && t !== e.label ? g({ label: t }) : h(!1);
209
209
  }
210
210
  })]
211
211
  }),
@@ -222,7 +222,7 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
222
222
  })]
223
223
  }),
224
224
  /* @__PURE__ */ o("p", {
225
- className: h,
225
+ className: m,
226
226
  children: i("uiLibrary.sceneSettingsForm.watchingHint", "Turned off, the scene keeps its region, its references and its flag — it simply stops checking. Nothing is lost by pausing one for a while.")
227
227
  }),
228
228
  /* @__PURE__ */ s("label", {
@@ -255,7 +255,7 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
255
255
  })]
256
256
  }),
257
257
  /* @__PURE__ */ o("p", {
258
- className: h,
258
+ className: m,
259
259
  children: U(e.triggerMode, i)
260
260
  }),
261
261
  /* @__PURE__ */ s("label", {
@@ -270,19 +270,19 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
270
270
  value: d.checkIntervalSec,
271
271
  disabled: t,
272
272
  className: L,
273
- onFocus: () => m(!0),
273
+ onFocus: () => h(!0),
274
274
  onChange: (e) => f((t) => ({
275
275
  ...t,
276
276
  checkIntervalSec: Number(e.target.value) || 0
277
277
  })),
278
278
  onBlur: () => {
279
279
  let t = q(d.checkIntervalSec, V, H);
280
- t === e.checkIntervalSec ? m(!1) : g({ checkIntervalSec: t });
280
+ t === e.checkIntervalSec ? h(!1) : g({ checkIntervalSec: t });
281
281
  }
282
282
  })]
283
283
  }),
284
284
  /* @__PURE__ */ o("p", {
285
- className: h,
285
+ className: m,
286
286
  children: i("uiLibrary.sceneSettingsForm.intervalHint", "60 s suits “is the bin still out”. Every check costs one photograph and one encode, so going below about 30 s buys latency you almost never need and multiplies the cost by the number of scenes you own.")
287
287
  })
288
288
  ]
@@ -311,16 +311,16 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
311
311
  step: .01,
312
312
  value: d.threshold,
313
313
  disabled: t,
314
- onFocus: () => m(!0),
314
+ onFocus: () => h(!0),
315
315
  onChange: (e) => f((t) => ({
316
316
  ...t,
317
317
  threshold: Number(e.target.value)
318
318
  })),
319
319
  onMouseUp: () => {
320
- d.threshold === y ? m(!1) : g({ check: _({ threshold: d.threshold }) });
320
+ d.threshold === y ? h(!1) : g({ check: _({ threshold: d.threshold }) });
321
321
  },
322
322
  onBlur: () => {
323
- d.threshold === y ? m(!1) : g({ check: _({ threshold: d.threshold }) });
323
+ d.threshold === y ? h(!1) : g({ check: _({ threshold: d.threshold }) });
324
324
  }
325
325
  })]
326
326
  }), /* @__PURE__ */ o("p", {
@@ -339,19 +339,19 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
339
339
  value: d.hysteresisCount,
340
340
  disabled: t,
341
341
  className: L,
342
- onFocus: () => m(!0),
342
+ onFocus: () => h(!0),
343
343
  onChange: (e) => f((t) => ({
344
344
  ...t,
345
345
  hysteresisCount: Number(e.target.value) || 1
346
346
  })),
347
347
  onBlur: () => {
348
348
  let t = q(d.hysteresisCount, 1, 10);
349
- t === e.check.hysteresisCount ? m(!1) : g({ check: _({ hysteresisCount: t }) });
349
+ t === e.check.hysteresisCount ? h(!1) : g({ check: _({ hysteresisCount: t }) });
350
350
  }
351
351
  })]
352
352
  }),
353
353
  /* @__PURE__ */ o("p", {
354
- className: h,
354
+ className: m,
355
355
  children: i("uiLibrary.sceneSettingsForm.agreeingHint", "One bad photograph must never be able to flip a scene. 3 agreeing checks at 60 s is about four minutes of latency and is what makes the answer trustworthy — leaving a state costs exactly the same as entering one.")
356
356
  }),
357
357
  /* @__PURE__ */ s("label", {
@@ -366,19 +366,19 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
366
366
  value: d.quietSeconds,
367
367
  disabled: t,
368
368
  className: L,
369
- onFocus: () => m(!0),
369
+ onFocus: () => h(!0),
370
370
  onChange: (e) => f((t) => ({
371
371
  ...t,
372
372
  quietSeconds: Number(e.target.value) || 0
373
373
  })),
374
374
  onBlur: () => {
375
375
  let t = q(d.quietSeconds, 0, 3600);
376
- t === e.quietSeconds ? m(!1) : g({ quietSeconds: t });
376
+ t === e.quietSeconds ? h(!1) : g({ quietSeconds: t });
377
377
  }
378
378
  })]
379
379
  }),
380
380
  /* @__PURE__ */ o("p", {
381
- className: h,
381
+ className: m,
382
382
  children: i("uiLibrary.sceneSettingsForm.quietHint", "A check taken while something is moving is a photograph of the van parked in front of the bin, so it is discarded rather than merely delayed. 0 disables the gate.")
383
383
  }),
384
384
  /* @__PURE__ */ s("label", {
@@ -393,19 +393,19 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
393
393
  value: d.minObservationSpacingSec,
394
394
  disabled: t,
395
395
  className: L,
396
- onFocus: () => m(!0),
396
+ onFocus: () => h(!0),
397
397
  onChange: (e) => f((t) => ({
398
398
  ...t,
399
399
  minObservationSpacingSec: Number(e.target.value) || 0
400
400
  })),
401
401
  onBlur: () => {
402
402
  let t = q(d.minObservationSpacingSec, 0, 3600);
403
- t === e.minObservationSpacingSec ? m(!1) : g({ minObservationSpacingSec: t });
403
+ t === e.minObservationSpacingSec ? h(!1) : g({ minObservationSpacingSec: t });
404
404
  }
405
405
  })]
406
406
  }),
407
407
  /* @__PURE__ */ o("p", {
408
- className: h,
408
+ className: m,
409
409
  children: i("uiLibrary.sceneSettingsForm.minGapHint", "Spreads the agreeing checks over real time instead of letting three adjacent polls inside one long occlusion be mistaken for three independent opinions.")
410
410
  })
411
411
  ]
@@ -440,7 +440,7 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
440
440
  })]
441
441
  }),
442
442
  /* @__PURE__ */ o("p", {
443
- className: h,
443
+ className: m,
444
444
  children: W(e.onUncoveredCondition, i)
445
445
  })
446
446
  ]
@@ -475,7 +475,7 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
475
475
  })]
476
476
  }),
477
477
  /* @__PURE__ */ o("p", {
478
- className: h,
478
+ className: m,
479
479
  children: i("uiLibrary.sceneSettingsForm.emitHint", "“Is the bin gone” is a flag: you want to be told once and still see it later. “Is the gate open” is a live state.")
480
480
  }),
481
481
  /* @__PURE__ */ s("label", {
@@ -491,7 +491,7 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
491
491
  })]
492
492
  }),
493
493
  /* @__PURE__ */ o("p", {
494
- className: h,
494
+ className: m,
495
495
  children: i("uiLibrary.sceneSettingsForm.autoRestoreHint", "Off by default, so an alarm never silently clears itself. The “back to normal” moment is recorded either way, so an automation can still react to it.")
496
496
  })
497
497
  ]
@@ -529,7 +529,7 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
529
529
  placeholder: i("uiLibrary.sceneSettingsForm.questionPlaceholder", "e.g. Is the wheelie bin still there?"),
530
530
  disabled: t,
531
531
  className: L,
532
- onFocus: () => m(!0),
532
+ onFocus: () => h(!0),
533
533
  onChange: (e) => f((t) => ({
534
534
  ...t,
535
535
  confirmPrompt: e.target.value
@@ -539,12 +539,12 @@ function K({ monitor: e, disabled: t, onPatch: r }) {
539
539
  t.length > 0 && t !== e.confirm?.prompt ? g({ confirm: {
540
540
  ...J(t),
541
541
  enabled: v
542
- } }) : m(!1);
542
+ } }) : h(!1);
543
543
  }
544
544
  })]
545
545
  }),
546
546
  /* @__PURE__ */ o("p", {
547
- className: h,
547
+ className: m,
548
548
  children: /* @__PURE__ */ o(u, {
549
549
  uiKey: "uiLibrary.sceneSettingsForm.confirmHint",
550
550
  fallback: "The model is asked <0>only</0> when the region has already changed enough to flip the answer — roughly twice a week for a bin, not once a minute. It reasons about the object rather than the pixels, so rain, shadows and a repositioned bin stop counting as the thing being taken. If it cannot be reached, the change is held rather than announced.",
@@ -577,20 +577,20 @@ var Y = "rounded-md border border-border bg-surface px-2 py-1 text-[11px] font-m
577
577
  unknown: "border-border bg-surface text-foreground-subtle"
578
578
  }, ae = .8, oe = 3;
579
579
  function Z({ deviceId: e }) {
580
- let u = l(), d = p(m().trpcClient, e), v = g(d?.state.sceneMonitor), y = T(e, { width: 640 }), [x, A] = a(null), [j, M] = a(!1), [N, P] = a(null), [F, I] = a(null), [L, R] = a(null), [z, B] = a(null), [V, H] = a(!1), [U, W] = a(null), [G, q] = a(""), J = t(!0);
580
+ let u = l(), g = f(p().trpcClient, e), v = h(g?.state.sceneMonitor), y = T(e, { width: 640 }), [x, A] = a(null), [j, M] = a(!1), [N, P] = a(null), [F, I] = a(null), [L, R] = a(null), [z, B] = a(null), [V, H] = a(!1), [U, W] = a(null), [G, q] = a(""), J = t(!0);
581
581
  n(() => (J.current = !0, () => {
582
582
  J.current = !1;
583
583
  }), []);
584
584
  let Z = i(async () => {
585
- if (d) try {
586
- let e = await d.sceneMonitor?.listScenes({});
585
+ if (g) try {
586
+ let e = await g.sceneMonitor?.listScenes({});
587
587
  if (!J.current) return;
588
588
  e && A(e);
589
589
  } catch (e) {
590
590
  if (!J.current) return;
591
- f(e) ? M(!0) : I(e instanceof Error ? e.message : String(e));
591
+ d(e) ? M(!0) : I(e instanceof Error ? e.message : String(e));
592
592
  }
593
- }, [d]);
593
+ }, [g]);
594
594
  n(() => {
595
595
  A(null), M(!1), I(null), Z();
596
596
  }, [Z]);
@@ -625,16 +625,16 @@ function Z({ deviceId: e }) {
625
625
  W(t);
626
626
  return;
627
627
  }
628
- $(`roi-${String(e)}`, async () => d?.sceneMonitor?.updateScene({
628
+ $(`roi-${String(e)}`, async () => g?.sceneMonitor?.updateScene({
629
629
  monitorId: String(e),
630
630
  patch: { roi: t }
631
631
  }));
632
632
  }
633
- }, [d, $]), ue = i((e) => {
633
+ }, [g, $]), ue = i((e) => {
634
634
  e.kind === "rect" && W(e);
635
635
  }, []), de = i(async () => {
636
636
  U === null || G.trim().length === 0 || (await $("create", async () => {
637
- await d?.sceneMonitor?.createScene({
637
+ await g?.sceneMonitor?.createScene({
638
638
  label: G.trim(),
639
639
  roi: U,
640
640
  check: {
@@ -645,19 +645,19 @@ function Z({ deviceId: e }) {
645
645
  });
646
646
  }), W(null), q(""), H(!1));
647
647
  }, [
648
- d,
648
+ g,
649
649
  U,
650
650
  G,
651
651
  $
652
652
  ]);
653
- return d ? /* @__PURE__ */ o("div", {
653
+ return g ? /* @__PURE__ */ o("div", {
654
654
  className: "flex flex-col gap-3",
655
655
  children: j ? /* @__PURE__ */ o("p", {
656
- className: `${h} leading-relaxed`,
656
+ className: `${m} leading-relaxed`,
657
657
  children: u("uiLibrary.sceneMonitor.unsupported", "Scene monitoring is not available for this camera.")
658
658
  }) : /* @__PURE__ */ s(c, { children: [
659
659
  /* @__PURE__ */ o("p", {
660
- className: `${h} leading-relaxed`,
660
+ className: `${m} leading-relaxed`,
661
661
  children: u("uiLibrary.sceneMonitor.intro", "A scene watches one region of this camera and tells you when it stops looking like the picture you captured. Draw a box around the thing you care about — a wheelie bin, a gate, a parking space — then capture what “normal” looks like. Daylight is enough to start: the night reference is optional, and without it the scene simply sits the infrared hours out instead of reporting a problem.")
662
662
  }),
663
663
  /* @__PURE__ */ o("div", {
@@ -731,7 +731,7 @@ function Z({ deviceId: e }) {
731
731
  children: F
732
732
  }),
733
733
  Q.length === 0 ? /* @__PURE__ */ o("p", {
734
- className: `${h} leading-relaxed`,
734
+ className: `${m} leading-relaxed`,
735
735
  children: u("uiLibrary.sceneMonitor.empty", "No scenes on this camera yet.")
736
736
  }) : /* @__PURE__ */ o("ul", {
737
737
  className: "flex flex-col gap-2",
@@ -753,17 +753,17 @@ function Z({ deviceId: e }) {
753
753
  })]
754
754
  }),
755
755
  /* @__PURE__ */ o("p", {
756
- className: `${h} leading-relaxed`,
756
+ className: `${m} leading-relaxed`,
757
757
  children: _(e, se, u)
758
758
  }),
759
759
  /* @__PURE__ */ o("p", {
760
- className: `${h} tabular-nums`,
760
+ className: `${m} tabular-nums`,
761
761
  children: w(e, u)
762
762
  }),
763
763
  /* @__PURE__ */ o(ne, {
764
764
  monitor: e,
765
765
  disabled: N !== null,
766
- onDelete: ({ stateId: t, index: n }) => void $(`refdel-${e.id}-${t}-${String(n)}`, async () => d.sceneMonitor?.deleteReference({
766
+ onDelete: ({ stateId: t, index: n }) => void $(`refdel-${e.id}-${t}-${String(n)}`, async () => g.sceneMonitor?.deleteReference({
767
767
  monitorId: e.id,
768
768
  stateId: t,
769
769
  index: n
@@ -779,7 +779,7 @@ function Z({ deviceId: e }) {
779
779
  className: Y,
780
780
  disabled: N !== null,
781
781
  title: n ? u("uiLibrary.sceneMonitor.optionalTitle", "Optional. Without a night reference the checks in infrared are simply skipped — the scene keeps working in daylight and nothing is reported as broken.") : u("uiLibrary.sceneMonitor.captureTitle", "Take a fresh photo now and store it as the {{variant}} reference", { variant: C(t, u).toLowerCase() }),
782
- onClick: () => void $(`cap-${e.id}-${t}`, async () => d.sceneMonitor?.captureReference({
782
+ onClick: () => void $(`cap-${e.id}-${t}`, async () => g.sceneMonitor?.captureReference({
783
783
  monitorId: e.id,
784
784
  condition: t
785
785
  })),
@@ -798,14 +798,14 @@ function Z({ deviceId: e }) {
798
798
  className: X,
799
799
  disabled: N !== null || e.states.length === 0,
800
800
  title: u("uiLibrary.sceneMonitor.resetTitle", "Clear the flag and re-photograph what normal looks like right now"),
801
- onClick: () => void $(`reset-${e.id}`, async () => d.sceneMonitor?.resetScene({ monitorId: e.id })),
801
+ onClick: () => void $(`reset-${e.id}`, async () => g.sceneMonitor?.resetScene({ monitorId: e.id })),
802
802
  children: [/* @__PURE__ */ o(D, { className: "mr-1 inline h-3 w-3" }), u("uiLibrary.sceneMonitor.reset", "Reset")]
803
803
  }),
804
804
  /* @__PURE__ */ o("button", {
805
805
  type: "button",
806
806
  className: Y,
807
807
  disabled: N !== null,
808
- onClick: () => void $(`check-${e.id}`, async () => d.sceneMonitor?.recheckNow({ monitorId: e.id })),
808
+ onClick: () => void $(`check-${e.id}`, async () => g.sceneMonitor?.recheckNow({ monitorId: e.id })),
809
809
  children: u("uiLibrary.sceneMonitor.checkNow", "Check now")
810
810
  }),
811
811
  /* @__PURE__ */ s("button", {
@@ -821,7 +821,7 @@ function Z({ deviceId: e }) {
821
821
  type: "button",
822
822
  className: re,
823
823
  disabled: N !== null,
824
- onClick: () => void $(`del-${e.id}`, async () => d.sceneMonitor?.deleteScene({ monitorId: e.id })),
824
+ onClick: () => void $(`del-${e.id}`, async () => g.sceneMonitor?.deleteScene({ monitorId: e.id })),
825
825
  children: /* @__PURE__ */ o(O, { className: "h-3 w-3" })
826
826
  })
827
827
  ]
@@ -829,7 +829,7 @@ function Z({ deviceId: e }) {
829
829
  z === e.id && /* @__PURE__ */ o(K, {
830
830
  monitor: e,
831
831
  disabled: N !== null,
832
- onPatch: (t) => void $(`tune-${e.id}`, async () => d.sceneMonitor?.updateScene({
832
+ onPatch: (t) => void $(`tune-${e.id}`, async () => g.sceneMonitor?.updateScene({
833
833
  monitorId: e.id,
834
834
  patch: t
835
835
  }))