@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.
- package/dist/composites/cap-settings/camera-grid-layout.d.ts +21 -1
- package/dist/generated/system-hooks.d.ts +10 -0
- package/dist/index.cjs +238 -163
- package/dist/index.js +234 -164
- package/package.json +1 -1
|
@@ -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
|
-
/**
|
|
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
|
-
|
|
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 (
|
|
16452
|
-
|
|
16453
|
-
|
|
16454
|
-
if (!
|
|
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
|
|
16549
|
-
|
|
16550
|
-
|
|
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
|
-
}, [
|
|
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
|
-
|
|
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
|
|
16567
|
-
|
|
16568
|
-
|
|
16569
|
-
|
|
16570
|
-
|
|
16571
|
-
|
|
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
|
-
|
|
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 (
|
|
16428
|
-
|
|
16429
|
-
|
|
16430
|
-
if (!
|
|
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
|
|
16525
|
-
|
|
16526
|
-
|
|
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
|
-
}, [
|
|
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
|
-
|
|
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
|
|
16543
|
-
|
|
16544
|
-
|
|
16545
|
-
|
|
16546
|
-
|
|
16547
|
-
|
|
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 };
|