@camstack/ui-library 1.2.173 → 1.2.174

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
@@ -2021,6 +2021,30 @@ var Gauge = createLucideIcon("gauge", [["path", {
2021
2021
  * This source code is licensed under the ISC license.
2022
2022
  * See the LICENSE file in the root directory of this source tree.
2023
2023
  */
2024
+ var Grid2x2 = createLucideIcon("grid-2x2", [
2025
+ ["path", {
2026
+ d: "M12 3v18",
2027
+ key: "108xh3"
2028
+ }],
2029
+ ["path", {
2030
+ d: "M3 12h18",
2031
+ key: "1i2n21"
2032
+ }],
2033
+ ["rect", {
2034
+ x: "3",
2035
+ y: "3",
2036
+ width: "18",
2037
+ height: "18",
2038
+ rx: "2",
2039
+ key: "h1oib"
2040
+ }]
2041
+ ]);
2042
+ /**
2043
+ * @license lucide-react v0.576.0 - ISC
2044
+ *
2045
+ * This source code is licensed under the ISC license.
2046
+ * See the LICENSE file in the root directory of this source tree.
2047
+ */
2024
2048
  var GripHorizontal = createLucideIcon("grip-horizontal", [
2025
2049
  ["circle", {
2026
2050
  cx: "12",
@@ -6575,6 +6599,12 @@ var usePtzGoHome = trpc.ptz.goHome.useMutation;
6575
6599
  var usePtzGetHomePreset = trpc.ptz.getHomePreset.useQuery;
6576
6600
  /** Generated alias around `trpc.ptz.setHomePreset.useMutation`. */
6577
6601
  var usePtzSetHomePreset = trpc.ptz.setHomePreset.useMutation;
6602
+ /** Generated alias around `trpc.ptz.captureHomeHere.useMutation`. */
6603
+ var usePtzCaptureHomeHere = trpc.ptz.captureHomeHere.useMutation;
6604
+ /** Generated alias around `trpc.ptz.getHomeReturnSeconds.useQuery`. */
6605
+ var usePtzGetHomeReturnSeconds = trpc.ptz.getHomeReturnSeconds.useQuery;
6606
+ /** Generated alias around `trpc.ptz.setHomeReturnSeconds.useMutation`. */
6607
+ var usePtzSetHomeReturnSeconds = trpc.ptz.setHomeReturnSeconds.useMutation;
6578
6608
  /** Generated alias around `trpc.ptz.getPosition.useQuery`. */
6579
6609
  var usePtzGetPosition = trpc.ptz.getPosition.useQuery;
6580
6610
  /** Generated alias around `trpc.ptz.setAutofocus.useMutation`. */
@@ -16207,6 +16237,611 @@ function AutotrackSection({ deviceId }) {
16207
16237
  });
16208
16238
  }
16209
16239
  //#endregion
16240
+ //#region src/hooks/use-devices.ts
16241
+ /**
16242
+ * useDevices / useDevice — reactive sync-mirror reads.
16243
+ *
16244
+ * Both hooks hand out `DeviceProxy` references straight out of the
16245
+ * `System` mirror. The mirror keeps device + binding caches warm via
16246
+ * the `device.registered/unregistered/bindings-changed` event stream,
16247
+ * so re-renders are driven by lifecycle pushes — no React Query
16248
+ * round-trip and no `refetch` plumbing needed at the caller side.
16249
+ *
16250
+ * The hooks defensively read once on mount and assume the System has
16251
+ * been `init()`ed by the host app — calls before the warm-boot
16252
+ * completes simply return an empty array / null and re-render once
16253
+ * the registered listeners fire.
16254
+ */
16255
+ /**
16256
+ * Reactive list of devices matching the optional filter set. Returns a
16257
+ * stable array reference between updates so consumers passing it as a
16258
+ * prop don't tear down memoized children.
16259
+ */
16260
+ function useDevices(filters) {
16261
+ const system = useSystem();
16262
+ const filtersKey = useMemo(() => filters ? JSON.stringify(filters) : "", [filters]);
16263
+ const [devices, setDevices] = useState(() => system.listDevices(filters));
16264
+ useEffect(() => {
16265
+ const refresh = () => {
16266
+ setDevices(system.listDevices(filters));
16267
+ };
16268
+ refresh();
16269
+ let unsubAdded = null;
16270
+ let unsubRemoved = null;
16271
+ try {
16272
+ unsubAdded = system.onDeviceAdded(refresh);
16273
+ unsubRemoved = system.onDeviceRemoved(refresh);
16274
+ } catch {}
16275
+ const unsubConn = system.subscribeConnectionEvents((state) => {
16276
+ if (state === "connected") refresh();
16277
+ });
16278
+ return () => {
16279
+ unsubAdded?.();
16280
+ unsubRemoved?.();
16281
+ unsubConn();
16282
+ };
16283
+ }, [
16284
+ system,
16285
+ filters,
16286
+ filtersKey
16287
+ ]);
16288
+ return devices;
16289
+ }
16290
+ /**
16291
+ * Single-device variant. Returns `null` until the device is in the
16292
+ * mirror; re-renders when the device is removed (back to `null`) or
16293
+ * added.
16294
+ */
16295
+ function useDevice(deviceId) {
16296
+ const system = useSystem();
16297
+ const [device, setDevice] = useState(() => deviceId === null ? null : system.getDevice(deviceId));
16298
+ useEffect(() => {
16299
+ if (deviceId === null) {
16300
+ setDevice(null);
16301
+ return;
16302
+ }
16303
+ const refresh = () => {
16304
+ setDevice(system.getDevice(deviceId));
16305
+ };
16306
+ refresh();
16307
+ let unsubAdded = null;
16308
+ let unsubRemoved = null;
16309
+ try {
16310
+ unsubAdded = system.onDeviceAdded(refresh);
16311
+ unsubRemoved = system.onDeviceRemoved(refresh);
16312
+ } catch {}
16313
+ const unsubConn = system.subscribeConnectionEvents((state) => {
16314
+ if (state === "connected") refresh();
16315
+ });
16316
+ return () => {
16317
+ unsubAdded?.();
16318
+ unsubRemoved?.();
16319
+ unsubConn();
16320
+ };
16321
+ }, [system, deviceId]);
16322
+ return device;
16323
+ }
16324
+ //#endregion
16325
+ //#region src/hooks/use-device-snapshot.ts
16326
+ /**
16327
+ * useDeviceSnapshotImage — a device's snapshot as a plain image URL.
16328
+ *
16329
+ * ## What this used to do, and why it stopped
16330
+ *
16331
+ * It fetched `dev.snapshot.getSnapshot()` over tRPC and returned
16332
+ * `data:image/jpeg;base64,…`. That put a full camera capture — up to 4 K,
16333
+ * measured at 758 KB average per camera on the live hub — through the msgpack
16334
+ * WebSocket plane, base64-inflated by a third, and then held it in the
16335
+ * react-query heap for 24 h per device. The device list rendered it into a
16336
+ * **28 × 28 px `<img>`**.
16337
+ *
16338
+ * It also did not do what it appeared to do. `snapshot.getSnapshot` scoped to a
16339
+ * device routes to the NATIVE provider, not the snapshot wrapper, so it bypassed
16340
+ * the wrapper's cache, coalescing and stale-while-revalidate entirely: probed
16341
+ * live, a `force:true` call returned a fresh 1.05 MB JPEG in 0.55 s while the
16342
+ * wrapper's `lastCapturedAt` for that camera did not move. Two snapshot paths,
16343
+ * different behaviour, and only one of them maintained the cache the other one
16344
+ * reported on.
16345
+ *
16346
+ * ## What it does now
16347
+ *
16348
+ * Returns the same URL the viewer uses: `/addon/snapshot/media/<id>.jpg?w=<n>`,
16349
+ * served by the wrapper over the HTTP data plane. Relative and same-origin, so
16350
+ * the admin UI's `camstack_session` cookie authenticates it — the endpoint is
16351
+ * `access: 'authenticated'`, which accepts either a Bearer header or that
16352
+ * cookie, and a bare `<img>` can only send the cookie. This is the same
16353
+ * mechanism the native `<video>` fallback in `hls-video.tsx` already relies on.
16354
+ *
16355
+ * Caching is now the browser's, which is the point: `ETag` +
16356
+ * `Cache-Control: private, max-age=<device maxAgeS>` means a repeat render is a
16357
+ * cache hit and a revalidation is a 0-byte 304. No JS heap, no msgpack, no
16358
+ * base64. Nothing to configure — unlike `expo-image` on native, browsers
16359
+ * revalidate a stale URL rather than treating it as immutable, so the URL stays
16360
+ * stable and does NOT need a version parameter.
16361
+ */
16362
+ /** The hub-proxied path prefix for the snapshot image data plane, composed
16363
+ * below on `baseUrl` or, for the same-origin case, on the page's mount. */
16364
+ var SNAPSHOT_MEDIA_PATH = "/addon/snapshot/media";
16365
+ function useDeviceSnapshotImage(deviceId, options = {}) {
16366
+ const { width, baseUrl } = options;
16367
+ const [refreshNonce, setRefreshNonce] = useState(0);
16368
+ return {
16369
+ src: useMemo(() => {
16370
+ if (deviceId === null || deviceId <= 0) return null;
16371
+ const base = baseUrl !== void 0 ? baseUrl.replace(/\/+$/, "") : routerBasename();
16372
+ const params = new URLSearchParams();
16373
+ if (width !== void 0 && Number.isInteger(width) && width > 0) params.set("w", String(width));
16374
+ if (refreshNonce > 0) {
16375
+ params.set("force", "1");
16376
+ params.set("r", String(refreshNonce));
16377
+ }
16378
+ const query = params.toString();
16379
+ return `${base}${SNAPSHOT_MEDIA_PATH}/${String(deviceId)}.jpg${query.length > 0 ? `?${query}` : ""}`;
16380
+ }, [
16381
+ deviceId,
16382
+ width,
16383
+ baseUrl,
16384
+ refreshNonce
16385
+ ]),
16386
+ loading: false,
16387
+ refresh: useCallback(() => {
16388
+ setRefreshNonce((n) => n + 1);
16389
+ }, [])
16390
+ };
16391
+ }
16392
+ //#endregion
16393
+ //#region src/composites/cap-settings/camera-grid-layout.ts
16394
+ /** Smallest rectangle the editor will produce — ffmpeg refuses a zero-area crop. */
16395
+ var MIN_EXTENT = .02;
16396
+ function isRecord(value) {
16397
+ return value !== null && typeof value === "object" && !Array.isArray(value);
16398
+ }
16399
+ function readRect(value) {
16400
+ if (!isRecord(value)) return null;
16401
+ const { x, y, width, height } = value;
16402
+ if (typeof x !== "number" || typeof y !== "number" || typeof width !== "number" || typeof height !== "number") return null;
16403
+ if (x < 0 || y < 0 || width <= 0 || height <= 0) return null;
16404
+ if (x + width > 1 || y + height > 1) return null;
16405
+ return {
16406
+ x,
16407
+ y,
16408
+ width,
16409
+ height
16410
+ };
16411
+ }
16412
+ function readCell(value) {
16413
+ if (!isRecord(value)) return null;
16414
+ const deviceId = value["deviceId"];
16415
+ if (typeof deviceId !== "number" || !Number.isInteger(deviceId)) return null;
16416
+ const source = readRect(value["source"]);
16417
+ const cell = readRect(value["cell"]);
16418
+ if (source === null || cell === null) return null;
16419
+ return {
16420
+ deviceId,
16421
+ source,
16422
+ cell
16423
+ };
16424
+ }
16425
+ /** Parse the `getGridForDevice` reply. See {@link GridLayoutReadOutcome}. */
16426
+ function parseGridView(raw) {
16427
+ if (!isRecord(raw) || !("grid" in raw)) return "unreadable";
16428
+ const grid = raw["grid"];
16429
+ if (grid === null) return null;
16430
+ if (!isRecord(grid)) return "unreadable";
16431
+ const { instanceId, deviceId, name, width, height, fps, cells } = grid;
16432
+ if (typeof instanceId !== "string" || typeof deviceId !== "number" || typeof name !== "string" || typeof width !== "number" || typeof height !== "number" || typeof fps !== "number" || !Array.isArray(cells)) return "unreadable";
16433
+ const parsed = [];
16434
+ for (const entry of cells) {
16435
+ const cell = readCell(entry);
16436
+ if (cell === null) return "unreadable";
16437
+ parsed.push(cell);
16438
+ }
16439
+ return {
16440
+ instanceId,
16441
+ deviceId,
16442
+ name,
16443
+ width,
16444
+ height,
16445
+ fps,
16446
+ cells: parsed
16447
+ };
16448
+ }
16449
+ /**
16450
+ * Keep a rectangle inside the unit square.
16451
+ *
16452
+ * The addon THROWS on a rectangle that falls outside — a silently clipped
16453
+ * picture is worse than a refusal — so the editor must never hand it one.
16454
+ */
16455
+ function clampNormalizedRect(rect) {
16456
+ const width = Math.min(1, Math.max(MIN_EXTENT, rect.width));
16457
+ const height = Math.min(1, Math.max(MIN_EXTENT, rect.height));
16458
+ return {
16459
+ x: Math.min(1 - width, Math.max(0, rect.x)),
16460
+ y: Math.min(1 - height, Math.max(0, rect.y)),
16461
+ width,
16462
+ height
16463
+ };
16464
+ }
16465
+ /** Drag: translate by a normalized delta, clamped. */
16466
+ function moveNormalizedRect(rect, dx, dy) {
16467
+ return clampNormalizedRect({
16468
+ ...rect,
16469
+ x: rect.x + dx,
16470
+ y: rect.y + dy
16471
+ });
16472
+ }
16473
+ /** Resize from the bottom-right corner: the origin stays put. */
16474
+ function resizeNormalizedRect(rect, dw, dh) {
16475
+ return clampNormalizedRect({
16476
+ ...rect,
16477
+ width: rect.width + dw,
16478
+ height: rect.height + dh
16479
+ });
16480
+ }
16481
+ //#endregion
16482
+ //#region src/composites/cap-settings/CameraGridLayoutEditor.tsx
16483
+ /**
16484
+ * The camera-grid layout editor.
16485
+ *
16486
+ * A grid's geometry is the one thing a DERIVED settings form cannot express: a
16487
+ * generated form renders "cell 1 source = 592, cell 1 crop x = 0.25, cell 1 crop
16488
+ * width = 0.5…" and nobody can hold a picture in their head from that. So the
16489
+ * geometry gets a widget — the canvas, drawn at the grid's own aspect ratio,
16490
+ * with the cells on it — while the knobs that ARE ordinary fields (the name,
16491
+ * the canvas size, the frame rate) sit beside it in the same panel.
16492
+ *
16493
+ * Every rectangle in here is NORMALIZED [0,1], on both sides: the crop taken
16494
+ * out of a source, and the cell it lands in. That is how the addon stores them
16495
+ * (a source camera can change resolution, and a stored pixel rectangle would
16496
+ * quietly start cutting the wrong region), so the editor speaks the same
16497
+ * language rather than converting at the boundary.
16498
+ *
16499
+ * The preview is the source cameras' own snapshots, positioned by CSS from the
16500
+ * SAME normalized numbers that will become the ffmpeg `crop`/`overlay`. It costs
16501
+ * the server nothing and it is wrong in exactly the ways the real composition
16502
+ * would be wrong.
16503
+ */
16504
+ var ADDON_ID = "camera-grid";
16505
+ var FULL_FRAME = {
16506
+ x: 0,
16507
+ y: 0,
16508
+ width: 1,
16509
+ height: 1
16510
+ };
16511
+ var MAX_CELLS = 16;
16512
+ /** Hoisted so `useDevices` does not re-subscribe on every render. */
16513
+ var CAMERA_FILTER = { type: DeviceType.Camera };
16514
+ function CameraGridLayoutEditor({ deviceId }) {
16515
+ const system = useSystem();
16516
+ const cameras = useMemo(() => system.listDeviceInfos(CAMERA_FILTER), [system, useDevices(CAMERA_FILTER)]);
16517
+ const [loaded, setLoaded] = useState(void 0);
16518
+ const [draft, setDraft] = useState(null);
16519
+ const [saving, setSaving] = useState(false);
16520
+ const [saveError, setSaveError] = useState(null);
16521
+ const [selected, setSelected] = useState(0);
16522
+ const [drag, setDrag] = useState(null);
16523
+ const reload = useCallback(async () => {
16524
+ const outcome = parseGridView(await system.trpcClient.addons.custom.mutate({
16525
+ addonId: ADDON_ID,
16526
+ action: "getGridForDevice",
16527
+ input: { deviceId }
16528
+ }));
16529
+ setLoaded(outcome);
16530
+ setDraft(outcome === null || outcome === "unreadable" ? null : outcome);
16531
+ }, [system, deviceId]);
16532
+ useEffect(() => {
16533
+ reload().catch(() => {
16534
+ setLoaded("unreadable");
16535
+ });
16536
+ }, [reload]);
16537
+ const save = useCallback(async () => {
16538
+ if (draft === null) return;
16539
+ setSaving(true);
16540
+ setSaveError(null);
16541
+ try {
16542
+ const outcome = parseGridView(await system.trpcClient.addons.custom.mutate({
16543
+ addonId: ADDON_ID,
16544
+ action: "saveGridLayout",
16545
+ input: {
16546
+ deviceId,
16547
+ name: draft.name,
16548
+ width: draft.width,
16549
+ height: draft.height,
16550
+ fps: draft.fps,
16551
+ cells: draft.cells.map((cell) => ({ ...cell }))
16552
+ }
16553
+ }));
16554
+ if (outcome !== null && outcome !== "unreadable") {
16555
+ setLoaded(outcome);
16556
+ setDraft(outcome);
16557
+ }
16558
+ } catch (error) {
16559
+ setSaveError(error instanceof Error ? error.message : String(error));
16560
+ } finally {
16561
+ setSaving(false);
16562
+ }
16563
+ }, [
16564
+ system,
16565
+ deviceId,
16566
+ draft
16567
+ ]);
16568
+ const patchCell = useCallback((index, patch) => {
16569
+ setDraft((prev) => prev === null ? prev : {
16570
+ ...prev,
16571
+ cells: prev.cells.map((cell, i) => i === index ? {
16572
+ ...cell,
16573
+ ...patch
16574
+ } : cell)
16575
+ });
16576
+ }, []);
16577
+ const canvasAspect = useMemo(() => draft === null ? 16 / 9 : draft.width / draft.height, [draft]);
16578
+ if (loaded === void 0) return /* @__PURE__ */ jsx(WidgetPanel, {
16579
+ title: "Grid layout",
16580
+ icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
16581
+ children: /* @__PURE__ */ jsxs("div", {
16582
+ className: "flex items-center gap-2 text-[10.5px] text-foreground-subtle",
16583
+ children: [/* @__PURE__ */ jsx(LoaderCircle, { className: "h-3 w-3 animate-spin" }), " Loading the layout…"]
16584
+ })
16585
+ });
16586
+ if (loaded === "unreadable") return /* @__PURE__ */ jsx(WidgetPanel, {
16587
+ title: "Grid layout",
16588
+ icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
16589
+ children: /* @__PURE__ */ jsxs("div", {
16590
+ className: "flex items-center gap-2 text-[10.5px] text-danger",
16591
+ children: [/* @__PURE__ */ jsx(CircleAlert, { className: "h-3 w-3" }), "The Camera Grids addon did not answer, so this layout is unknown — not empty."]
16592
+ })
16593
+ });
16594
+ if (loaded === null || draft === null) return /* @__PURE__ */ jsx(WidgetPanel, {
16595
+ title: "Grid layout",
16596
+ icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
16597
+ children: /* @__PURE__ */ jsx("div", {
16598
+ className: "text-[10.5px] text-foreground-subtle",
16599
+ children: "This camera is not a grid."
16600
+ })
16601
+ });
16602
+ const onPointerMove = (event) => {
16603
+ if (drag === null) return;
16604
+ const bounds = event.currentTarget.getBoundingClientRect();
16605
+ if (bounds.width === 0 || bounds.height === 0) return;
16606
+ const dx = (event.clientX - drag.startX) / bounds.width;
16607
+ const dy = (event.clientY - drag.startY) / bounds.height;
16608
+ patchCell(drag.index, { cell: drag.mode === "move" ? moveNormalizedRect(drag.origin, dx, dy) : resizeNormalizedRect(drag.origin, dx, dy) });
16609
+ };
16610
+ return /* @__PURE__ */ jsx(WidgetPanel, {
16611
+ title: "Grid layout",
16612
+ icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
16613
+ headerRight: /* @__PURE__ */ jsxs("button", {
16614
+ type: "button",
16615
+ disabled: saving,
16616
+ onClick: () => void save(),
16617
+ className: "flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] uppercase",
16618
+ children: [saving ? /* @__PURE__ */ jsx(LoaderCircle, { className: "h-3 w-3 animate-spin" }) : /* @__PURE__ */ jsx(Save, { className: "h-3 w-3" }), "Save"]
16619
+ }),
16620
+ children: /* @__PURE__ */ jsxs("div", {
16621
+ className: "flex flex-col gap-3",
16622
+ children: [
16623
+ saveError !== null && /* @__PURE__ */ jsxs("div", {
16624
+ className: "flex items-center gap-2 text-[10.5px] text-danger",
16625
+ children: [
16626
+ /* @__PURE__ */ jsx(CircleAlert, { className: "h-3 w-3" }),
16627
+ " ",
16628
+ saveError
16629
+ ]
16630
+ }),
16631
+ /* @__PURE__ */ jsxs("div", {
16632
+ className: "relative w-full select-none overflow-hidden rounded border border-border bg-black",
16633
+ style: { aspectRatio: String(canvasAspect) },
16634
+ onPointerMove,
16635
+ onPointerUp: () => {
16636
+ setDrag(null);
16637
+ },
16638
+ onPointerLeave: () => {
16639
+ setDrag(null);
16640
+ },
16641
+ children: [draft.cells.map((cell, index) => /* @__PURE__ */ jsx(GridCellBox, {
16642
+ cell,
16643
+ selected: index === selected,
16644
+ onSelect: () => {
16645
+ setSelected(index);
16646
+ },
16647
+ onDragStart: (mode, event) => {
16648
+ setSelected(index);
16649
+ setDrag({
16650
+ index,
16651
+ mode,
16652
+ startX: event.clientX,
16653
+ startY: event.clientY,
16654
+ origin: cell.cell
16655
+ });
16656
+ }
16657
+ }, `${String(cell.deviceId)}-${String(index)}`)), draft.cells.length === 0 && /* @__PURE__ */ jsx("div", {
16658
+ className: "absolute inset-0 flex items-center justify-center text-[10.5px] text-foreground-subtle",
16659
+ children: "No cells yet — add one below."
16660
+ })]
16661
+ }),
16662
+ /* @__PURE__ */ jsxs("div", {
16663
+ className: "grid grid-cols-4 gap-2 text-[10.5px]",
16664
+ children: [
16665
+ /* @__PURE__ */ jsx(LabelledNumber, {
16666
+ label: "Width",
16667
+ value: draft.width,
16668
+ onChange: (width) => {
16669
+ setDraft({
16670
+ ...draft,
16671
+ width
16672
+ });
16673
+ }
16674
+ }),
16675
+ /* @__PURE__ */ jsx(LabelledNumber, {
16676
+ label: "Height",
16677
+ value: draft.height,
16678
+ onChange: (height) => {
16679
+ setDraft({
16680
+ ...draft,
16681
+ height
16682
+ });
16683
+ }
16684
+ }),
16685
+ /* @__PURE__ */ jsx(LabelledNumber, {
16686
+ label: "FPS",
16687
+ value: draft.fps,
16688
+ onChange: (fps) => {
16689
+ setDraft({
16690
+ ...draft,
16691
+ fps
16692
+ });
16693
+ }
16694
+ }),
16695
+ /* @__PURE__ */ jsxs("button", {
16696
+ type: "button",
16697
+ disabled: draft.cells.length >= MAX_CELLS,
16698
+ onClick: () => {
16699
+ const first = cameras.find((camera) => camera.id !== deviceId);
16700
+ if (!first) return;
16701
+ setDraft({
16702
+ ...draft,
16703
+ cells: [...draft.cells, {
16704
+ deviceId: first.id,
16705
+ source: FULL_FRAME,
16706
+ cell: clampNormalizedRect({
16707
+ x: .1,
16708
+ y: .1,
16709
+ width: .4,
16710
+ height: .4
16711
+ })
16712
+ }]
16713
+ });
16714
+ setSelected(draft.cells.length);
16715
+ },
16716
+ className: "flex items-center justify-center gap-1 self-end rounded border border-border px-2 py-1 uppercase",
16717
+ children: [/* @__PURE__ */ jsx(Plus, { className: "h-3 w-3" }), " Cell"]
16718
+ })
16719
+ ]
16720
+ }),
16721
+ draft.cells[selected] !== void 0 && /* @__PURE__ */ jsx(CellInspector, {
16722
+ cell: draft.cells[selected],
16723
+ index: selected,
16724
+ cameras: cameras.filter((camera) => camera.id !== deviceId),
16725
+ onChange: (patch) => {
16726
+ patchCell(selected, patch);
16727
+ },
16728
+ onRemove: () => {
16729
+ setDraft({
16730
+ ...draft,
16731
+ cells: draft.cells.filter((_, i) => i !== selected)
16732
+ });
16733
+ setSelected(0);
16734
+ }
16735
+ })
16736
+ ]
16737
+ })
16738
+ });
16739
+ }
16740
+ function GridCellBox({ cell, selected, onSelect, onDragStart }) {
16741
+ const { src } = useDeviceSnapshotImage(cell.deviceId, { width: 640 });
16742
+ const backgroundSize = `${String(100 / cell.source.width)}% ${String(100 / cell.source.height)}%`;
16743
+ const backgroundPosition = cell.source.width >= 1 && cell.source.height >= 1 ? "center" : `${String(cell.source.x / Math.max(1e-6, 1 - cell.source.width) * 100)}% ${String(cell.source.y / Math.max(1e-6, 1 - cell.source.height) * 100)}%`;
16744
+ return /* @__PURE__ */ jsx("div", {
16745
+ role: "presentation",
16746
+ onPointerDown: (event) => {
16747
+ onSelect();
16748
+ onDragStart("move", event);
16749
+ },
16750
+ className: `absolute cursor-move border ${selected ? "border-accent" : "border-border/60"}`,
16751
+ style: {
16752
+ left: `${String(cell.cell.x * 100)}%`,
16753
+ top: `${String(cell.cell.y * 100)}%`,
16754
+ width: `${String(cell.cell.width * 100)}%`,
16755
+ height: `${String(cell.cell.height * 100)}%`,
16756
+ backgroundImage: src === null ? void 0 : `url(${src})`,
16757
+ backgroundSize,
16758
+ backgroundPosition,
16759
+ backgroundRepeat: "no-repeat"
16760
+ },
16761
+ children: /* @__PURE__ */ jsx("div", {
16762
+ role: "presentation",
16763
+ onPointerDown: (event) => {
16764
+ event.stopPropagation();
16765
+ onDragStart("resize", event);
16766
+ },
16767
+ className: "absolute -bottom-1 -right-1 h-2.5 w-2.5 cursor-se-resize bg-accent"
16768
+ })
16769
+ });
16770
+ }
16771
+ function CellInspector({ cell, index, cameras, onChange, onRemove }) {
16772
+ return /* @__PURE__ */ jsxs("div", {
16773
+ className: "flex flex-col gap-2 rounded border border-border p-2 text-[10.5px]",
16774
+ children: [
16775
+ /* @__PURE__ */ jsxs("div", {
16776
+ className: "flex items-center justify-between",
16777
+ children: [/* @__PURE__ */ jsxs("span", {
16778
+ className: "uppercase text-foreground-subtle",
16779
+ children: ["Cell ", index + 1]
16780
+ }), /* @__PURE__ */ jsx("button", {
16781
+ type: "button",
16782
+ onClick: onRemove,
16783
+ className: "text-danger",
16784
+ children: /* @__PURE__ */ jsx(Trash2, { className: "h-3 w-3" })
16785
+ })]
16786
+ }),
16787
+ /* @__PURE__ */ jsxs("label", {
16788
+ className: "flex items-center gap-2",
16789
+ children: [/* @__PURE__ */ jsx("span", {
16790
+ className: "w-16 text-foreground-subtle",
16791
+ children: "Source"
16792
+ }), /* @__PURE__ */ jsx("select", {
16793
+ value: String(cell.deviceId),
16794
+ onChange: (event) => {
16795
+ onChange({ deviceId: Number(event.target.value) });
16796
+ },
16797
+ className: "flex-1 rounded border border-border bg-transparent px-1 py-0.5",
16798
+ children: cameras.map((camera) => /* @__PURE__ */ jsx("option", {
16799
+ value: String(camera.id),
16800
+ children: camera.name
16801
+ }, camera.id))
16802
+ })]
16803
+ }),
16804
+ /* @__PURE__ */ jsx("div", {
16805
+ className: "grid grid-cols-4 gap-2",
16806
+ children: [
16807
+ "x",
16808
+ "y",
16809
+ "width",
16810
+ "height"
16811
+ ].map((key) => /* @__PURE__ */ jsx(LabelledNumber, {
16812
+ label: `Crop ${key}`,
16813
+ value: Math.round(cell.source[key] * 100) / 100,
16814
+ step: .01,
16815
+ onChange: (next) => {
16816
+ onChange({ source: clampNormalizedRect({
16817
+ ...cell.source,
16818
+ [key]: next
16819
+ }) });
16820
+ }
16821
+ }, key))
16822
+ })
16823
+ ]
16824
+ });
16825
+ }
16826
+ function LabelledNumber({ label, value, step = 1, onChange }) {
16827
+ return /* @__PURE__ */ jsxs("label", {
16828
+ className: "flex flex-col gap-0.5",
16829
+ children: [/* @__PURE__ */ jsx("span", {
16830
+ className: "text-foreground-subtle",
16831
+ children: label
16832
+ }), /* @__PURE__ */ jsx("input", {
16833
+ type: "number",
16834
+ step,
16835
+ value,
16836
+ onChange: (event) => {
16837
+ const next = Number(event.target.value);
16838
+ if (Number.isFinite(next)) onChange(next);
16839
+ },
16840
+ className: "rounded border border-border bg-transparent px-1 py-0.5"
16841
+ })]
16842
+ });
16843
+ }
16844
+ //#endregion
16210
16845
  //#region src/hooks/use-device-proxy.ts
16211
16846
  /**
16212
16847
  * useDeviceProxy — canonical React entry point for a device.
@@ -16979,6 +17614,7 @@ function usePTZ(trpc, deviceId, hookOptions) {
16979
17614
  const ptz = useDeviceProxy(trpc, enabled ? deviceId : null)?.ptz;
16980
17615
  const [presets, setPresets] = useState([]);
16981
17616
  const [homePreset, setHomePresetState] = useState(null);
17617
+ const [homeReturnSeconds, setHomeReturnState] = useState(null);
16982
17618
  const [options, setOptions] = useState(null);
16983
17619
  const [busy, setBusy] = useState(false);
16984
17620
  const [error, setError] = useState(null);
@@ -17000,6 +17636,15 @@ function usePTZ(trpc, deviceId, hookOptions) {
17000
17636
  setError(err instanceof Error ? err.message : String(err));
17001
17637
  }
17002
17638
  }, [ptz, enabled]);
17639
+ const refreshHomeReturn = useCallback(async () => {
17640
+ if (!enabled || !ptz) return;
17641
+ try {
17642
+ setHomeReturnState(await ptz.getHomeReturnSeconds({}));
17643
+ } catch (err) {
17644
+ if (isAbsentProvider(err)) return;
17645
+ setHomeReturnState(null);
17646
+ }
17647
+ }, [ptz, enabled]);
17003
17648
  const refreshOptions = useCallback(async () => {
17004
17649
  if (!enabled || !ptz) return;
17005
17650
  try {
@@ -17013,10 +17658,12 @@ function usePTZ(trpc, deviceId, hookOptions) {
17013
17658
  refreshPresets();
17014
17659
  refreshOptions();
17015
17660
  refreshHomePreset();
17661
+ refreshHomeReturn();
17016
17662
  }, [
17017
17663
  refreshPresets,
17018
17664
  refreshOptions,
17019
- refreshHomePreset
17665
+ refreshHomePreset,
17666
+ refreshHomeReturn
17020
17667
  ]);
17021
17668
  const wrap = useCallback(async (fn) => {
17022
17669
  if (!enabled || !ptz) return void 0;
@@ -17101,6 +17748,25 @@ function usePTZ(trpc, deviceId, hookOptions) {
17101
17748
  wrap,
17102
17749
  refreshHomePreset
17103
17750
  ]),
17751
+ captureHomeHere: useCallback(async () => {
17752
+ if (!ptz) return;
17753
+ await wrap(() => ptz.captureHomeHere({}));
17754
+ await refreshHomePreset();
17755
+ }, [
17756
+ ptz,
17757
+ wrap,
17758
+ refreshHomePreset
17759
+ ]),
17760
+ homeReturnSeconds,
17761
+ setHomeReturnSeconds: useCallback(async (seconds) => {
17762
+ if (!ptz) return;
17763
+ await wrap(() => ptz.setHomeReturnSeconds({ seconds }));
17764
+ await refreshHomeReturn();
17765
+ }, [
17766
+ ptz,
17767
+ wrap,
17768
+ refreshHomeReturn
17769
+ ]),
17104
17770
  goToPreset: useCallback(async (presetId) => {
17105
17771
  if (!ptz) return;
17106
17772
  await wrap(() => ptz.goToPreset({ presetId }));
@@ -17162,58 +17828,102 @@ function usePTZ(trpc, deviceId, hookOptions) {
17162
17828
  //#endregion
17163
17829
  //#region src/composites/cap-settings/HomePresetPicker.tsx
17164
17830
  /**
17165
- * Which preset `ptz.goHome` targets on this camera.
17831
+ * Where "Home" sends this camera, and how it is set.
17166
17832
  *
17167
- * This exists because the vendor "convention" was wrong on every camera of
17168
- * this fleet. Three providers each hardcoded a slot — reolink 0, hikvision
17169
- * '1', amcrest 1 — and measured on 2026-09-17 those slots held "stanza",
17170
- * "Credenza" and "Preset1": the operator's own presets, not a home. Two of the
17171
- * three swallowed the failure, so a head that never moved looked exactly like a
17172
- * head that went home.
17833
+ * ## Why this exists at all
17173
17834
  *
17174
- * Four things can be true, and the picker renders each differently:
17835
+ * The vendor "convention" was wrong on every camera of this fleet. Three
17836
+ * providers each hardcoded a slot — reolink 0, hikvision '1', amcrest 1 — and
17837
+ * measured on 2026-09-17 those slots held "stanza", "Credenza" and "Preset1":
17838
+ * the operator's own presets, not a home. Two of the three swallowed the
17839
+ * failure, so a head that never moved looked exactly like one that went home.
17175
17840
  *
17176
- * `native` — the camera homes WITHOUT a preset (ONVIF moves to the PTZ
17177
- * origin). Nothing to pick, so no control is shown.
17178
- * `firmware` — the camera named a preset `fn: 'home'` itself (Hikvision's
17179
- * "Back to origin"). Preselected, and the operator may override.
17841
+ * ## The mistake this component made first
17842
+ *
17843
+ * Its first version rendered NOTHING for `source: 'native'`, with a comment
17844
+ * saying "the camera homes natively; there is no preset to choose". That is
17845
+ * true for ONVIF, whose home is the fixed PTZ origin. It was written hours
17846
+ * before we learned that Reolink's native home is a GUARD POINT — a stored
17847
+ * position, settable, with its own idle-return timer — so the control was
17848
+ * hidden from the one vendor that most needed it. A comment that is right about
17849
+ * one case and read as covering all of them is exactly the leftover that reads
17850
+ * as verification.
17851
+ *
17852
+ * ## What each state offers now
17853
+ *
17854
+ * `native` — no preset to pick, but "Set home here" and, where the camera
17855
+ * has one, the idle-return delay.
17856
+ * `firmware` — the camera named its own home (Hikvision's "Back to origin").
17857
+ * Preselected; the operator may override.
17180
17858
  * `operator` — pinned here.
17181
- * `none` — `goHome` REFUSES. Said out loud, because a disabled feature
17182
- * must never look like a broken one.
17859
+ * `none` — Home REFUSES, and the UI says so. A disabled feature must
17860
+ * never look like a broken one (D62).
17183
17861
  */
17862
+ var SELECT_CLASS$2 = "rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-foreground focus:border-primary focus:outline-none disabled:opacity-50";
17184
17863
  function HomePresetPicker({ controls }) {
17185
- const { homePreset, presets, setHomePreset, busy } = controls;
17864
+ const { homePreset, presets, setHomePreset, captureHomeHere, homeReturnSeconds, setHomeReturnSeconds, busy } = controls;
17186
17865
  const [saving, setSaving] = useState(false);
17187
17866
  if (homePreset === null) return null;
17188
- if (homePreset.source === "native") return null;
17189
- const value = homePreset.presetId ?? "";
17190
- return /* @__PURE__ */ jsxs("label", {
17191
- className: "flex flex-col gap-1 px-2 pt-2",
17867
+ const disabled = busy || saving;
17868
+ const run = (action) => {
17869
+ setSaving(true);
17870
+ action().finally(() => setSaving(false));
17871
+ };
17872
+ const explanation = homePreset.source === "native" ? "This camera stores its own home position. “Set home here” pins it to where the camera is pointing now." : homePreset.source === "firmware" ? "Taken from the camera, which names this preset as its home." : homePreset.source === "none" ? "Nothing is set, so Home refuses rather than moving to an arbitrary preset." : "Pinned here. Clear it to fall back to the camera’s own home.";
17873
+ return /* @__PURE__ */ jsxs("div", {
17874
+ className: "flex flex-col gap-2 px-2 pt-2",
17192
17875
  children: [
17193
- /* @__PURE__ */ jsx("span", {
17194
- className: "text-[10px] font-medium text-foreground-subtle",
17195
- children: "Home preset"
17876
+ homePreset.source !== "native" && /* @__PURE__ */ jsxs("label", {
17877
+ className: "flex flex-col gap-1",
17878
+ children: [/* @__PURE__ */ jsx("span", {
17879
+ className: "text-[10px] font-medium text-foreground-subtle",
17880
+ children: "Home preset"
17881
+ }), /* @__PURE__ */ jsxs("select", {
17882
+ value: homePreset.presetId ?? "",
17883
+ disabled,
17884
+ onChange: (e) => {
17885
+ const next = e.target.value === "" ? null : e.target.value;
17886
+ run(() => setHomePreset(next));
17887
+ },
17888
+ className: SELECT_CLASS$2,
17889
+ children: [/* @__PURE__ */ jsx("option", {
17890
+ value: "",
17891
+ children: "Not set — Home is refused"
17892
+ }), presets.map((preset) => /* @__PURE__ */ jsxs("option", {
17893
+ value: preset.id,
17894
+ children: [preset.name || preset.id, preset.fn === "home" ? " (camera’s own home)" : ""]
17895
+ }, preset.id))]
17896
+ })]
17196
17897
  }),
17197
- /* @__PURE__ */ jsxs("select", {
17198
- value,
17199
- disabled: busy || saving,
17200
- onChange: (e) => {
17201
- const next = e.target.value === "" ? null : e.target.value;
17202
- setSaving(true);
17203
- setHomePreset(next).finally(() => setSaving(false));
17204
- },
17205
- className: "rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-foreground focus:border-primary focus:outline-none disabled:opacity-50",
17206
- children: [/* @__PURE__ */ jsx("option", {
17207
- value: "",
17208
- children: "Not set — Home is refused"
17209
- }), presets.map((preset) => /* @__PURE__ */ jsxs("option", {
17210
- value: preset.id,
17211
- children: [preset.name || preset.id, preset.fn === "home" ? " (camera’s own home)" : ""]
17212
- }, preset.id))]
17898
+ /* @__PURE__ */ jsx("button", {
17899
+ type: "button",
17900
+ disabled,
17901
+ onClick: () => run(() => captureHomeHere()),
17902
+ className: "self-start rounded-md border border-border px-2 py-1 text-[11px] text-foreground hover:bg-primary/10 disabled:opacity-50",
17903
+ children: "Set home here"
17904
+ }),
17905
+ homeReturnSeconds !== null && /* @__PURE__ */ jsxs("label", {
17906
+ className: "flex flex-col gap-1",
17907
+ children: [/* @__PURE__ */ jsx("span", {
17908
+ className: "text-[10px] font-medium text-foreground-subtle",
17909
+ children: "Return home after (s)"
17910
+ }), /* @__PURE__ */ jsx("input", {
17911
+ type: "number",
17912
+ min: 0,
17913
+ max: 3600,
17914
+ defaultValue: homeReturnSeconds,
17915
+ disabled,
17916
+ onBlur: (e) => {
17917
+ const next = Number(e.target.value);
17918
+ if (!Number.isFinite(next) || next === homeReturnSeconds) return;
17919
+ run(() => setHomeReturnSeconds(Math.round(next)));
17920
+ },
17921
+ className: SELECT_CLASS$2
17922
+ })]
17213
17923
  }),
17214
17924
  /* @__PURE__ */ jsx("span", {
17215
17925
  className: "text-[10px] text-foreground-subtle",
17216
- children: homePreset.source === "firmware" ? "Taken from the camera, which names this preset as its home." : homePreset.source === "none" ? "Nothing is set, so Home refuses rather than moving to an arbitrary preset." : "Pinned here. Clear it to fall back to the camera’s own home."
17926
+ children: explanation
17217
17927
  })
17218
17928
  ]
17219
17929
  });
@@ -19782,13 +20492,14 @@ function RecordingPanel({ deviceId }) {
19782
20492
  * `type:'widget'` ConfigField. `WidgetSlot` resolves these BEFORE the
19783
20493
  * Module-Federation `WidgetRegistry`. ids are namespaced `host/<name>`. */
19784
20494
  var HOST_WIDGETS = {
19785
- "host/motion-zones-grid": lazy(() => import("./MotionZonesSettings-DNdnFHso.js").then((m) => ({ default: m.MotionZonesSettings }))),
19786
- "host/privacy-mask-grid": lazy(() => import("./PrivacyMaskSettings-CooCVUmA.js").then((m) => ({ default: m.PrivacyMaskSettings }))),
20495
+ "host/motion-zones-grid": lazy(() => import("./MotionZonesSettings-7c3yiT5E.js").then((m) => ({ default: m.MotionZonesSettings }))),
20496
+ "host/privacy-mask-grid": lazy(() => import("./PrivacyMaskSettings-PkYs077O.js").then((m) => ({ default: m.PrivacyMaskSettings }))),
19787
20497
  "host/ptz-panel": PtzPanel,
19788
20498
  "host/navigation-panel": NavigationPanel,
19789
20499
  "host/consumables-panel": ConsumablesPanel,
19790
20500
  "host/ptz-autotrack": AutotrackSection,
19791
- "host/recording-panel": RecordingPanel
20501
+ "host/recording-panel": RecordingPanel,
20502
+ "host/camera-grid-layout": CameraGridLayoutEditor
19792
20503
  };
19793
20504
  //#endregion
19794
20505
  //#region src/composites/widget-slot.tsx
@@ -43238,74 +43949,6 @@ function useDeviceNetworkLink(trpc, deviceId) {
43238
43949
  return useDeviceState(trpc, deviceId, (s) => s.networkLink) ?? null;
43239
43950
  }
43240
43951
  //#endregion
43241
- //#region src/hooks/use-device-snapshot.ts
43242
- /**
43243
- * useDeviceSnapshotImage — a device's snapshot as a plain image URL.
43244
- *
43245
- * ## What this used to do, and why it stopped
43246
- *
43247
- * It fetched `dev.snapshot.getSnapshot()` over tRPC and returned
43248
- * `data:image/jpeg;base64,…`. That put a full camera capture — up to 4 K,
43249
- * measured at 758 KB average per camera on the live hub — through the msgpack
43250
- * WebSocket plane, base64-inflated by a third, and then held it in the
43251
- * react-query heap for 24 h per device. The device list rendered it into a
43252
- * **28 × 28 px `<img>`**.
43253
- *
43254
- * It also did not do what it appeared to do. `snapshot.getSnapshot` scoped to a
43255
- * device routes to the NATIVE provider, not the snapshot wrapper, so it bypassed
43256
- * the wrapper's cache, coalescing and stale-while-revalidate entirely: probed
43257
- * live, a `force:true` call returned a fresh 1.05 MB JPEG in 0.55 s while the
43258
- * wrapper's `lastCapturedAt` for that camera did not move. Two snapshot paths,
43259
- * different behaviour, and only one of them maintained the cache the other one
43260
- * reported on.
43261
- *
43262
- * ## What it does now
43263
- *
43264
- * Returns the same URL the viewer uses: `/addon/snapshot/media/<id>.jpg?w=<n>`,
43265
- * served by the wrapper over the HTTP data plane. Relative and same-origin, so
43266
- * the admin UI's `camstack_session` cookie authenticates it — the endpoint is
43267
- * `access: 'authenticated'`, which accepts either a Bearer header or that
43268
- * cookie, and a bare `<img>` can only send the cookie. This is the same
43269
- * mechanism the native `<video>` fallback in `hls-video.tsx` already relies on.
43270
- *
43271
- * Caching is now the browser's, which is the point: `ETag` +
43272
- * `Cache-Control: private, max-age=<device maxAgeS>` means a repeat render is a
43273
- * cache hit and a revalidation is a 0-byte 304. No JS heap, no msgpack, no
43274
- * base64. Nothing to configure — unlike `expo-image` on native, browsers
43275
- * revalidate a stale URL rather than treating it as immutable, so the URL stays
43276
- * stable and does NOT need a version parameter.
43277
- */
43278
- /** The hub-proxied path prefix for the snapshot image data plane, composed
43279
- * below on `baseUrl` or, for the same-origin case, on the page's mount. */
43280
- var SNAPSHOT_MEDIA_PATH = "/addon/snapshot/media";
43281
- function useDeviceSnapshotImage(deviceId, options = {}) {
43282
- const { width, baseUrl } = options;
43283
- const [refreshNonce, setRefreshNonce] = useState(0);
43284
- return {
43285
- src: useMemo(() => {
43286
- if (deviceId === null || deviceId <= 0) return null;
43287
- const base = baseUrl !== void 0 ? baseUrl.replace(/\/+$/, "") : routerBasename();
43288
- const params = new URLSearchParams();
43289
- if (width !== void 0 && Number.isInteger(width) && width > 0) params.set("w", String(width));
43290
- if (refreshNonce > 0) {
43291
- params.set("force", "1");
43292
- params.set("r", String(refreshNonce));
43293
- }
43294
- const query = params.toString();
43295
- return `${base}${SNAPSHOT_MEDIA_PATH}/${String(deviceId)}.jpg${query.length > 0 ? `?${query}` : ""}`;
43296
- }, [
43297
- deviceId,
43298
- width,
43299
- baseUrl,
43300
- refreshNonce
43301
- ]),
43302
- loading: false,
43303
- refresh: useCallback(() => {
43304
- setRefreshNonce((n) => n + 1);
43305
- }, [])
43306
- };
43307
- }
43308
- //#endregion
43309
43952
  //#region src/composites/hover-zoom-image.tsx
43310
43953
  /**
43311
43954
  * <HoverZoomImage> — a small thumbnail that expands into a floating
@@ -50442,91 +51085,6 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
50442
51085
  };
50443
51086
  }
50444
51087
  //#endregion
50445
- //#region src/hooks/use-devices.ts
50446
- /**
50447
- * useDevices / useDevice — reactive sync-mirror reads.
50448
- *
50449
- * Both hooks hand out `DeviceProxy` references straight out of the
50450
- * `System` mirror. The mirror keeps device + binding caches warm via
50451
- * the `device.registered/unregistered/bindings-changed` event stream,
50452
- * so re-renders are driven by lifecycle pushes — no React Query
50453
- * round-trip and no `refetch` plumbing needed at the caller side.
50454
- *
50455
- * The hooks defensively read once on mount and assume the System has
50456
- * been `init()`ed by the host app — calls before the warm-boot
50457
- * completes simply return an empty array / null and re-render once
50458
- * the registered listeners fire.
50459
- */
50460
- /**
50461
- * Reactive list of devices matching the optional filter set. Returns a
50462
- * stable array reference between updates so consumers passing it as a
50463
- * prop don't tear down memoized children.
50464
- */
50465
- function useDevices(filters) {
50466
- const system = useSystem();
50467
- const filtersKey = useMemo(() => filters ? JSON.stringify(filters) : "", [filters]);
50468
- const [devices, setDevices] = useState(() => system.listDevices(filters));
50469
- useEffect(() => {
50470
- const refresh = () => {
50471
- setDevices(system.listDevices(filters));
50472
- };
50473
- refresh();
50474
- let unsubAdded = null;
50475
- let unsubRemoved = null;
50476
- try {
50477
- unsubAdded = system.onDeviceAdded(refresh);
50478
- unsubRemoved = system.onDeviceRemoved(refresh);
50479
- } catch {}
50480
- const unsubConn = system.subscribeConnectionEvents((state) => {
50481
- if (state === "connected") refresh();
50482
- });
50483
- return () => {
50484
- unsubAdded?.();
50485
- unsubRemoved?.();
50486
- unsubConn();
50487
- };
50488
- }, [
50489
- system,
50490
- filters,
50491
- filtersKey
50492
- ]);
50493
- return devices;
50494
- }
50495
- /**
50496
- * Single-device variant. Returns `null` until the device is in the
50497
- * mirror; re-renders when the device is removed (back to `null`) or
50498
- * added.
50499
- */
50500
- function useDevice(deviceId) {
50501
- const system = useSystem();
50502
- const [device, setDevice] = useState(() => deviceId === null ? null : system.getDevice(deviceId));
50503
- useEffect(() => {
50504
- if (deviceId === null) {
50505
- setDevice(null);
50506
- return;
50507
- }
50508
- const refresh = () => {
50509
- setDevice(system.getDevice(deviceId));
50510
- };
50511
- refresh();
50512
- let unsubAdded = null;
50513
- let unsubRemoved = null;
50514
- try {
50515
- unsubAdded = system.onDeviceAdded(refresh);
50516
- unsubRemoved = system.onDeviceRemoved(refresh);
50517
- } catch {}
50518
- const unsubConn = system.subscribeConnectionEvents((state) => {
50519
- if (state === "connected") refresh();
50520
- });
50521
- return () => {
50522
- unsubAdded?.();
50523
- unsubRemoved?.();
50524
- unsubConn();
50525
- };
50526
- }, [system, deviceId]);
50527
- return device;
50528
- }
50529
- //#endregion
50530
51088
  //#region src/hooks/use-doorbell-events.ts
50531
51089
  /**
50532
51090
  * useDoorbellEvents — subscribe to doorbell.onPressed across the cluster.
@@ -50791,12 +51349,12 @@ function mirror(input) {
50791
51349
  * Render inside `<Suspense>` at all call sites. */
50792
51350
  var MaskShapeCanvas = lazy(() => import("./MaskShapeCanvas-DI4BY7W2.js").then((m) => ({ default: m.MaskShapeCanvas })));
50793
51351
  /** Lazy-wrapped `MotionZonesSettings` — code-split off the main bundle. */
50794
- var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-DNdnFHso.js").then((m) => ({ default: m.MotionZonesSettings })));
51352
+ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-7c3yiT5E.js").then((m) => ({ default: m.MotionZonesSettings })));
50795
51353
  /** Lazy-wrapped `SceneMonitorEditor` — code-split off the main bundle for the
50796
51354
  * same reason: it mounts `MaskShapeCanvas`, which chains react-konva. Render
50797
51355
  * inside `<Suspense>`; the admin-ui `/scenes` dialog is its only caller. */
50798
- var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-Bfo4BNqA.js").then((m) => ({ default: m.SceneMonitorEditor })));
51356
+ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-BvDy3x3k.js").then((m) => ({ default: m.SceneMonitorEditor })));
50799
51357
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
50800
- var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-CooCVUmA.js").then((m) => ({ default: m.PrivacyMaskSettings })));
51358
+ var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-PkYs077O.js").then((m) => ({ default: m.PrivacyMaskSettings })));
50801
51359
  //#endregion
50802
- export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, 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, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, 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, ModelPicker, MotionZonesSettings, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, 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, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, EyeOff as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, 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, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, 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, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, 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, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, 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, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, 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, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, 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, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, 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, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
51360
+ export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, 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, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, 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, ModelPicker, MotionZonesSettings, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, 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, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, Camera as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, createLucideIcon as l, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, Grid2x2 as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, EyeOff as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, 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, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, 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, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, 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, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, 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, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, 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, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, 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, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzCaptureHomeHere, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetHomeReturnSeconds, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturnSeconds, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, 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, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };