@camstack/ui-library 1.2.175 → 1.2.177

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.
@@ -21,6 +21,18 @@ export interface GridLayoutCell {
21
21
  /** Where it lands, normalized against the CANVAS. */
22
22
  readonly cell: GridNormalizedRect;
23
23
  }
24
+ /**
25
+ * Which profiles this grid can compose, and which sources stop it.
26
+ *
27
+ * Read-only in the editor. The operator does not choose what is on offer — the
28
+ * source cameras do, by what they have assigned — and a checkbox that pretended
29
+ * otherwise would publish a composition with a hole in it.
30
+ */
31
+ export interface GridProfileOffer {
32
+ readonly profile: 'high' | 'mid' | 'low';
33
+ readonly offered: boolean;
34
+ readonly missingSources: readonly number[];
35
+ }
24
36
  export interface GridLayoutView {
25
37
  readonly instanceId: string;
26
38
  readonly deviceId: number;
@@ -29,6 +41,7 @@ export interface GridLayoutView {
29
41
  readonly height: number;
30
42
  readonly fps: number;
31
43
  readonly cells: readonly GridLayoutCell[];
44
+ readonly profiles: readonly GridProfileOffer[];
32
45
  }
33
46
  /**
34
47
  * What a read of the grid can be.
@@ -39,7 +52,14 @@ export interface GridLayoutView {
39
52
  * which is exactly the failure D315 exists to stop.
40
53
  */
41
54
  export type GridLayoutReadOutcome = GridLayoutView | null | 'unreadable';
42
- /** Parse the `getGridForDevice` reply. See {@link GridLayoutReadOutcome}. */
55
+ /**
56
+ * Parse the `camera-grid-layout.getLayout` reply. See {@link GridLayoutReadOutcome}.
57
+ *
58
+ * The cap answers the view itself, or `null` — there is no envelope. It used to
59
+ * come back as `{ grid }` from `addons.custom`, which was the mechanism the
60
+ * widget reached the addon through before the geometry had a capability of its
61
+ * own; the widget now asks THE CAMERA and the envelope went with the bridge.
62
+ */
43
63
  export declare function parseGridView(raw: unknown): GridLayoutReadOutcome;
44
64
  /**
45
65
  * Keep a rectangle inside the unit square.
@@ -243,6 +243,16 @@ export declare const useButtonPress: typeof trpc.button.press.useMutation;
243
243
  export declare const useCameraCredentialsGetCredentials: typeof trpc.cameraCredentials.getCredentials.useQuery;
244
244
  /** Generated alias around `trpc.cameraCredentials.getStatus.useQuery`. */
245
245
  export declare const useCameraCredentialsGetStatus: typeof trpc.cameraCredentials.getStatus.useQuery;
246
+ /** Generated alias around `trpc.cameraGridLayout.getLayout.useQuery`. */
247
+ export declare const useCameraGridLayoutGetLayout: typeof trpc.cameraGridLayout.getLayout.useQuery;
248
+ /** Generated alias around `trpc.cameraGridLayout.saveLayout.useMutation`. */
249
+ export declare const useCameraGridLayoutSaveLayout: typeof trpc.cameraGridLayout.saveLayout.useMutation;
250
+ /** Generated alias around `trpc.cameraGridLayout.getDeviceSettingsContribution.useQuery`. */
251
+ export declare const useCameraGridLayoutGetDeviceSettingsContribution: typeof trpc.cameraGridLayout.getDeviceSettingsContribution.useQuery;
252
+ /** Generated alias around `trpc.cameraGridLayout.getDeviceLiveContribution.useQuery`. */
253
+ export declare const useCameraGridLayoutGetDeviceLiveContribution: typeof trpc.cameraGridLayout.getDeviceLiveContribution.useQuery;
254
+ /** Generated alias around `trpc.cameraGridLayout.applyDeviceSettingsPatch.useMutation`. */
255
+ export declare const useCameraGridLayoutApplyDeviceSettingsPatch: typeof trpc.cameraGridLayout.applyDeviceSettingsPatch.useMutation;
246
256
  /** Generated alias around `trpc.cameraPipelineConfig.getDeviceSettingsContribution.useQuery`. */
247
257
  export declare const useCameraPipelineConfigGetDeviceSettingsContribution: typeof trpc.cameraPipelineConfig.getDeviceSettingsContribution.useQuery;
248
258
  /** Generated alias around `trpc.cameraPipelineConfig.getDeviceLiveContribution.useQuery`. */
package/dist/index.cjs CHANGED
@@ -5319,6 +5319,16 @@ var useButtonPress = trpc.button.press.useMutation;
5319
5319
  var useCameraCredentialsGetCredentials = trpc.cameraCredentials.getCredentials.useQuery;
5320
5320
  /** Generated alias around `trpc.cameraCredentials.getStatus.useQuery`. */
5321
5321
  var useCameraCredentialsGetStatus = trpc.cameraCredentials.getStatus.useQuery;
5322
+ /** Generated alias around `trpc.cameraGridLayout.getLayout.useQuery`. */
5323
+ var useCameraGridLayoutGetLayout = trpc.cameraGridLayout.getLayout.useQuery;
5324
+ /** Generated alias around `trpc.cameraGridLayout.saveLayout.useMutation`. */
5325
+ var useCameraGridLayoutSaveLayout = trpc.cameraGridLayout.saveLayout.useMutation;
5326
+ /** Generated alias around `trpc.cameraGridLayout.getDeviceSettingsContribution.useQuery`. */
5327
+ var useCameraGridLayoutGetDeviceSettingsContribution = trpc.cameraGridLayout.getDeviceSettingsContribution.useQuery;
5328
+ /** Generated alias around `trpc.cameraGridLayout.getDeviceLiveContribution.useQuery`. */
5329
+ var useCameraGridLayoutGetDeviceLiveContribution = trpc.cameraGridLayout.getDeviceLiveContribution.useQuery;
5330
+ /** Generated alias around `trpc.cameraGridLayout.applyDeviceSettingsPatch.useMutation`. */
5331
+ var useCameraGridLayoutApplyDeviceSettingsPatch = trpc.cameraGridLayout.applyDeviceSettingsPatch.useMutation;
5322
5332
  /** Generated alias around `trpc.cameraPipelineConfig.getDeviceSettingsContribution.useQuery`. */
5323
5333
  var useCameraPipelineConfigGetDeviceSettingsContribution = trpc.cameraPipelineConfig.getDeviceSettingsContribution.useQuery;
5324
5334
  /** Generated alias around `trpc.cameraPipelineConfig.getDeviceLiveContribution.useQuery`. */
@@ -16261,6 +16271,136 @@ function AutotrackSection({ deviceId }) {
16261
16271
  });
16262
16272
  }
16263
16273
  //#endregion
16274
+ //#region src/hooks/use-device-proxy.ts
16275
+ /**
16276
+ * useDeviceProxy — canonical React entry point for a device.
16277
+ *
16278
+ * Symmetric with the server's `ctx.fetchDevice(id)` and the SDK's
16279
+ * `BackendClient.fetchDevice(id)` — same `DeviceProxy` shape, same
16280
+ * routing semantics (cap-method calls go through the wrapper chain;
16281
+ * `state.<cap>.value` reads the kernel's mirrored snapshot, never
16282
+ * the provider).
16283
+ *
16284
+ * What you can do with the returned proxy:
16285
+ *
16286
+ * const dev = useDeviceProxy(trpc, deviceId)
16287
+ *
16288
+ * // Reactive runtime state — re-renders when the slice changes.
16289
+ * const battery = useDeviceStateSlice(dev?.state.battery)
16290
+ *
16291
+ * // Imperative cap-method calls — through the wrapper chain.
16292
+ * await dev?.snapshot?.getSnapshot({ streamId: 'high' })
16293
+ * await dev?.ptz?.move({ direction: 'left', steps: 1 })
16294
+ *
16295
+ * Lifecycle: the hook resolves bindings via `deviceManager.getBindings`
16296
+ * the first time `deviceId` becomes valid, and refreshes them on
16297
+ * `capability.binding-changed` events for that device. Returns `null`
16298
+ * until the first resolution completes (the proxy is not constructible
16299
+ * without a binding).
16300
+ *
16301
+ * Works in both admin-ui (`BackendClient.trpc`) and addon pages
16302
+ * (`AddonPageProps.trpc`) — parametrized by a minimal vanilla tRPC
16303
+ * proxy shape (matches both at runtime).
16304
+ */
16305
+ var BINDING_CHANGED_CATEGORY = "capability.binding-changed";
16306
+ /**
16307
+ * @returns the proxy, or `null` while bindings are still loading or
16308
+ * when `deviceId` is null. Re-rendered when bindings change.
16309
+ */
16310
+ function useDeviceProxy(trpc, deviceId) {
16311
+ const [binding, setBinding] = (0, react$1.useState)(null);
16312
+ (0, react$1.useEffect)(() => {
16313
+ if (deviceId === null) {
16314
+ setBinding(null);
16315
+ return;
16316
+ }
16317
+ let cancelled = false;
16318
+ const refresh = async () => {
16319
+ try {
16320
+ const next = await trpc.deviceManager.getBindings.query({ deviceId });
16321
+ if (!cancelled) setBinding(next);
16322
+ } catch {
16323
+ if (!cancelled) setBinding((prev) => prev);
16324
+ }
16325
+ };
16326
+ refresh();
16327
+ const sub = trpc.live?.onEvent.subscribe({ category: BINDING_CHANGED_CATEGORY }, { onData: (evt) => {
16328
+ const src = evt.data?.source;
16329
+ if (!src) {
16330
+ refresh();
16331
+ return;
16332
+ }
16333
+ if (src.type === "device" && src.id === deviceId) refresh();
16334
+ } });
16335
+ return () => {
16336
+ cancelled = true;
16337
+ sub?.unsubscribe();
16338
+ };
16339
+ }, [trpc, deviceId]);
16340
+ return (0, react$1.useMemo)(() => {
16341
+ if (!binding) return null;
16342
+ return (0, _camstack_types.createDeviceProxy)(trpc, binding);
16343
+ }, [trpc, binding]);
16344
+ }
16345
+ /**
16346
+ * Companion hook — reads a `SliceHandle` reactively, returning the
16347
+ * current value and re-rendering on every push from the kernel
16348
+ * mirror. Pass `dev?.state.battery` etc. as the handle.
16349
+ *
16350
+ * const dev = useDeviceProxy(trpc, deviceId)
16351
+ * const battery = useDeviceStateSlice(dev?.state.battery)
16352
+ *
16353
+ * Why a hook (and not just `dev.state.battery.subscribe(...)` inline)?
16354
+ * React doesn't observe external mutations on its own — a bare
16355
+ * subscribe call inside a render would fire on every render (memory
16356
+ * leak), wouldn't trigger a re-render on slice change, and wouldn't
16357
+ * clean up at unmount. The hook bridges the imperative
16358
+ * `(value, subscribe)` pair into React's declarative lifecycle via
16359
+ * `useSyncExternalStore` (the canonical React 18 primitive for
16360
+ * external stores — handles tearing in concurrent rendering and
16361
+ * de-dups identical pushes).
16362
+ */
16363
+ function useDeviceStateSlice(handle) {
16364
+ const subscribe = (0, react$1.useCallback)((notify) => {
16365
+ if (!handle) return () => void 0;
16366
+ return handle.subscribe(() => notify());
16367
+ }, [handle]);
16368
+ const getSnapshot = (0, react$1.useCallback)(() => handle?.value, [handle]);
16369
+ return (0, react$1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
16370
+ }
16371
+ /**
16372
+ * One-line combinator — collapse the common
16373
+ * `useDeviceProxy + useDeviceStateSlice(dev?.state.<cap>)` pair into a
16374
+ * single hook. The selector receives the live `DeviceProxy['state']`
16375
+ * bag (typed against the codegen, so `s.battery` etc. autocomplete)
16376
+ * and returns one slice handle. Returns the slice value, undefined
16377
+ * while the binding resolves OR when the slice has no cached push yet.
16378
+ *
16379
+ * Idiomatic call-site:
16380
+ *
16381
+ * const battery = useDeviceState(trpc, deviceId, (s) => s.battery)
16382
+ * const zones = useDeviceState(trpc, deviceId, (s) => s.zones)
16383
+ *
16384
+ * vs. the manual pair:
16385
+ *
16386
+ * const dev = useDeviceProxy(trpc, deviceId)
16387
+ * const battery = useDeviceStateSlice(dev?.state.battery)
16388
+ * const zones = useDeviceStateSlice(dev?.state.zones)
16389
+ *
16390
+ * Use the manual pair when:
16391
+ * - you also need the proxy's cap method bag (`dev.zones?.addZone(...)`)
16392
+ * - you want to share the proxy across multiple slice reads with a
16393
+ * single binding fetch (the combinator calls useDeviceProxy
16394
+ * internally, which dedups bindings via React Query in practice
16395
+ * but spawns one extra subscription per call site)
16396
+ *
16397
+ * Use the combinator when reading just one slice — most common case.
16398
+ */
16399
+ function useDeviceState(trpc, deviceId, select) {
16400
+ const dev = useDeviceProxy(trpc, deviceId);
16401
+ return useDeviceStateSlice(dev ? select(dev.state) : void 0);
16402
+ }
16403
+ //#endregion
16264
16404
  //#region src/hooks/use-devices.ts
16265
16405
  /**
16266
16406
  * useDevices / useDevice — reactive sync-mirror reads.
@@ -16446,20 +16586,49 @@ function readCell(value) {
16446
16586
  cell
16447
16587
  };
16448
16588
  }
16449
- /** Parse the `getGridForDevice` reply. See {@link GridLayoutReadOutcome}. */
16589
+ function readProfileOffer(value) {
16590
+ if (!isRecord(value)) return null;
16591
+ const profile = value["profile"];
16592
+ const offered = value["offered"];
16593
+ const missing = value["missingSources"];
16594
+ if (profile !== "high" && profile !== "mid" && profile !== "low") return null;
16595
+ if (typeof offered !== "boolean" || !Array.isArray(missing)) return null;
16596
+ const missingSources = [];
16597
+ for (const entry of missing) {
16598
+ if (typeof entry !== "number" || !Number.isInteger(entry)) return null;
16599
+ missingSources.push(entry);
16600
+ }
16601
+ return {
16602
+ profile,
16603
+ offered,
16604
+ missingSources
16605
+ };
16606
+ }
16607
+ /**
16608
+ * Parse the `camera-grid-layout.getLayout` reply. See {@link GridLayoutReadOutcome}.
16609
+ *
16610
+ * The cap answers the view itself, or `null` — there is no envelope. It used to
16611
+ * come back as `{ grid }` from `addons.custom`, which was the mechanism the
16612
+ * widget reached the addon through before the geometry had a capability of its
16613
+ * own; the widget now asks THE CAMERA and the envelope went with the bridge.
16614
+ */
16450
16615
  function parseGridView(raw) {
16451
- if (!isRecord(raw) || !("grid" in raw)) return "unreadable";
16452
- const grid = raw["grid"];
16453
- if (grid === null) return null;
16454
- if (!isRecord(grid)) return "unreadable";
16455
- const { instanceId, deviceId, name, width, height, fps, cells } = grid;
16456
- if (typeof instanceId !== "string" || typeof deviceId !== "number" || typeof name !== "string" || typeof width !== "number" || typeof height !== "number" || typeof fps !== "number" || !Array.isArray(cells)) return "unreadable";
16616
+ if (raw === null) return null;
16617
+ if (!isRecord(raw)) return "unreadable";
16618
+ const { instanceId, deviceId, name, width, height, fps, cells, profiles } = raw;
16619
+ if (typeof instanceId !== "string" || typeof deviceId !== "number" || typeof name !== "string" || typeof width !== "number" || typeof height !== "number" || typeof fps !== "number" || !Array.isArray(cells) || !Array.isArray(profiles)) return "unreadable";
16457
16620
  const parsed = [];
16458
16621
  for (const entry of cells) {
16459
16622
  const cell = readCell(entry);
16460
16623
  if (cell === null) return "unreadable";
16461
16624
  parsed.push(cell);
16462
16625
  }
16626
+ const offers = [];
16627
+ for (const entry of profiles) {
16628
+ const offer = readProfileOffer(entry);
16629
+ if (offer === null) return "unreadable";
16630
+ offers.push(offer);
16631
+ }
16463
16632
  return {
16464
16633
  instanceId,
16465
16634
  deviceId,
@@ -16467,7 +16636,8 @@ function parseGridView(raw) {
16467
16636
  width,
16468
16637
  height,
16469
16638
  fps,
16470
- cells: parsed
16639
+ cells: parsed,
16640
+ profiles: offers
16471
16641
  };
16472
16642
  }
16473
16643
  /**
@@ -16525,7 +16695,6 @@ function resizeNormalizedRect(rect, dw, dh) {
16525
16695
  * the server nothing and it is wrong in exactly the ways the real composition
16526
16696
  * would be wrong.
16527
16697
  */
16528
- var ADDON_ID = "camera-grid";
16529
16698
  var FULL_FRAME = {
16530
16699
  x: 0,
16531
16700
  y: 0,
@@ -16544,36 +16713,36 @@ function CameraGridLayoutEditor({ deviceId }) {
16544
16713
  const [saveError, setSaveError] = (0, react$1.useState)(null);
16545
16714
  const [selected, setSelected] = (0, react$1.useState)(0);
16546
16715
  const [drag, setDrag] = (0, react$1.useState)(null);
16716
+ const dev = useDeviceProxy(system.trpcClient, deviceId);
16547
16717
  const reload = (0, react$1.useCallback)(async () => {
16548
- const outcome = parseGridView(await system.trpcClient.addons.custom.mutate({
16549
- addonId: ADDON_ID,
16550
- action: "getGridForDevice",
16551
- input: { deviceId }
16552
- }));
16718
+ const layout = dev?.cameraGridLayout;
16719
+ if (!layout) return;
16720
+ const outcome = parseGridView(await layout.getLayout({}));
16553
16721
  setLoaded(outcome);
16554
16722
  setDraft(outcome === null || outcome === "unreadable" ? null : outcome);
16555
- }, [system, deviceId]);
16723
+ }, [dev]);
16556
16724
  (0, react$1.useEffect)(() => {
16725
+ if (!dev) return;
16726
+ if (!dev.cameraGridLayout) {
16727
+ setLoaded(null);
16728
+ return;
16729
+ }
16557
16730
  reload().catch(() => {
16558
16731
  setLoaded("unreadable");
16559
16732
  });
16560
- }, [reload]);
16733
+ }, [dev, reload]);
16561
16734
  const save = (0, react$1.useCallback)(async () => {
16562
- if (draft === null) return;
16735
+ const layout = dev?.cameraGridLayout;
16736
+ if (draft === null || !layout) return;
16563
16737
  setSaving(true);
16564
16738
  setSaveError(null);
16565
16739
  try {
16566
- const outcome = parseGridView(await system.trpcClient.addons.custom.mutate({
16567
- addonId: ADDON_ID,
16568
- action: "saveGridLayout",
16569
- input: {
16570
- deviceId,
16571
- name: draft.name,
16572
- width: draft.width,
16573
- height: draft.height,
16574
- fps: draft.fps,
16575
- cells: draft.cells.map((cell) => ({ ...cell }))
16576
- }
16740
+ const outcome = parseGridView(await layout.saveLayout({
16741
+ name: draft.name,
16742
+ width: draft.width,
16743
+ height: draft.height,
16744
+ fps: draft.fps,
16745
+ cells: draft.cells.map((cell) => ({ ...cell }))
16577
16746
  }));
16578
16747
  if (outcome !== null && outcome !== "unreadable") {
16579
16748
  setLoaded(outcome);
@@ -16584,11 +16753,7 @@ function CameraGridLayoutEditor({ deviceId }) {
16584
16753
  } finally {
16585
16754
  setSaving(false);
16586
16755
  }
16587
- }, [
16588
- system,
16589
- deviceId,
16590
- draft
16591
- ]);
16756
+ }, [dev, draft]);
16592
16757
  const patchCell = (0, react$1.useCallback)((index, patch) => {
16593
16758
  setDraft((prev) => prev === null ? prev : {
16594
16759
  ...prev,
@@ -16742,6 +16907,10 @@ function CameraGridLayoutEditor({ deviceId }) {
16742
16907
  })
16743
16908
  ]
16744
16909
  }),
16910
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GridProfileReport, {
16911
+ offers: loaded.profiles,
16912
+ cameras
16913
+ }),
16745
16914
  draft.cells[selected] !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(CellInspector, {
16746
16915
  cell: draft.cells[selected],
16747
16916
  index: selected,
@@ -16761,6 +16930,37 @@ function CameraGridLayoutEditor({ deviceId }) {
16761
16930
  })
16762
16931
  });
16763
16932
  }
16933
+ /**
16934
+ * The honest report. A grid's `high` composes its sources' `high` and its `low`
16935
+ * their `low`, so a profile is on offer only when EVERY source can serve it —
16936
+ * and the refusal names the source, because "this grid has no low" is not
16937
+ * something an operator can act on and "615 has no low" is.
16938
+ *
16939
+ * Read-only on purpose: what is on offer is decided by the source cameras'
16940
+ * assignments, and a control here would be a switch that writes nothing (D62).
16941
+ */
16942
+ function GridProfileReport({ offers, cameras }) {
16943
+ const nameOf = (deviceId) => cameras.find((camera) => camera.id === deviceId)?.name ?? `#${String(deviceId)}`;
16944
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16945
+ className: "flex flex-col gap-1 rounded border border-border p-2 text-[10.5px]",
16946
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16947
+ className: "uppercase text-foreground-subtle",
16948
+ children: "Published profiles"
16949
+ }), offers.map((offer) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
16950
+ className: "flex items-baseline gap-2",
16951
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16952
+ className: "w-10 uppercase",
16953
+ children: offer.profile
16954
+ }), offer.offered ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
16955
+ className: "text-foreground-subtle",
16956
+ children: ["composed from every source’s ", offer.profile]
16957
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
16958
+ className: "text-danger",
16959
+ children: offer.missingSources.length === 0 ? "not offered — this grid has no cells yet" : `not offered — no ${offer.profile} on ${offer.missingSources.map(nameOf).join(", ")}`
16960
+ })]
16961
+ }, offer.profile))]
16962
+ });
16963
+ }
16764
16964
  function GridCellBox({ cell, selected, onSelect, onDragStart }) {
16765
16965
  const { src } = useDeviceSnapshotImage(cell.deviceId, { width: 640 });
16766
16966
  const backgroundSize = `${String(100 / cell.source.width)}% ${String(100 / cell.source.height)}%`;
@@ -16866,136 +17066,6 @@ function LabelledNumber({ label, value, step = 1, onChange }) {
16866
17066
  });
16867
17067
  }
16868
17068
  //#endregion
16869
- //#region src/hooks/use-device-proxy.ts
16870
- /**
16871
- * useDeviceProxy — canonical React entry point for a device.
16872
- *
16873
- * Symmetric with the server's `ctx.fetchDevice(id)` and the SDK's
16874
- * `BackendClient.fetchDevice(id)` — same `DeviceProxy` shape, same
16875
- * routing semantics (cap-method calls go through the wrapper chain;
16876
- * `state.<cap>.value` reads the kernel's mirrored snapshot, never
16877
- * the provider).
16878
- *
16879
- * What you can do with the returned proxy:
16880
- *
16881
- * const dev = useDeviceProxy(trpc, deviceId)
16882
- *
16883
- * // Reactive runtime state — re-renders when the slice changes.
16884
- * const battery = useDeviceStateSlice(dev?.state.battery)
16885
- *
16886
- * // Imperative cap-method calls — through the wrapper chain.
16887
- * await dev?.snapshot?.getSnapshot({ streamId: 'high' })
16888
- * await dev?.ptz?.move({ direction: 'left', steps: 1 })
16889
- *
16890
- * Lifecycle: the hook resolves bindings via `deviceManager.getBindings`
16891
- * the first time `deviceId` becomes valid, and refreshes them on
16892
- * `capability.binding-changed` events for that device. Returns `null`
16893
- * until the first resolution completes (the proxy is not constructible
16894
- * without a binding).
16895
- *
16896
- * Works in both admin-ui (`BackendClient.trpc`) and addon pages
16897
- * (`AddonPageProps.trpc`) — parametrized by a minimal vanilla tRPC
16898
- * proxy shape (matches both at runtime).
16899
- */
16900
- var BINDING_CHANGED_CATEGORY = "capability.binding-changed";
16901
- /**
16902
- * @returns the proxy, or `null` while bindings are still loading or
16903
- * when `deviceId` is null. Re-rendered when bindings change.
16904
- */
16905
- function useDeviceProxy(trpc, deviceId) {
16906
- const [binding, setBinding] = (0, react$1.useState)(null);
16907
- (0, react$1.useEffect)(() => {
16908
- if (deviceId === null) {
16909
- setBinding(null);
16910
- return;
16911
- }
16912
- let cancelled = false;
16913
- const refresh = async () => {
16914
- try {
16915
- const next = await trpc.deviceManager.getBindings.query({ deviceId });
16916
- if (!cancelled) setBinding(next);
16917
- } catch {
16918
- if (!cancelled) setBinding((prev) => prev);
16919
- }
16920
- };
16921
- refresh();
16922
- const sub = trpc.live?.onEvent.subscribe({ category: BINDING_CHANGED_CATEGORY }, { onData: (evt) => {
16923
- const src = evt.data?.source;
16924
- if (!src) {
16925
- refresh();
16926
- return;
16927
- }
16928
- if (src.type === "device" && src.id === deviceId) refresh();
16929
- } });
16930
- return () => {
16931
- cancelled = true;
16932
- sub?.unsubscribe();
16933
- };
16934
- }, [trpc, deviceId]);
16935
- return (0, react$1.useMemo)(() => {
16936
- if (!binding) return null;
16937
- return (0, _camstack_types.createDeviceProxy)(trpc, binding);
16938
- }, [trpc, binding]);
16939
- }
16940
- /**
16941
- * Companion hook — reads a `SliceHandle` reactively, returning the
16942
- * current value and re-rendering on every push from the kernel
16943
- * mirror. Pass `dev?.state.battery` etc. as the handle.
16944
- *
16945
- * const dev = useDeviceProxy(trpc, deviceId)
16946
- * const battery = useDeviceStateSlice(dev?.state.battery)
16947
- *
16948
- * Why a hook (and not just `dev.state.battery.subscribe(...)` inline)?
16949
- * React doesn't observe external mutations on its own — a bare
16950
- * subscribe call inside a render would fire on every render (memory
16951
- * leak), wouldn't trigger a re-render on slice change, and wouldn't
16952
- * clean up at unmount. The hook bridges the imperative
16953
- * `(value, subscribe)` pair into React's declarative lifecycle via
16954
- * `useSyncExternalStore` (the canonical React 18 primitive for
16955
- * external stores — handles tearing in concurrent rendering and
16956
- * de-dups identical pushes).
16957
- */
16958
- function useDeviceStateSlice(handle) {
16959
- const subscribe = (0, react$1.useCallback)((notify) => {
16960
- if (!handle) return () => void 0;
16961
- return handle.subscribe(() => notify());
16962
- }, [handle]);
16963
- const getSnapshot = (0, react$1.useCallback)(() => handle?.value, [handle]);
16964
- return (0, react$1.useSyncExternalStore)(subscribe, getSnapshot, getSnapshot);
16965
- }
16966
- /**
16967
- * One-line combinator — collapse the common
16968
- * `useDeviceProxy + useDeviceStateSlice(dev?.state.<cap>)` pair into a
16969
- * single hook. The selector receives the live `DeviceProxy['state']`
16970
- * bag (typed against the codegen, so `s.battery` etc. autocomplete)
16971
- * and returns one slice handle. Returns the slice value, undefined
16972
- * while the binding resolves OR when the slice has no cached push yet.
16973
- *
16974
- * Idiomatic call-site:
16975
- *
16976
- * const battery = useDeviceState(trpc, deviceId, (s) => s.battery)
16977
- * const zones = useDeviceState(trpc, deviceId, (s) => s.zones)
16978
- *
16979
- * vs. the manual pair:
16980
- *
16981
- * const dev = useDeviceProxy(trpc, deviceId)
16982
- * const battery = useDeviceStateSlice(dev?.state.battery)
16983
- * const zones = useDeviceStateSlice(dev?.state.zones)
16984
- *
16985
- * Use the manual pair when:
16986
- * - you also need the proxy's cap method bag (`dev.zones?.addZone(...)`)
16987
- * - you want to share the proxy across multiple slice reads with a
16988
- * single binding fetch (the combinator calls useDeviceProxy
16989
- * internally, which dedups bindings via React Query in practice
16990
- * but spawns one extra subscription per call site)
16991
- *
16992
- * Use the combinator when reading just one slice — most common case.
16993
- */
16994
- function useDeviceState(trpc, deviceId, select) {
16995
- const dev = useDeviceProxy(trpc, deviceId);
16996
- return useDeviceStateSlice(dev ? select(dev.state) : void 0);
16997
- }
16998
- //#endregion
16999
17069
  //#region src/hooks/use-device-capability.ts
17000
17070
  function useDeviceCapability(options) {
17001
17071
  const dev = useDeviceProxy(options.trpc, options.deviceId);
@@ -51912,6 +51982,11 @@ exports.useBrokerUnsubscribe = useBrokerUnsubscribe;
51912
51982
  exports.useButtonPress = useButtonPress;
51913
51983
  exports.useCameraCredentialsGetCredentials = useCameraCredentialsGetCredentials;
51914
51984
  exports.useCameraCredentialsGetStatus = useCameraCredentialsGetStatus;
51985
+ exports.useCameraGridLayoutApplyDeviceSettingsPatch = useCameraGridLayoutApplyDeviceSettingsPatch;
51986
+ exports.useCameraGridLayoutGetDeviceLiveContribution = useCameraGridLayoutGetDeviceLiveContribution;
51987
+ exports.useCameraGridLayoutGetDeviceSettingsContribution = useCameraGridLayoutGetDeviceSettingsContribution;
51988
+ exports.useCameraGridLayoutGetLayout = useCameraGridLayoutGetLayout;
51989
+ exports.useCameraGridLayoutSaveLayout = useCameraGridLayoutSaveLayout;
51915
51990
  exports.useCameraPipelineConfigApplyDeviceSettingsPatch = useCameraPipelineConfigApplyDeviceSettingsPatch;
51916
51991
  exports.useCameraPipelineConfigGetDeviceLiveContribution = useCameraPipelineConfigGetDeviceLiveContribution;
51917
51992
  exports.useCameraPipelineConfigGetDeviceSettingsContribution = useCameraPipelineConfigGetDeviceSettingsContribution;
package/dist/index.js CHANGED
@@ -5295,6 +5295,16 @@ var useButtonPress = trpc.button.press.useMutation;
5295
5295
  var useCameraCredentialsGetCredentials = trpc.cameraCredentials.getCredentials.useQuery;
5296
5296
  /** Generated alias around `trpc.cameraCredentials.getStatus.useQuery`. */
5297
5297
  var useCameraCredentialsGetStatus = trpc.cameraCredentials.getStatus.useQuery;
5298
+ /** Generated alias around `trpc.cameraGridLayout.getLayout.useQuery`. */
5299
+ var useCameraGridLayoutGetLayout = trpc.cameraGridLayout.getLayout.useQuery;
5300
+ /** Generated alias around `trpc.cameraGridLayout.saveLayout.useMutation`. */
5301
+ var useCameraGridLayoutSaveLayout = trpc.cameraGridLayout.saveLayout.useMutation;
5302
+ /** Generated alias around `trpc.cameraGridLayout.getDeviceSettingsContribution.useQuery`. */
5303
+ var useCameraGridLayoutGetDeviceSettingsContribution = trpc.cameraGridLayout.getDeviceSettingsContribution.useQuery;
5304
+ /** Generated alias around `trpc.cameraGridLayout.getDeviceLiveContribution.useQuery`. */
5305
+ var useCameraGridLayoutGetDeviceLiveContribution = trpc.cameraGridLayout.getDeviceLiveContribution.useQuery;
5306
+ /** Generated alias around `trpc.cameraGridLayout.applyDeviceSettingsPatch.useMutation`. */
5307
+ var useCameraGridLayoutApplyDeviceSettingsPatch = trpc.cameraGridLayout.applyDeviceSettingsPatch.useMutation;
5298
5308
  /** Generated alias around `trpc.cameraPipelineConfig.getDeviceSettingsContribution.useQuery`. */
5299
5309
  var useCameraPipelineConfigGetDeviceSettingsContribution = trpc.cameraPipelineConfig.getDeviceSettingsContribution.useQuery;
5300
5310
  /** Generated alias around `trpc.cameraPipelineConfig.getDeviceLiveContribution.useQuery`. */
@@ -16237,6 +16247,136 @@ function AutotrackSection({ deviceId }) {
16237
16247
  });
16238
16248
  }
16239
16249
  //#endregion
16250
+ //#region src/hooks/use-device-proxy.ts
16251
+ /**
16252
+ * useDeviceProxy — canonical React entry point for a device.
16253
+ *
16254
+ * Symmetric with the server's `ctx.fetchDevice(id)` and the SDK's
16255
+ * `BackendClient.fetchDevice(id)` — same `DeviceProxy` shape, same
16256
+ * routing semantics (cap-method calls go through the wrapper chain;
16257
+ * `state.<cap>.value` reads the kernel's mirrored snapshot, never
16258
+ * the provider).
16259
+ *
16260
+ * What you can do with the returned proxy:
16261
+ *
16262
+ * const dev = useDeviceProxy(trpc, deviceId)
16263
+ *
16264
+ * // Reactive runtime state — re-renders when the slice changes.
16265
+ * const battery = useDeviceStateSlice(dev?.state.battery)
16266
+ *
16267
+ * // Imperative cap-method calls — through the wrapper chain.
16268
+ * await dev?.snapshot?.getSnapshot({ streamId: 'high' })
16269
+ * await dev?.ptz?.move({ direction: 'left', steps: 1 })
16270
+ *
16271
+ * Lifecycle: the hook resolves bindings via `deviceManager.getBindings`
16272
+ * the first time `deviceId` becomes valid, and refreshes them on
16273
+ * `capability.binding-changed` events for that device. Returns `null`
16274
+ * until the first resolution completes (the proxy is not constructible
16275
+ * without a binding).
16276
+ *
16277
+ * Works in both admin-ui (`BackendClient.trpc`) and addon pages
16278
+ * (`AddonPageProps.trpc`) — parametrized by a minimal vanilla tRPC
16279
+ * proxy shape (matches both at runtime).
16280
+ */
16281
+ var BINDING_CHANGED_CATEGORY = "capability.binding-changed";
16282
+ /**
16283
+ * @returns the proxy, or `null` while bindings are still loading or
16284
+ * when `deviceId` is null. Re-rendered when bindings change.
16285
+ */
16286
+ function useDeviceProxy(trpc, deviceId) {
16287
+ const [binding, setBinding] = useState(null);
16288
+ useEffect(() => {
16289
+ if (deviceId === null) {
16290
+ setBinding(null);
16291
+ return;
16292
+ }
16293
+ let cancelled = false;
16294
+ const refresh = async () => {
16295
+ try {
16296
+ const next = await trpc.deviceManager.getBindings.query({ deviceId });
16297
+ if (!cancelled) setBinding(next);
16298
+ } catch {
16299
+ if (!cancelled) setBinding((prev) => prev);
16300
+ }
16301
+ };
16302
+ refresh();
16303
+ const sub = trpc.live?.onEvent.subscribe({ category: BINDING_CHANGED_CATEGORY }, { onData: (evt) => {
16304
+ const src = evt.data?.source;
16305
+ if (!src) {
16306
+ refresh();
16307
+ return;
16308
+ }
16309
+ if (src.type === "device" && src.id === deviceId) refresh();
16310
+ } });
16311
+ return () => {
16312
+ cancelled = true;
16313
+ sub?.unsubscribe();
16314
+ };
16315
+ }, [trpc, deviceId]);
16316
+ return useMemo(() => {
16317
+ if (!binding) return null;
16318
+ return createDeviceProxy(trpc, binding);
16319
+ }, [trpc, binding]);
16320
+ }
16321
+ /**
16322
+ * Companion hook — reads a `SliceHandle` reactively, returning the
16323
+ * current value and re-rendering on every push from the kernel
16324
+ * mirror. Pass `dev?.state.battery` etc. as the handle.
16325
+ *
16326
+ * const dev = useDeviceProxy(trpc, deviceId)
16327
+ * const battery = useDeviceStateSlice(dev?.state.battery)
16328
+ *
16329
+ * Why a hook (and not just `dev.state.battery.subscribe(...)` inline)?
16330
+ * React doesn't observe external mutations on its own — a bare
16331
+ * subscribe call inside a render would fire on every render (memory
16332
+ * leak), wouldn't trigger a re-render on slice change, and wouldn't
16333
+ * clean up at unmount. The hook bridges the imperative
16334
+ * `(value, subscribe)` pair into React's declarative lifecycle via
16335
+ * `useSyncExternalStore` (the canonical React 18 primitive for
16336
+ * external stores — handles tearing in concurrent rendering and
16337
+ * de-dups identical pushes).
16338
+ */
16339
+ function useDeviceStateSlice(handle) {
16340
+ const subscribe = useCallback((notify) => {
16341
+ if (!handle) return () => void 0;
16342
+ return handle.subscribe(() => notify());
16343
+ }, [handle]);
16344
+ const getSnapshot = useCallback(() => handle?.value, [handle]);
16345
+ return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
16346
+ }
16347
+ /**
16348
+ * One-line combinator — collapse the common
16349
+ * `useDeviceProxy + useDeviceStateSlice(dev?.state.<cap>)` pair into a
16350
+ * single hook. The selector receives the live `DeviceProxy['state']`
16351
+ * bag (typed against the codegen, so `s.battery` etc. autocomplete)
16352
+ * and returns one slice handle. Returns the slice value, undefined
16353
+ * while the binding resolves OR when the slice has no cached push yet.
16354
+ *
16355
+ * Idiomatic call-site:
16356
+ *
16357
+ * const battery = useDeviceState(trpc, deviceId, (s) => s.battery)
16358
+ * const zones = useDeviceState(trpc, deviceId, (s) => s.zones)
16359
+ *
16360
+ * vs. the manual pair:
16361
+ *
16362
+ * const dev = useDeviceProxy(trpc, deviceId)
16363
+ * const battery = useDeviceStateSlice(dev?.state.battery)
16364
+ * const zones = useDeviceStateSlice(dev?.state.zones)
16365
+ *
16366
+ * Use the manual pair when:
16367
+ * - you also need the proxy's cap method bag (`dev.zones?.addZone(...)`)
16368
+ * - you want to share the proxy across multiple slice reads with a
16369
+ * single binding fetch (the combinator calls useDeviceProxy
16370
+ * internally, which dedups bindings via React Query in practice
16371
+ * but spawns one extra subscription per call site)
16372
+ *
16373
+ * Use the combinator when reading just one slice — most common case.
16374
+ */
16375
+ function useDeviceState(trpc, deviceId, select) {
16376
+ const dev = useDeviceProxy(trpc, deviceId);
16377
+ return useDeviceStateSlice(dev ? select(dev.state) : void 0);
16378
+ }
16379
+ //#endregion
16240
16380
  //#region src/hooks/use-devices.ts
16241
16381
  /**
16242
16382
  * useDevices / useDevice — reactive sync-mirror reads.
@@ -16422,20 +16562,49 @@ function readCell(value) {
16422
16562
  cell
16423
16563
  };
16424
16564
  }
16425
- /** Parse the `getGridForDevice` reply. See {@link GridLayoutReadOutcome}. */
16565
+ function readProfileOffer(value) {
16566
+ if (!isRecord(value)) return null;
16567
+ const profile = value["profile"];
16568
+ const offered = value["offered"];
16569
+ const missing = value["missingSources"];
16570
+ if (profile !== "high" && profile !== "mid" && profile !== "low") return null;
16571
+ if (typeof offered !== "boolean" || !Array.isArray(missing)) return null;
16572
+ const missingSources = [];
16573
+ for (const entry of missing) {
16574
+ if (typeof entry !== "number" || !Number.isInteger(entry)) return null;
16575
+ missingSources.push(entry);
16576
+ }
16577
+ return {
16578
+ profile,
16579
+ offered,
16580
+ missingSources
16581
+ };
16582
+ }
16583
+ /**
16584
+ * Parse the `camera-grid-layout.getLayout` reply. See {@link GridLayoutReadOutcome}.
16585
+ *
16586
+ * The cap answers the view itself, or `null` — there is no envelope. It used to
16587
+ * come back as `{ grid }` from `addons.custom`, which was the mechanism the
16588
+ * widget reached the addon through before the geometry had a capability of its
16589
+ * own; the widget now asks THE CAMERA and the envelope went with the bridge.
16590
+ */
16426
16591
  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";
16592
+ if (raw === null) return null;
16593
+ if (!isRecord(raw)) return "unreadable";
16594
+ const { instanceId, deviceId, name, width, height, fps, cells, profiles } = raw;
16595
+ if (typeof instanceId !== "string" || typeof deviceId !== "number" || typeof name !== "string" || typeof width !== "number" || typeof height !== "number" || typeof fps !== "number" || !Array.isArray(cells) || !Array.isArray(profiles)) return "unreadable";
16433
16596
  const parsed = [];
16434
16597
  for (const entry of cells) {
16435
16598
  const cell = readCell(entry);
16436
16599
  if (cell === null) return "unreadable";
16437
16600
  parsed.push(cell);
16438
16601
  }
16602
+ const offers = [];
16603
+ for (const entry of profiles) {
16604
+ const offer = readProfileOffer(entry);
16605
+ if (offer === null) return "unreadable";
16606
+ offers.push(offer);
16607
+ }
16439
16608
  return {
16440
16609
  instanceId,
16441
16610
  deviceId,
@@ -16443,7 +16612,8 @@ function parseGridView(raw) {
16443
16612
  width,
16444
16613
  height,
16445
16614
  fps,
16446
- cells: parsed
16615
+ cells: parsed,
16616
+ profiles: offers
16447
16617
  };
16448
16618
  }
16449
16619
  /**
@@ -16501,7 +16671,6 @@ function resizeNormalizedRect(rect, dw, dh) {
16501
16671
  * the server nothing and it is wrong in exactly the ways the real composition
16502
16672
  * would be wrong.
16503
16673
  */
16504
- var ADDON_ID = "camera-grid";
16505
16674
  var FULL_FRAME = {
16506
16675
  x: 0,
16507
16676
  y: 0,
@@ -16520,36 +16689,36 @@ function CameraGridLayoutEditor({ deviceId }) {
16520
16689
  const [saveError, setSaveError] = useState(null);
16521
16690
  const [selected, setSelected] = useState(0);
16522
16691
  const [drag, setDrag] = useState(null);
16692
+ const dev = useDeviceProxy(system.trpcClient, deviceId);
16523
16693
  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
- }));
16694
+ const layout = dev?.cameraGridLayout;
16695
+ if (!layout) return;
16696
+ const outcome = parseGridView(await layout.getLayout({}));
16529
16697
  setLoaded(outcome);
16530
16698
  setDraft(outcome === null || outcome === "unreadable" ? null : outcome);
16531
- }, [system, deviceId]);
16699
+ }, [dev]);
16532
16700
  useEffect(() => {
16701
+ if (!dev) return;
16702
+ if (!dev.cameraGridLayout) {
16703
+ setLoaded(null);
16704
+ return;
16705
+ }
16533
16706
  reload().catch(() => {
16534
16707
  setLoaded("unreadable");
16535
16708
  });
16536
- }, [reload]);
16709
+ }, [dev, reload]);
16537
16710
  const save = useCallback(async () => {
16538
- if (draft === null) return;
16711
+ const layout = dev?.cameraGridLayout;
16712
+ if (draft === null || !layout) return;
16539
16713
  setSaving(true);
16540
16714
  setSaveError(null);
16541
16715
  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
- }
16716
+ const outcome = parseGridView(await layout.saveLayout({
16717
+ name: draft.name,
16718
+ width: draft.width,
16719
+ height: draft.height,
16720
+ fps: draft.fps,
16721
+ cells: draft.cells.map((cell) => ({ ...cell }))
16553
16722
  }));
16554
16723
  if (outcome !== null && outcome !== "unreadable") {
16555
16724
  setLoaded(outcome);
@@ -16560,11 +16729,7 @@ function CameraGridLayoutEditor({ deviceId }) {
16560
16729
  } finally {
16561
16730
  setSaving(false);
16562
16731
  }
16563
- }, [
16564
- system,
16565
- deviceId,
16566
- draft
16567
- ]);
16732
+ }, [dev, draft]);
16568
16733
  const patchCell = useCallback((index, patch) => {
16569
16734
  setDraft((prev) => prev === null ? prev : {
16570
16735
  ...prev,
@@ -16718,6 +16883,10 @@ function CameraGridLayoutEditor({ deviceId }) {
16718
16883
  })
16719
16884
  ]
16720
16885
  }),
16886
+ /* @__PURE__ */ jsx(GridProfileReport, {
16887
+ offers: loaded.profiles,
16888
+ cameras
16889
+ }),
16721
16890
  draft.cells[selected] !== void 0 && /* @__PURE__ */ jsx(CellInspector, {
16722
16891
  cell: draft.cells[selected],
16723
16892
  index: selected,
@@ -16737,6 +16906,37 @@ function CameraGridLayoutEditor({ deviceId }) {
16737
16906
  })
16738
16907
  });
16739
16908
  }
16909
+ /**
16910
+ * The honest report. A grid's `high` composes its sources' `high` and its `low`
16911
+ * their `low`, so a profile is on offer only when EVERY source can serve it —
16912
+ * and the refusal names the source, because "this grid has no low" is not
16913
+ * something an operator can act on and "615 has no low" is.
16914
+ *
16915
+ * Read-only on purpose: what is on offer is decided by the source cameras'
16916
+ * assignments, and a control here would be a switch that writes nothing (D62).
16917
+ */
16918
+ function GridProfileReport({ offers, cameras }) {
16919
+ const nameOf = (deviceId) => cameras.find((camera) => camera.id === deviceId)?.name ?? `#${String(deviceId)}`;
16920
+ return /* @__PURE__ */ jsxs("div", {
16921
+ className: "flex flex-col gap-1 rounded border border-border p-2 text-[10.5px]",
16922
+ children: [/* @__PURE__ */ jsx("span", {
16923
+ className: "uppercase text-foreground-subtle",
16924
+ children: "Published profiles"
16925
+ }), offers.map((offer) => /* @__PURE__ */ jsxs("div", {
16926
+ className: "flex items-baseline gap-2",
16927
+ children: [/* @__PURE__ */ jsx("span", {
16928
+ className: "w-10 uppercase",
16929
+ children: offer.profile
16930
+ }), offer.offered ? /* @__PURE__ */ jsxs("span", {
16931
+ className: "text-foreground-subtle",
16932
+ children: ["composed from every source’s ", offer.profile]
16933
+ }) : /* @__PURE__ */ jsx("span", {
16934
+ className: "text-danger",
16935
+ children: offer.missingSources.length === 0 ? "not offered — this grid has no cells yet" : `not offered — no ${offer.profile} on ${offer.missingSources.map(nameOf).join(", ")}`
16936
+ })]
16937
+ }, offer.profile))]
16938
+ });
16939
+ }
16740
16940
  function GridCellBox({ cell, selected, onSelect, onDragStart }) {
16741
16941
  const { src } = useDeviceSnapshotImage(cell.deviceId, { width: 640 });
16742
16942
  const backgroundSize = `${String(100 / cell.source.width)}% ${String(100 / cell.source.height)}%`;
@@ -16842,136 +17042,6 @@ function LabelledNumber({ label, value, step = 1, onChange }) {
16842
17042
  });
16843
17043
  }
16844
17044
  //#endregion
16845
- //#region src/hooks/use-device-proxy.ts
16846
- /**
16847
- * useDeviceProxy — canonical React entry point for a device.
16848
- *
16849
- * Symmetric with the server's `ctx.fetchDevice(id)` and the SDK's
16850
- * `BackendClient.fetchDevice(id)` — same `DeviceProxy` shape, same
16851
- * routing semantics (cap-method calls go through the wrapper chain;
16852
- * `state.<cap>.value` reads the kernel's mirrored snapshot, never
16853
- * the provider).
16854
- *
16855
- * What you can do with the returned proxy:
16856
- *
16857
- * const dev = useDeviceProxy(trpc, deviceId)
16858
- *
16859
- * // Reactive runtime state — re-renders when the slice changes.
16860
- * const battery = useDeviceStateSlice(dev?.state.battery)
16861
- *
16862
- * // Imperative cap-method calls — through the wrapper chain.
16863
- * await dev?.snapshot?.getSnapshot({ streamId: 'high' })
16864
- * await dev?.ptz?.move({ direction: 'left', steps: 1 })
16865
- *
16866
- * Lifecycle: the hook resolves bindings via `deviceManager.getBindings`
16867
- * the first time `deviceId` becomes valid, and refreshes them on
16868
- * `capability.binding-changed` events for that device. Returns `null`
16869
- * until the first resolution completes (the proxy is not constructible
16870
- * without a binding).
16871
- *
16872
- * Works in both admin-ui (`BackendClient.trpc`) and addon pages
16873
- * (`AddonPageProps.trpc`) — parametrized by a minimal vanilla tRPC
16874
- * proxy shape (matches both at runtime).
16875
- */
16876
- var BINDING_CHANGED_CATEGORY = "capability.binding-changed";
16877
- /**
16878
- * @returns the proxy, or `null` while bindings are still loading or
16879
- * when `deviceId` is null. Re-rendered when bindings change.
16880
- */
16881
- function useDeviceProxy(trpc, deviceId) {
16882
- const [binding, setBinding] = useState(null);
16883
- useEffect(() => {
16884
- if (deviceId === null) {
16885
- setBinding(null);
16886
- return;
16887
- }
16888
- let cancelled = false;
16889
- const refresh = async () => {
16890
- try {
16891
- const next = await trpc.deviceManager.getBindings.query({ deviceId });
16892
- if (!cancelled) setBinding(next);
16893
- } catch {
16894
- if (!cancelled) setBinding((prev) => prev);
16895
- }
16896
- };
16897
- refresh();
16898
- const sub = trpc.live?.onEvent.subscribe({ category: BINDING_CHANGED_CATEGORY }, { onData: (evt) => {
16899
- const src = evt.data?.source;
16900
- if (!src) {
16901
- refresh();
16902
- return;
16903
- }
16904
- if (src.type === "device" && src.id === deviceId) refresh();
16905
- } });
16906
- return () => {
16907
- cancelled = true;
16908
- sub?.unsubscribe();
16909
- };
16910
- }, [trpc, deviceId]);
16911
- return useMemo(() => {
16912
- if (!binding) return null;
16913
- return createDeviceProxy(trpc, binding);
16914
- }, [trpc, binding]);
16915
- }
16916
- /**
16917
- * Companion hook — reads a `SliceHandle` reactively, returning the
16918
- * current value and re-rendering on every push from the kernel
16919
- * mirror. Pass `dev?.state.battery` etc. as the handle.
16920
- *
16921
- * const dev = useDeviceProxy(trpc, deviceId)
16922
- * const battery = useDeviceStateSlice(dev?.state.battery)
16923
- *
16924
- * Why a hook (and not just `dev.state.battery.subscribe(...)` inline)?
16925
- * React doesn't observe external mutations on its own — a bare
16926
- * subscribe call inside a render would fire on every render (memory
16927
- * leak), wouldn't trigger a re-render on slice change, and wouldn't
16928
- * clean up at unmount. The hook bridges the imperative
16929
- * `(value, subscribe)` pair into React's declarative lifecycle via
16930
- * `useSyncExternalStore` (the canonical React 18 primitive for
16931
- * external stores — handles tearing in concurrent rendering and
16932
- * de-dups identical pushes).
16933
- */
16934
- function useDeviceStateSlice(handle) {
16935
- const subscribe = useCallback((notify) => {
16936
- if (!handle) return () => void 0;
16937
- return handle.subscribe(() => notify());
16938
- }, [handle]);
16939
- const getSnapshot = useCallback(() => handle?.value, [handle]);
16940
- return useSyncExternalStore(subscribe, getSnapshot, getSnapshot);
16941
- }
16942
- /**
16943
- * One-line combinator — collapse the common
16944
- * `useDeviceProxy + useDeviceStateSlice(dev?.state.<cap>)` pair into a
16945
- * single hook. The selector receives the live `DeviceProxy['state']`
16946
- * bag (typed against the codegen, so `s.battery` etc. autocomplete)
16947
- * and returns one slice handle. Returns the slice value, undefined
16948
- * while the binding resolves OR when the slice has no cached push yet.
16949
- *
16950
- * Idiomatic call-site:
16951
- *
16952
- * const battery = useDeviceState(trpc, deviceId, (s) => s.battery)
16953
- * const zones = useDeviceState(trpc, deviceId, (s) => s.zones)
16954
- *
16955
- * vs. the manual pair:
16956
- *
16957
- * const dev = useDeviceProxy(trpc, deviceId)
16958
- * const battery = useDeviceStateSlice(dev?.state.battery)
16959
- * const zones = useDeviceStateSlice(dev?.state.zones)
16960
- *
16961
- * Use the manual pair when:
16962
- * - you also need the proxy's cap method bag (`dev.zones?.addZone(...)`)
16963
- * - you want to share the proxy across multiple slice reads with a
16964
- * single binding fetch (the combinator calls useDeviceProxy
16965
- * internally, which dedups bindings via React Query in practice
16966
- * but spawns one extra subscription per call site)
16967
- *
16968
- * Use the combinator when reading just one slice — most common case.
16969
- */
16970
- function useDeviceState(trpc, deviceId, select) {
16971
- const dev = useDeviceProxy(trpc, deviceId);
16972
- return useDeviceStateSlice(dev ? select(dev.state) : void 0);
16973
- }
16974
- //#endregion
16975
17045
  //#region src/hooks/use-device-capability.ts
16976
17046
  function useDeviceCapability(options) {
16977
17047
  const dev = useDeviceProxy(options.trpc, options.deviceId);
@@ -51374,4 +51444,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-BvDy3x3k.js").t
51374
51444
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
51375
51445
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-PkYs077O.js").then((m) => ({ default: m.PrivacyMaskSettings })));
51376
51446
  //#endregion
51377
- 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, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, 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 };
51447
+ 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, useCameraGridLayoutApplyDeviceSettingsPatch, useCameraGridLayoutGetDeviceLiveContribution, useCameraGridLayoutGetDeviceSettingsContribution, useCameraGridLayoutGetLayout, useCameraGridLayoutSaveLayout, 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, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, 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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.2.175",
3
+ "version": "1.2.177",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",