@camstack/ui-library 1.1.7 → 1.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -17186,6 +17186,8 @@ var useDeviceManagerAdoptionRefresh = trpc.deviceManager.adoptionRefresh.useMuta
17186
17186
  var useDeviceManagerAdoptionAdopt = trpc.deviceManager.adoptionAdopt.useMutation;
17187
17187
  /** Generated alias around `trpc.deviceManager.adoptionRelease.useMutation`. */
17188
17188
  var useDeviceManagerAdoptionRelease = trpc.deviceManager.adoptionRelease.useMutation;
17189
+ /** Generated alias around `trpc.deviceManager.adoptionResync.useMutation`. */
17190
+ var useDeviceManagerAdoptionResync = trpc.deviceManager.adoptionResync.useMutation;
17189
17191
  /** Generated alias around `trpc.deviceManager.testField.useMutation`. */
17190
17192
  var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
17191
17193
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregate.useQuery`. */
@@ -18233,6 +18235,31 @@ var ROLE_DESCRIPTOR = {
18233
18235
  field: "value",
18234
18236
  getSliceHandle: (s) => s.numericSensor
18235
18237
  },
18238
+ "wind-sensor": {
18239
+ kind: "numeric",
18240
+ field: "value",
18241
+ getSliceHandle: (s) => s.numericSensor
18242
+ },
18243
+ "rain-sensor": {
18244
+ kind: "numeric",
18245
+ field: "value",
18246
+ getSliceHandle: (s) => s.numericSensor
18247
+ },
18248
+ "uv-sensor": {
18249
+ kind: "numeric",
18250
+ field: "value",
18251
+ getSliceHandle: (s) => s.numericSensor
18252
+ },
18253
+ "solar-radiation-sensor": {
18254
+ kind: "numeric",
18255
+ field: "value",
18256
+ getSliceHandle: (s) => s.numericSensor
18257
+ },
18258
+ "soil-moisture-sensor": {
18259
+ kind: "numeric",
18260
+ field: "value",
18261
+ getSliceHandle: (s) => s.numericSensor
18262
+ },
18236
18263
  "power-sensor": {
18237
18264
  kind: "numeric",
18238
18265
  field: "watts",
@@ -18746,6 +18773,10 @@ function vacuumStateMeta(state) {
18746
18773
  label: "Docked",
18747
18774
  tone: "text-success"
18748
18775
  };
18776
+ case "drying": return {
18777
+ label: "Drying",
18778
+ tone: "text-warning"
18779
+ };
18749
18780
  case "idle": return {
18750
18781
  label: "Idle",
18751
18782
  tone: "text-foreground-subtle"
@@ -18802,6 +18833,12 @@ function vacuumGraphicTint(state) {
18802
18833
  docked: true,
18803
18834
  active: false
18804
18835
  };
18836
+ case "drying": return {
18837
+ glow: "bg-warning/10",
18838
+ accent: "text-warning",
18839
+ docked: true,
18840
+ active: false
18841
+ };
18805
18842
  case "paused": return {
18806
18843
  glow: "bg-warning/10",
18807
18844
  accent: "text-warning",
@@ -18972,8 +19009,10 @@ function tankMeta(kind) {
18972
19009
  /**
18973
19010
  * TankIndicator — one tank row: label + glyph, then a fill bar (numeric
18974
19011
  * level) or a status pill (discrete), tinted by `tankAlert`. Renders
18975
- * nothing when the tank is absent (null) or its reading is unknown
18976
- * (both fields null).
19012
+ * nothing only when the tank is absent (null). A PRESENT tank whose
19013
+ * reading is unknown (both fields null) still renders a neutral row with
19014
+ * an em-dash placeholder, so the user always sees which tanks the robot
19015
+ * has (Dreame reports presence but no fill telemetry).
18977
19016
  */
18978
19017
  function TankIndicator({ kind, tank }) {
18979
19018
  if (tank === null) return null;
@@ -19009,15 +19048,22 @@ function TankIndicator({ kind, tank }) {
19009
19048
  children: tank.status
19010
19049
  })]
19011
19050
  });
19012
- return null;
19051
+ return /* @__PURE__ */ jsxs("div", {
19052
+ className: "flex items-center gap-2 text-xs",
19053
+ children: [/* @__PURE__ */ jsxs("span", {
19054
+ className: "inline-flex items-center gap-1 w-24 shrink-0 text-foreground-subtle",
19055
+ children: [meta.icon, meta.label]
19056
+ }), /* @__PURE__ */ jsx("span", {
19057
+ className: "inline-flex items-center rounded-full px-2 py-0.5 text-[11px] font-medium bg-surface-hover text-foreground-subtle",
19058
+ children: "—"
19059
+ })]
19060
+ });
19013
19061
  }
19014
19062
  /**
19015
19063
  * TanksRow — compact 2-column grid of the present tanks for the vacuum
19016
- * hero. Absent tanks (null) are skipped; the row renders nothing unless at
19017
- * least one tank is actually renderablepresent AND with a known reading
19018
- * (level or status). A tank that is present but all-unknown
19019
- * (`{level:null,status:null}`) renders nothing, so a hero of only such
19020
- * tanks would otherwise show an empty bordered box.
19064
+ * hero. Absent tanks (null) are skipped; every PRESENT tank is shown, even
19065
+ * when its reading is unknown (`{level:null,status:null}`)it renders a
19066
+ * neutral em-dash row. The row renders iff the robot has at least one tank.
19021
19067
  */
19022
19068
  function TanksRow({ cleanWater, dirtyWater, detergent, dustBin }) {
19023
19069
  const tanks = [
@@ -19026,7 +19072,7 @@ function TanksRow({ cleanWater, dirtyWater, detergent, dustBin }) {
19026
19072
  ["detergent", detergent],
19027
19073
  ["dustBin", dustBin]
19028
19074
  ];
19029
- if (!tanks.some(([, t]) => t !== null && (t.level !== null || t.status !== null))) return null;
19075
+ if (!tanks.some(([, t]) => t !== null)) return null;
19030
19076
  return /* @__PURE__ */ jsx("div", {
19031
19077
  className: "grid grid-cols-1 gap-x-6 gap-y-2 rounded-md border border-border bg-surface-hover/40 p-3 sm:grid-cols-2",
19032
19078
  children: tanks.map(([kind, tank]) => /* @__PURE__ */ jsx(TankIndicator, {
@@ -19120,52 +19166,72 @@ function VacuumHeroCard({ trpc, deviceId }) {
19120
19166
  className: "flex items-center gap-6",
19121
19167
  children: [/* @__PURE__ */ jsx(VacuumGraphic, { state }), /* @__PURE__ */ jsxs("div", {
19122
19168
  className: "flex flex-col gap-3 flex-1",
19123
- children: [/* @__PURE__ */ jsxs("div", {
19124
- className: "flex items-center justify-between",
19125
- children: [/* @__PURE__ */ jsx("span", {
19126
- className: cn("text-3xl font-semibold", meta.tone),
19127
- children: meta.label
19128
- }), slice?.batteryLevel != null && /* @__PURE__ */ jsx(BatteryBadge$2, { level: slice.batteryLevel })]
19129
- }), /* @__PURE__ */ jsxs("div", {
19130
- className: "flex items-center gap-2",
19131
- children: [
19132
- /* @__PURE__ */ jsx(VacuumHeroButton, {
19133
- label: "Start",
19134
- busy,
19135
- active: state === "cleaning",
19136
- onClick: () => press(cap.start),
19137
- children: /* @__PURE__ */ jsx(Play, { className: "h-5 w-5" })
19138
- }),
19139
- /* @__PURE__ */ jsx(VacuumHeroButton, {
19140
- label: "Pause",
19141
- busy,
19142
- active: state === "paused",
19143
- onClick: () => press(cap.pause),
19144
- children: /* @__PURE__ */ jsx(Pause, { className: "h-5 w-5" })
19145
- }),
19146
- /* @__PURE__ */ jsx(VacuumHeroButton, {
19147
- label: "Stop",
19148
- busy,
19149
- active: false,
19150
- onClick: () => press(cap.stop),
19151
- children: /* @__PURE__ */ jsx(Square, { className: "h-4 w-4" })
19152
- }),
19153
- /* @__PURE__ */ jsx(VacuumHeroButton, {
19154
- label: "Return to base",
19155
- busy,
19156
- active: state === "returning",
19157
- onClick: () => press(cap.returnToBase),
19158
- children: /* @__PURE__ */ jsx(House, { className: "h-5 w-5" })
19159
- }),
19160
- /* @__PURE__ */ jsx(VacuumHeroButton, {
19161
- label: "Locate",
19162
- busy,
19163
- active: false,
19164
- onClick: () => press(cap.locate),
19165
- children: /* @__PURE__ */ jsx(Megaphone, { className: "h-5 w-5" })
19166
- })
19167
- ]
19168
- })]
19169
+ children: [
19170
+ /* @__PURE__ */ jsxs("div", {
19171
+ className: "flex items-center justify-between",
19172
+ children: [/* @__PURE__ */ jsx("span", {
19173
+ className: cn("text-3xl font-semibold", meta.tone),
19174
+ children: meta.label
19175
+ }), slice?.batteryLevel != null && /* @__PURE__ */ jsx(BatteryBadge$2, { level: slice.batteryLevel })]
19176
+ }),
19177
+ slice?.progressPercent != null && /* @__PURE__ */ jsxs("div", {
19178
+ className: "flex items-center gap-2",
19179
+ children: [/* @__PURE__ */ jsx("div", {
19180
+ className: "h-1.5 flex-1 rounded bg-surface-hover overflow-hidden",
19181
+ children: /* @__PURE__ */ jsx("div", {
19182
+ className: "h-full bg-primary transition-[width] duration-500",
19183
+ style: { width: `${Math.max(0, Math.min(100, slice.progressPercent))}%` }
19184
+ })
19185
+ }), /* @__PURE__ */ jsxs("span", {
19186
+ className: "tabular-nums text-xs text-foreground-subtle",
19187
+ children: [Math.round(slice.progressPercent), "%"]
19188
+ })]
19189
+ }),
19190
+ slice?.errorCode != null && slice.errorCode !== 0 && /* @__PURE__ */ jsxs("div", {
19191
+ className: "inline-flex items-center gap-1 text-xs text-destructive",
19192
+ children: [/* @__PURE__ */ jsx(TriangleAlert, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("span", { children: slice.errorLabel ?? `Error ${slice.errorCode}` })]
19193
+ }),
19194
+ /* @__PURE__ */ jsxs("div", {
19195
+ className: "flex items-center gap-2",
19196
+ children: [
19197
+ /* @__PURE__ */ jsx(VacuumHeroButton, {
19198
+ label: "Start",
19199
+ busy,
19200
+ active: state === "cleaning",
19201
+ onClick: () => press(cap.start),
19202
+ children: /* @__PURE__ */ jsx(Play, { className: "h-5 w-5" })
19203
+ }),
19204
+ /* @__PURE__ */ jsx(VacuumHeroButton, {
19205
+ label: "Pause",
19206
+ busy,
19207
+ active: state === "paused",
19208
+ onClick: () => press(cap.pause),
19209
+ children: /* @__PURE__ */ jsx(Pause, { className: "h-5 w-5" })
19210
+ }),
19211
+ /* @__PURE__ */ jsx(VacuumHeroButton, {
19212
+ label: "Stop",
19213
+ busy,
19214
+ active: false,
19215
+ onClick: () => press(cap.stop),
19216
+ children: /* @__PURE__ */ jsx(Square, { className: "h-4 w-4" })
19217
+ }),
19218
+ /* @__PURE__ */ jsx(VacuumHeroButton, {
19219
+ label: "Return to base",
19220
+ busy,
19221
+ active: state === "returning",
19222
+ onClick: () => press(cap.returnToBase),
19223
+ children: /* @__PURE__ */ jsx(House, { className: "h-5 w-5" })
19224
+ }),
19225
+ /* @__PURE__ */ jsx(VacuumHeroButton, {
19226
+ label: "Locate",
19227
+ busy,
19228
+ active: false,
19229
+ onClick: () => press(cap.locate),
19230
+ children: /* @__PURE__ */ jsx(Megaphone, { className: "h-5 w-5" })
19231
+ })
19232
+ ]
19233
+ })
19234
+ ]
19169
19235
  })]
19170
19236
  }),
19171
19237
  fanSpeeds.length > 0 && /* @__PURE__ */ jsxs("label", {
@@ -19393,6 +19459,37 @@ function LawnMowerGraphic({ activity }) {
19393
19459
  })]
19394
19460
  });
19395
19461
  }
19462
+ /** Tailwind text tone for a device-code severity. */
19463
+ function severityTone(severity) {
19464
+ switch (severity) {
19465
+ case "error": return "text-destructive";
19466
+ case "warning": return "text-warning";
19467
+ case "info": return "text-foreground-subtle";
19468
+ }
19469
+ }
19470
+ /** Mowing-progress bar + % — shown only when a progress value is present. */
19471
+ function ProgressBar({ percent }) {
19472
+ return /* @__PURE__ */ jsxs("div", {
19473
+ className: "flex items-center gap-2",
19474
+ children: [/* @__PURE__ */ jsx("div", {
19475
+ className: "h-1.5 flex-1 rounded bg-surface-hover overflow-hidden",
19476
+ children: /* @__PURE__ */ jsx("div", {
19477
+ className: "h-full bg-primary transition-[width] duration-500",
19478
+ style: { width: `${Math.max(0, Math.min(100, percent))}%` }
19479
+ })
19480
+ }), /* @__PURE__ */ jsxs("span", {
19481
+ className: "tabular-nums text-xs text-foreground-subtle",
19482
+ children: [Math.round(percent), "%"]
19483
+ })]
19484
+ });
19485
+ }
19486
+ /** Current device/event code line — tinted by severity; an icon for warn/error. */
19487
+ function CodeLine({ code, label, severity }) {
19488
+ return /* @__PURE__ */ jsxs("div", {
19489
+ className: cn("inline-flex items-center gap-1 text-xs", severityTone(severity)),
19490
+ children: [severity !== "info" && /* @__PURE__ */ jsx(TriangleAlert, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("span", { children: label ?? `Code ${code}` })]
19491
+ });
19492
+ }
19396
19493
  /** Battery % badge — shared between inline + hero. */
19397
19494
  function BatteryBadge$1({ level }) {
19398
19495
  return /* @__PURE__ */ jsxs("span", {
@@ -19496,38 +19593,47 @@ function LawnMowerHeroCard({ trpc, deviceId }) {
19496
19593
  className: "flex items-center gap-6",
19497
19594
  children: [/* @__PURE__ */ jsx(LawnMowerGraphic, { activity }), /* @__PURE__ */ jsxs("div", {
19498
19595
  className: "flex flex-col gap-3 flex-1",
19499
- children: [/* @__PURE__ */ jsxs("div", {
19500
- className: "flex items-center justify-between",
19501
- children: [/* @__PURE__ */ jsx("span", {
19502
- className: cn("text-3xl font-semibold", meta.tone),
19503
- children: meta.label
19504
- }), slice?.batteryLevel != null && /* @__PURE__ */ jsx(BatteryBadge$1, { level: slice.batteryLevel })]
19505
- }), /* @__PURE__ */ jsxs("div", {
19506
- className: "flex items-center gap-2",
19507
- children: [
19508
- /* @__PURE__ */ jsx(LawnMowerHeroButton, {
19509
- label: "Start mowing",
19510
- busy,
19511
- active: activity === "mowing",
19512
- onClick: () => press(cap.startMowing),
19513
- children: /* @__PURE__ */ jsx(Play, { className: "h-5 w-5" })
19514
- }),
19515
- /* @__PURE__ */ jsx(LawnMowerHeroButton, {
19516
- label: "Pause",
19517
- busy,
19518
- active: activity === "paused",
19519
- onClick: () => press(cap.pause),
19520
- children: /* @__PURE__ */ jsx(Pause, { className: "h-5 w-5" })
19521
- }),
19522
- /* @__PURE__ */ jsx(LawnMowerHeroButton, {
19523
- label: "Dock",
19524
- busy,
19525
- active: activity === "docked",
19526
- onClick: () => press(cap.dock),
19527
- children: /* @__PURE__ */ jsx(House, { className: "h-5 w-5" })
19528
- })
19529
- ]
19530
- })]
19596
+ children: [
19597
+ /* @__PURE__ */ jsxs("div", {
19598
+ className: "flex items-center justify-between",
19599
+ children: [/* @__PURE__ */ jsx("span", {
19600
+ className: cn("text-3xl font-semibold", meta.tone),
19601
+ children: meta.label
19602
+ }), slice?.batteryLevel != null && /* @__PURE__ */ jsx(BatteryBadge$1, { level: slice.batteryLevel })]
19603
+ }),
19604
+ slice?.progressPercent != null && /* @__PURE__ */ jsx(ProgressBar, { percent: slice.progressPercent }),
19605
+ slice?.currentCode != null && /* @__PURE__ */ jsx(CodeLine, {
19606
+ code: slice.currentCode,
19607
+ label: slice.currentCodeLabel,
19608
+ severity: slice.severity
19609
+ }),
19610
+ /* @__PURE__ */ jsxs("div", {
19611
+ className: "flex items-center gap-2",
19612
+ children: [
19613
+ /* @__PURE__ */ jsx(LawnMowerHeroButton, {
19614
+ label: "Start mowing",
19615
+ busy,
19616
+ active: activity === "mowing",
19617
+ onClick: () => press(cap.startMowing),
19618
+ children: /* @__PURE__ */ jsx(Play, { className: "h-5 w-5" })
19619
+ }),
19620
+ /* @__PURE__ */ jsx(LawnMowerHeroButton, {
19621
+ label: "Pause",
19622
+ busy,
19623
+ active: activity === "paused",
19624
+ onClick: () => press(cap.pause),
19625
+ children: /* @__PURE__ */ jsx(Pause, { className: "h-5 w-5" })
19626
+ }),
19627
+ /* @__PURE__ */ jsx(LawnMowerHeroButton, {
19628
+ label: "Dock",
19629
+ busy,
19630
+ active: activity === "docked",
19631
+ onClick: () => press(cap.dock),
19632
+ children: /* @__PURE__ */ jsx(House, { className: "h-5 w-5" })
19633
+ })
19634
+ ]
19635
+ })
19636
+ ]
19531
19637
  })]
19532
19638
  })
19533
19639
  });
@@ -21261,103 +21367,6 @@ function WeatherHeroCard({ trpc, deviceId }) {
21261
21367
  });
21262
21368
  }
21263
21369
  //#endregion
21264
- //#region src/composites/hover-zoom-image.tsx
21265
- /**
21266
- * <HoverZoomImage> — a small thumbnail that expands into a floating
21267
- * enlarged preview on hover/focus.
21268
- *
21269
- * One responsibility: render a compact thumbnail (image when `src` is
21270
- * present, a muted `ImageOff` placeholder box when null) and, while the
21271
- * thumbnail is hovered or focused, portal a larger preview to
21272
- * `document.body` positioned with FLIP-ON-COLLISION:
21273
- * - the position is computed from the thumbnail's `getBoundingClientRect`;
21274
- * - placed ABOVE the thumbnail unless there is insufficient space (then
21275
- * below); left-clamped to the viewport;
21276
- * - `position:fixed`, `pointer-events:none`, `z-[9999]`.
21277
- *
21278
- * The portal is what lets this work inside the device grid, whose overflow
21279
- * ancestors would otherwise clip a normally-positioned popover.
21280
- *
21281
- * Reused by BOTH the Image DeviceType inline control (signed image url) and
21282
- * the camera-snapshot cell in device rows (snapshot blob/object url).
21283
- */
21284
- var DEFAULT_EXPANDED_WIDTH = 288;
21285
- var DEFAULT_EXPANDED_HEIGHT = 196;
21286
- var DEFAULT_THUMB_CLASS = "h-7 w-7 rounded";
21287
- var TRIGGER_GAP = 8;
21288
- var VIEWPORT_MARGIN = 8;
21289
- function HoverZoomImage({ src, alt, caption, placeholder = "No image", thumbClassName = DEFAULT_THUMB_CLASS, expandedWidth = DEFAULT_EXPANDED_WIDTH, expandedHeight = DEFAULT_EXPANDED_HEIGHT }) {
21290
- const triggerRef = useRef(null);
21291
- const [position, setPosition] = useState(null);
21292
- const [errored, setErrored] = useState(false);
21293
- useEffect(() => {
21294
- setErrored(false);
21295
- }, [src]);
21296
- const hasImage = src !== null && !errored;
21297
- const safeSrc = src ?? void 0;
21298
- const open = useCallback(() => {
21299
- const el = triggerRef.current;
21300
- if (!el) return;
21301
- const rect = el.getBoundingClientRect();
21302
- const spaceAbove = rect.top;
21303
- const spaceBelow = window.innerHeight - rect.bottom;
21304
- const top = spaceAbove < expandedHeight + TRIGGER_GAP && spaceBelow > spaceAbove ? rect.bottom + TRIGGER_GAP : rect.top - expandedHeight - TRIGGER_GAP;
21305
- const desiredLeft = rect.right - expandedWidth;
21306
- setPosition({
21307
- top,
21308
- left: Math.max(VIEWPORT_MARGIN, Math.min(desiredLeft, window.innerWidth - expandedWidth - VIEWPORT_MARGIN))
21309
- });
21310
- }, [expandedWidth, expandedHeight]);
21311
- const close = useCallback(() => setPosition(null), []);
21312
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
21313
- ref: triggerRef,
21314
- type: "button",
21315
- onClick: (e) => e.stopPropagation(),
21316
- onMouseEnter: open,
21317
- onMouseLeave: close,
21318
- onFocus: open,
21319
- onBlur: close,
21320
- "aria-label": alt,
21321
- className: `flex flex-shrink-0 items-center justify-center overflow-hidden border border-border bg-background text-foreground-subtle transition-colors hover:bg-surface-hover ${thumbClassName}`,
21322
- children: hasImage ? /* @__PURE__ */ jsx("img", {
21323
- src: safeSrc,
21324
- alt: "",
21325
- onError: () => setErrored(true),
21326
- className: "h-full w-full object-cover"
21327
- }) : /* @__PURE__ */ jsx(ImageOff, {
21328
- className: "h-3.5 w-3.5",
21329
- "aria-hidden": "true"
21330
- })
21331
- }), position && createPortal(/* @__PURE__ */ jsxs("div", {
21332
- "aria-hidden": "true",
21333
- style: {
21334
- position: "fixed",
21335
- top: position.top,
21336
- left: position.left,
21337
- width: expandedWidth,
21338
- pointerEvents: "none"
21339
- },
21340
- className: "z-[9999] overflow-hidden rounded-lg border border-border bg-surface shadow-lg shadow-black/30",
21341
- children: [/* @__PURE__ */ jsx("div", {
21342
- className: "flex h-40 items-center justify-center bg-background",
21343
- children: hasImage ? /* @__PURE__ */ jsx("img", {
21344
- src: safeSrc,
21345
- alt,
21346
- className: "h-full w-full object-cover"
21347
- }) : /* @__PURE__ */ jsx("span", {
21348
- className: "text-xs text-foreground-subtle",
21349
- children: placeholder
21350
- })
21351
- }), /* @__PURE__ */ jsx("div", {
21352
- className: "px-3 py-2",
21353
- children: /* @__PURE__ */ jsx("p", {
21354
- className: "truncate text-xs font-semibold text-foreground",
21355
- children: caption ?? alt
21356
- })
21357
- })]
21358
- }), document.body)] });
21359
- }
21360
- //#endregion
21361
21370
  //#region src/composites/device-controls/image-control.tsx
21362
21371
  /**
21363
21372
  * Image controls for a `DeviceType.Image` device.
@@ -21381,6 +21390,91 @@ function useImage(trpc, deviceId) {
21381
21390
  slice: (d) => d.state.image
21382
21391
  });
21383
21392
  }
21393
+ var ZOOM_MIN = 1;
21394
+ var ZOOM_MAX = 6;
21395
+ var ZOOM_STEP = .5;
21396
+ /**
21397
+ * ImageDetailModal — a full-view image dialog with zoom in/out/reset and pan
21398
+ * (scroll when zoomed). Generous padding frames the image. Opened by clicking
21399
+ * the inline thumbnail or the hero image. Controlled via `open`/`onOpenChange`.
21400
+ */
21401
+ function ImageDetailModal({ url, alt, open, onOpenChange }) {
21402
+ const [scale, setScale] = useState(1);
21403
+ useEffect(() => {
21404
+ if (open) setScale(1);
21405
+ }, [open, url]);
21406
+ const zoomIn = useCallback(() => setScale((s) => Math.min(ZOOM_MAX, s + ZOOM_STEP)), []);
21407
+ const zoomOut = useCallback(() => setScale((s) => Math.max(ZOOM_MIN, s - ZOOM_STEP)), []);
21408
+ const reset = useCallback(() => setScale(1), []);
21409
+ return /* @__PURE__ */ jsx(Dialog, {
21410
+ open,
21411
+ onOpenChange,
21412
+ children: /* @__PURE__ */ jsxs(DialogContent, {
21413
+ width: "lg",
21414
+ className: "max-w-5xl p-6",
21415
+ children: [/* @__PURE__ */ jsxs("div", {
21416
+ className: "flex items-center justify-between gap-2 mb-3",
21417
+ children: [/* @__PURE__ */ jsx("span", {
21418
+ className: "truncate text-sm font-semibold text-foreground",
21419
+ children: alt
21420
+ }), /* @__PURE__ */ jsxs("div", {
21421
+ className: "flex items-center gap-1",
21422
+ children: [
21423
+ /* @__PURE__ */ jsx(ModalIconButton, {
21424
+ label: "Zoom out",
21425
+ disabled: scale <= ZOOM_MIN,
21426
+ onClick: zoomOut,
21427
+ children: /* @__PURE__ */ jsx(ZoomOut, { className: "h-4 w-4" })
21428
+ }),
21429
+ /* @__PURE__ */ jsxs("span", {
21430
+ className: "tabular-nums text-xs text-foreground-subtle w-10 text-center",
21431
+ children: [Math.round(scale * 100), "%"]
21432
+ }),
21433
+ /* @__PURE__ */ jsx(ModalIconButton, {
21434
+ label: "Zoom in",
21435
+ disabled: scale >= ZOOM_MAX,
21436
+ onClick: zoomIn,
21437
+ children: /* @__PURE__ */ jsx(ZoomIn, { className: "h-4 w-4" })
21438
+ }),
21439
+ /* @__PURE__ */ jsx(ModalIconButton, {
21440
+ label: "Reset zoom",
21441
+ disabled: scale === 1,
21442
+ onClick: reset,
21443
+ children: /* @__PURE__ */ jsx(RotateCcw, { className: "h-4 w-4" })
21444
+ }),
21445
+ /* @__PURE__ */ jsx(ModalIconButton, {
21446
+ label: "Close",
21447
+ onClick: () => onOpenChange(false),
21448
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
21449
+ })
21450
+ ]
21451
+ })]
21452
+ }), /* @__PURE__ */ jsx("div", {
21453
+ className: "max-h-[78vh] overflow-auto rounded border border-border bg-gradient-to-b from-surface-hover to-surface p-6",
21454
+ children: /* @__PURE__ */ jsx("img", {
21455
+ src: url,
21456
+ alt,
21457
+ style: {
21458
+ width: `${scale * 100}%`,
21459
+ maxWidth: "none"
21460
+ },
21461
+ className: "mx-auto block h-auto transition-[width] duration-150"
21462
+ })
21463
+ })]
21464
+ })
21465
+ });
21466
+ }
21467
+ function ModalIconButton({ label, disabled, onClick, children }) {
21468
+ return /* @__PURE__ */ jsx("button", {
21469
+ type: "button",
21470
+ "aria-label": label,
21471
+ title: label,
21472
+ disabled,
21473
+ onClick,
21474
+ className: "inline-flex h-7 w-7 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
21475
+ children
21476
+ });
21477
+ }
21384
21478
  /**
21385
21479
  * ImageInlineControl — compact thumbnail for a device-list row that expands
21386
21480
  * into a floating preview on hover/focus (shared `HoverZoomImage`). Shows a
@@ -21391,13 +21485,36 @@ function useImage(trpc, deviceId) {
21391
21485
  */
21392
21486
  function ImageInlineControl({ trpc, deviceId }) {
21393
21487
  const { slice } = useImage(trpc, deviceId);
21488
+ const [open, setOpen] = useState(false);
21394
21489
  if (slice === void 0) return null;
21395
- return /* @__PURE__ */ jsx(HoverZoomImage, {
21396
- src: slice.url,
21397
- alt: "Image",
21398
- placeholder: "No image",
21399
- thumbClassName: "h-7 w-7 rounded"
21490
+ const url = slice.url;
21491
+ if (url === null) return /* @__PURE__ */ jsx("span", {
21492
+ className: "inline-flex h-7 w-7 items-center justify-center rounded bg-surface-hover text-foreground-subtle",
21493
+ title: "No image",
21494
+ children: /* @__PURE__ */ jsx(ImageOff, {
21495
+ className: "h-4 w-4",
21496
+ "aria-hidden": "true"
21497
+ })
21400
21498
  });
21499
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
21500
+ type: "button",
21501
+ title: "View image",
21502
+ onClick: (e) => {
21503
+ e.stopPropagation();
21504
+ setOpen(true);
21505
+ },
21506
+ className: "inline-flex items-center justify-center rounded ring-offset-1 hover:ring-2 hover:ring-primary/50 transition",
21507
+ children: /* @__PURE__ */ jsx("img", {
21508
+ src: url,
21509
+ alt: "Image",
21510
+ className: "h-7 w-7 rounded object-cover"
21511
+ })
21512
+ }), /* @__PURE__ */ jsx(ImageDetailModal, {
21513
+ url,
21514
+ alt: "Image",
21515
+ open,
21516
+ onOpenChange: setOpen
21517
+ })] });
21401
21518
  }
21402
21519
  /**
21403
21520
  * ImageHeroCard — read-only framed image for the device-detail hero.
@@ -21410,19 +21527,27 @@ function ImageInlineControl({ trpc, deviceId }) {
21410
21527
  function ImageHeroCard({ trpc, deviceId, deviceName }) {
21411
21528
  const { slice } = useImage(trpc, deviceId);
21412
21529
  const [errored, setErrored] = useState(false);
21530
+ const [open, setOpen] = useState(false);
21531
+ const url = slice?.url ?? null;
21413
21532
  useEffect(() => {
21414
21533
  setErrored(false);
21415
- }, [slice?.url ?? null]);
21534
+ }, [url]);
21416
21535
  if (slice === void 0) return null;
21417
- return /* @__PURE__ */ jsx("div", {
21536
+ return /* @__PURE__ */ jsxs("div", {
21418
21537
  className: "flex flex-col items-stretch gap-3 rounded-lg border border-border bg-surface p-4",
21419
- children: /* @__PURE__ */ jsx("div", {
21538
+ children: [/* @__PURE__ */ jsx("div", {
21420
21539
  className: "flex w-full items-center justify-center overflow-hidden rounded border-2 border-border bg-gradient-to-b from-surface-hover to-surface",
21421
- children: slice.url !== null && !errored ? /* @__PURE__ */ jsx("img", {
21422
- src: slice.url,
21423
- alt: deviceName ?? "Image",
21424
- onError: () => setErrored(true),
21425
- className: "max-h-72 w-full object-contain"
21540
+ children: slice.url !== null && !errored ? /* @__PURE__ */ jsx("button", {
21541
+ type: "button",
21542
+ title: "View image",
21543
+ onClick: () => setOpen(true),
21544
+ className: "flex w-full cursor-zoom-in items-center justify-center",
21545
+ children: /* @__PURE__ */ jsx("img", {
21546
+ src: slice.url,
21547
+ alt: deviceName ?? "Image",
21548
+ onError: () => setErrored(true),
21549
+ className: "max-h-72 w-full object-contain"
21550
+ })
21426
21551
  }) : /* @__PURE__ */ jsxs("div", {
21427
21552
  "data-testid": "image-placeholder",
21428
21553
  className: "flex h-48 w-full flex-col items-center justify-center gap-2 text-foreground-subtle",
@@ -21434,7 +21559,12 @@ function ImageHeroCard({ trpc, deviceId, deviceName }) {
21434
21559
  children: "No image"
21435
21560
  })]
21436
21561
  })
21437
- })
21562
+ }), url !== null && !errored && /* @__PURE__ */ jsx(ImageDetailModal, {
21563
+ url,
21564
+ alt: deviceName ?? "Image",
21565
+ open,
21566
+ onOpenChange: setOpen
21567
+ })]
21438
21568
  });
21439
21569
  }
21440
21570
  //#endregion
@@ -24993,6 +25123,103 @@ function BatteryBadge({ status, variant = "compact", className }) {
24993
25123
  });
24994
25124
  }
24995
25125
  //#endregion
25126
+ //#region src/composites/hover-zoom-image.tsx
25127
+ /**
25128
+ * <HoverZoomImage> — a small thumbnail that expands into a floating
25129
+ * enlarged preview on hover/focus.
25130
+ *
25131
+ * One responsibility: render a compact thumbnail (image when `src` is
25132
+ * present, a muted `ImageOff` placeholder box when null) and, while the
25133
+ * thumbnail is hovered or focused, portal a larger preview to
25134
+ * `document.body` positioned with FLIP-ON-COLLISION:
25135
+ * - the position is computed from the thumbnail's `getBoundingClientRect`;
25136
+ * - placed ABOVE the thumbnail unless there is insufficient space (then
25137
+ * below); left-clamped to the viewport;
25138
+ * - `position:fixed`, `pointer-events:none`, `z-[9999]`.
25139
+ *
25140
+ * The portal is what lets this work inside the device grid, whose overflow
25141
+ * ancestors would otherwise clip a normally-positioned popover.
25142
+ *
25143
+ * Reused by BOTH the Image DeviceType inline control (signed image url) and
25144
+ * the camera-snapshot cell in device rows (snapshot blob/object url).
25145
+ */
25146
+ var DEFAULT_EXPANDED_WIDTH = 288;
25147
+ var DEFAULT_EXPANDED_HEIGHT = 196;
25148
+ var DEFAULT_THUMB_CLASS = "h-7 w-7 rounded";
25149
+ var TRIGGER_GAP = 8;
25150
+ var VIEWPORT_MARGIN = 8;
25151
+ function HoverZoomImage({ src, alt, caption, placeholder = "No image", thumbClassName = DEFAULT_THUMB_CLASS, expandedWidth = DEFAULT_EXPANDED_WIDTH, expandedHeight = DEFAULT_EXPANDED_HEIGHT }) {
25152
+ const triggerRef = useRef(null);
25153
+ const [position, setPosition] = useState(null);
25154
+ const [errored, setErrored] = useState(false);
25155
+ useEffect(() => {
25156
+ setErrored(false);
25157
+ }, [src]);
25158
+ const hasImage = src !== null && !errored;
25159
+ const safeSrc = src ?? void 0;
25160
+ const open = useCallback(() => {
25161
+ const el = triggerRef.current;
25162
+ if (!el) return;
25163
+ const rect = el.getBoundingClientRect();
25164
+ const spaceAbove = rect.top;
25165
+ const spaceBelow = window.innerHeight - rect.bottom;
25166
+ const top = spaceAbove < expandedHeight + TRIGGER_GAP && spaceBelow > spaceAbove ? rect.bottom + TRIGGER_GAP : rect.top - expandedHeight - TRIGGER_GAP;
25167
+ const desiredLeft = rect.right - expandedWidth;
25168
+ setPosition({
25169
+ top,
25170
+ left: Math.max(VIEWPORT_MARGIN, Math.min(desiredLeft, window.innerWidth - expandedWidth - VIEWPORT_MARGIN))
25171
+ });
25172
+ }, [expandedWidth, expandedHeight]);
25173
+ const close = useCallback(() => setPosition(null), []);
25174
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
25175
+ ref: triggerRef,
25176
+ type: "button",
25177
+ onClick: (e) => e.stopPropagation(),
25178
+ onMouseEnter: open,
25179
+ onMouseLeave: close,
25180
+ onFocus: open,
25181
+ onBlur: close,
25182
+ "aria-label": alt,
25183
+ className: `flex flex-shrink-0 items-center justify-center overflow-hidden border border-border bg-background text-foreground-subtle transition-colors hover:bg-surface-hover ${thumbClassName}`,
25184
+ children: hasImage ? /* @__PURE__ */ jsx("img", {
25185
+ src: safeSrc,
25186
+ alt: "",
25187
+ onError: () => setErrored(true),
25188
+ className: "h-full w-full object-cover"
25189
+ }) : /* @__PURE__ */ jsx(ImageOff, {
25190
+ className: "h-3.5 w-3.5",
25191
+ "aria-hidden": "true"
25192
+ })
25193
+ }), position && createPortal(/* @__PURE__ */ jsxs("div", {
25194
+ "aria-hidden": "true",
25195
+ style: {
25196
+ position: "fixed",
25197
+ top: position.top,
25198
+ left: position.left,
25199
+ width: expandedWidth,
25200
+ pointerEvents: "none"
25201
+ },
25202
+ className: "z-[9999] overflow-hidden rounded-lg border border-border bg-surface shadow-lg shadow-black/30",
25203
+ children: [/* @__PURE__ */ jsx("div", {
25204
+ className: "flex h-40 items-center justify-center bg-background",
25205
+ children: hasImage ? /* @__PURE__ */ jsx("img", {
25206
+ src: safeSrc,
25207
+ alt,
25208
+ className: "h-full w-full object-cover"
25209
+ }) : /* @__PURE__ */ jsx("span", {
25210
+ className: "text-xs text-foreground-subtle",
25211
+ children: placeholder
25212
+ })
25213
+ }), /* @__PURE__ */ jsx("div", {
25214
+ className: "px-3 py-2",
25215
+ children: /* @__PURE__ */ jsx("p", {
25216
+ className: "truncate text-xs font-semibold text-foreground",
25217
+ children: caption ?? alt
25218
+ })
25219
+ })]
25220
+ }), document.body)] });
25221
+ }
25222
+ //#endregion
24996
25223
  //#region src/composites/device-item/preview.tsx
24997
25224
  function DeviceItemPreview({ trpc, device, status, enabled, showStatusPills = false }) {
24998
25225
  const snapshot = useDeviceSnapshotImage(trpc, enabled && device.online ? device.id : null);
@@ -42331,4 +42558,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
42331
42558
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
42332
42559
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
42333
42560
  //#endregion
42334
- export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EmptyState, ErrorBox, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolvePrimaryChild, sortRows, statusIcons, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdateFrameworkPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverDevices, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputSend, useNotificationOutputSendTest, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDetect, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignDecoder, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDecoderAssignment, usePipelineOrchestratorGetDecoderAssignments, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignDecoder, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerReportMotion, usePlateGalleryCorrectPlateText, usePlateGalleryDeletePlate, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordingApplyDeviceSettingsPatch, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetStatus, useSnapshotInvalidateCache, useSnapshotProviderGetSnapshot, useSnapshotProviderSupportsDevice, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
42561
+ export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EmptyState, ErrorBox, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolvePrimaryChild, sortRows, statusIcons, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdateFrameworkPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverDevices, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputSend, useNotificationOutputSendTest, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDetect, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignDecoder, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDecoderAssignment, usePipelineOrchestratorGetDecoderAssignments, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignDecoder, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerReportMotion, usePlateGalleryCorrectPlateText, usePlateGalleryDeletePlate, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordingApplyDeviceSettingsPatch, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetStatus, useSnapshotInvalidateCache, useSnapshotProviderGetSnapshot, useSnapshotProviderSupportsDevice, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };