@camstack/ui-library 1.2.210 → 1.2.212
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/battery-badge.d.ts +3 -1
- package/dist/composites/device-list/device-integration.d.ts +69 -0
- package/dist/composites/device-list/device-mode.d.ts +25 -5
- package/dist/composites/device-list/empty-state.d.ts +1 -1
- package/dist/composites/device-list/index.d.ts +3 -1
- package/dist/composites/device-list/table-layout.d.ts +3 -1
- package/dist/generated/system-hooks.d.ts +12 -0
- package/dist/hooks/use-device-battery.d.ts +8 -6
- package/dist/index.cjs +141 -62
- package/dist/index.js +135 -64
- package/package.json +1 -1
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
export interface BatteryStatusLike {
|
|
2
|
-
|
|
2
|
+
/** `null` means no reading has landed yet (cold seed) — NOT a flat 0 %
|
|
3
|
+
* (D315). Render "Unknown", never a red critical badge. */
|
|
4
|
+
readonly percentage: number | null;
|
|
3
5
|
readonly charging: 'dc' | 'solar' | 'none' | 'unknown';
|
|
4
6
|
readonly sleeping: boolean;
|
|
5
7
|
/** True for a binary LOW_BAT source with no real % — render "Normal"/"Low"
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* resolveDeviceIntegration — the ONE answer to "which integration does this
|
|
3
|
+
* device belong to".
|
|
4
|
+
*
|
|
5
|
+
* A device row carries two different ids:
|
|
6
|
+
* - `integrationId` — the integration that CREATED it (`IntegrationWithState.id`).
|
|
7
|
+
* - `addonId` — the addon that owns and SERVES it.
|
|
8
|
+
*
|
|
9
|
+
* They can differ. A composed device (D659) is created under the "Blocks"
|
|
10
|
+
* integration (`int_0024`, whose own `addonId` is `core-blocks`) but is
|
|
11
|
+
* served by the `composer` addon, so its row reads `addonId: 'composer'`.
|
|
12
|
+
* Resolving by `addonId` put it under no integration at all: the Devices
|
|
13
|
+
* filter, the Integration page's list, the device header and the orphan box
|
|
14
|
+
* each asked the question their own way, and every one of them got it wrong.
|
|
15
|
+
*
|
|
16
|
+
* The rule:
|
|
17
|
+
* 1. `integrationId` present ⇒ it is authoritative. The device belongs to
|
|
18
|
+
* the integration with that `id`, or — when no registered integration has
|
|
19
|
+
* it — to none (orphan), WHATEVER its `addonId` says.
|
|
20
|
+
* 2. No `integrationId` (legacy rows) ⇒ the `addonId` IS the integration
|
|
21
|
+
* link: the device belongs to the first integration whose `addonId`
|
|
22
|
+
* matches, or is orphan when none does.
|
|
23
|
+
* 3. A row that names neither is `unlinked` — it points at nothing, so it
|
|
24
|
+
* cannot be orphaned by a missing integration.
|
|
25
|
+
*
|
|
26
|
+
* And the load-bearing case: `integrations === null | undefined` means the
|
|
27
|
+
* integrations query has NOT ANSWERED. That is `unknown`, never `orphan` —
|
|
28
|
+
* an unanswered list is not an empty one (D315), and classifying against it
|
|
29
|
+
* branded every device orphan for seconds on a slow server (2026-08-18).
|
|
30
|
+
*/
|
|
31
|
+
/** The two fields of a device row the rule reads. */
|
|
32
|
+
export interface DeviceIntegrationLink {
|
|
33
|
+
readonly addonId?: string | null;
|
|
34
|
+
readonly integrationId?: string | null;
|
|
35
|
+
}
|
|
36
|
+
/** The two fields of an `integrations.list` row the rule reads. */
|
|
37
|
+
export interface DeviceIntegrationRef {
|
|
38
|
+
readonly id: string;
|
|
39
|
+
readonly addonId: string;
|
|
40
|
+
}
|
|
41
|
+
export type DeviceIntegrationResolution<I extends DeviceIntegrationRef = DeviceIntegrationRef> =
|
|
42
|
+
/** The device belongs to this registered integration. */
|
|
43
|
+
{
|
|
44
|
+
readonly kind: 'resolved';
|
|
45
|
+
readonly integration: I;
|
|
46
|
+
}
|
|
47
|
+
/** The device names an integration link that no registered integration answers. */
|
|
48
|
+
| {
|
|
49
|
+
readonly kind: 'orphan';
|
|
50
|
+
}
|
|
51
|
+
/** The device names no link at all (no `integrationId`, empty `addonId`). */
|
|
52
|
+
| {
|
|
53
|
+
readonly kind: 'unlinked';
|
|
54
|
+
}
|
|
55
|
+
/** The integrations query has not answered yet — nothing can be said. */
|
|
56
|
+
| {
|
|
57
|
+
readonly kind: 'unknown';
|
|
58
|
+
};
|
|
59
|
+
export type DeviceIntegrationResolver<I extends DeviceIntegrationRef = DeviceIntegrationRef> = (device: DeviceIntegrationLink) => DeviceIntegrationResolution<I>;
|
|
60
|
+
export declare function resolveDeviceIntegration<I extends DeviceIntegrationRef>(device: DeviceIntegrationLink,
|
|
61
|
+
/** The `integrations.list` answer, or `null`/`undefined` while unanswered. */
|
|
62
|
+
integrations: readonly I[] | null | undefined): DeviceIntegrationResolution<I>;
|
|
63
|
+
/**
|
|
64
|
+
* The rule itself, prepared once over a list for per-row use on a large
|
|
65
|
+
* fleet (two map lookups per row, not two scans). `resolveDeviceIntegration`
|
|
66
|
+
* is this, applied to one device; `<DeviceList integrationOf>` takes the
|
|
67
|
+
* returned resolver.
|
|
68
|
+
*/
|
|
69
|
+
export declare function deviceIntegrationResolver<I extends DeviceIntegrationRef>(integrations: readonly I[] | null | undefined): DeviceIntegrationResolver<I>;
|
|
@@ -3,11 +3,20 @@ import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
|
|
|
3
3
|
import { DeviceItemDevice, DeviceItemParent } from '../device-item/helpers';
|
|
4
4
|
import { TableContext } from './columns';
|
|
5
5
|
import { MultiSelectOption } from './multi-select';
|
|
6
|
-
|
|
6
|
+
import { DeviceIntegrationResolution, DeviceIntegrationResolver } from './device-integration';
|
|
7
|
+
/** One chip of the integration filter. `id` is the INTEGRATION id
|
|
8
|
+
* (`IntegrationWithState.id`), matched against `integrationOf(device)` —
|
|
9
|
+
* never a device's `addonId` (a composed device is served by `composer` but
|
|
10
|
+
* belongs to the "Blocks" integration, D659). */
|
|
11
|
+
export interface DeviceListIntegrationOption {
|
|
7
12
|
readonly id: string;
|
|
8
13
|
readonly name: string;
|
|
9
14
|
readonly icon?: ReactNode;
|
|
10
15
|
}
|
|
16
|
+
/** Kept as a source-compatible name for callers compiled against the old
|
|
17
|
+
* addon-keyed filter API. The values are integration ids now. */
|
|
18
|
+
export type DeviceListAddonOption = DeviceListIntegrationOption;
|
|
19
|
+
export type DeviceListIntegrationIconResolver = (device: DeviceItemDevice, integration: DeviceIntegrationResolution) => ReactNode | null;
|
|
11
20
|
export interface DeviceListDeviceProps {
|
|
12
21
|
/** Discriminant — omit (or 'devices') for the default registry-device list. */
|
|
13
22
|
readonly mode?: 'devices';
|
|
@@ -31,12 +40,23 @@ export interface DeviceListDeviceProps {
|
|
|
31
40
|
* icons stay identical.
|
|
32
41
|
*/
|
|
33
42
|
readonly filters?: {
|
|
34
|
-
|
|
43
|
+
/** Integration chips — ids are integration ids. Requires `integrationOf`. */
|
|
44
|
+
readonly integrations?: readonly DeviceListIntegrationOption[];
|
|
35
45
|
readonly typeOptions?: readonly MultiSelectOption[];
|
|
36
46
|
};
|
|
37
|
-
/**
|
|
38
|
-
|
|
39
|
-
|
|
47
|
+
/**
|
|
48
|
+
* Which integration a row belongs to — build it with
|
|
49
|
+
* `deviceIntegrationResolver(integrations)`, the one rule the whole UI
|
|
50
|
+
* answers that question with. Drives the integration filter
|
|
51
|
+
* (`filters.integrations`, `forceIntegrationId`) and is handed to
|
|
52
|
+
* `resolveIntegrationIcon`. Omitted ⇒ every row is `unknown`, so an
|
|
53
|
+
* integration filter matches nothing.
|
|
54
|
+
*/
|
|
55
|
+
readonly integrationOf?: DeviceIntegrationResolver;
|
|
56
|
+
/** Pre-applied integration filter (an integration id) — hides the chip group. */
|
|
57
|
+
readonly forceIntegrationId?: string;
|
|
58
|
+
/** The badge beside a row's name, given the row and its resolved integration. */
|
|
59
|
+
readonly resolveIntegrationIcon?: DeviceListIntegrationIconResolver;
|
|
40
60
|
readonly resolveParent?: (parentId: number) => DeviceItemParent | null;
|
|
41
61
|
readonly onNavigate?: (deviceId: number) => void;
|
|
42
62
|
readonly pageSize?: {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ReactNode } from 'react';
|
|
2
2
|
export interface EmptyStateProps {
|
|
3
|
-
readonly variant: 'nofilter' | 'filtered';
|
|
3
|
+
readonly variant: 'nofilter' | 'filtered' | 'pending';
|
|
4
4
|
readonly onClearFilters?: () => void;
|
|
5
5
|
}
|
|
6
6
|
export declare function DeviceListEmptyState({ variant, onClearFilters }: EmptyStateProps): ReactNode;
|
|
@@ -2,6 +2,8 @@ import { ReactNode } from 'react';
|
|
|
2
2
|
import { DeviceListDeviceProps } from './device-mode';
|
|
3
3
|
import { DeviceListGenericProps } from './generic-mode';
|
|
4
4
|
export { countableDevices } from './group';
|
|
5
|
+
export { resolveDeviceIntegration, deviceIntegrationResolver } from './device-integration';
|
|
6
|
+
export type { DeviceIntegrationLink, DeviceIntegrationRef, DeviceIntegrationResolution, DeviceIntegrationResolver, } from './device-integration';
|
|
5
7
|
export { fuzzyMatch, normalizeForSearch } from './fuzzy-match';
|
|
6
8
|
export { DEVICE_COLUMNS, columnsForContext, COLUMN_PRIORITY, COLUMN_BREAKPOINT_CLASS, } from './columns';
|
|
7
9
|
export type { DeviceColumnId, TableContext } from './columns';
|
|
@@ -9,7 +11,7 @@ export { nextSort, sortRows } from './sort';
|
|
|
9
11
|
export type { DeviceSort, SortDirection, SortableColumnId } from './sort';
|
|
10
12
|
export { hardwareLabel, metadataEntries, metadataString } from './hardware';
|
|
11
13
|
export { IconAction, type IconActionProps } from './icon-action';
|
|
12
|
-
export type { DeviceListAddonOption, DeviceListDeviceProps, DeviceListBatchActions, } from './device-mode';
|
|
14
|
+
export type { DeviceListAddonOption, DeviceListDeviceProps, DeviceListBatchActions, DeviceListIntegrationIconResolver, DeviceListIntegrationOption, } from './device-mode';
|
|
13
15
|
export type { DeviceListColumn, DeviceListGenericProps } from './generic-mode';
|
|
14
16
|
/**
|
|
15
17
|
* Default registry-device list, or a generic render-prop list (`mode:'generic'`).
|
|
@@ -13,7 +13,9 @@ interface DeviceRowsProps {
|
|
|
13
13
|
readonly rows: readonly DeviceItemDevice[];
|
|
14
14
|
readonly accessoriesByParent: ReadonlyMap<number, readonly DeviceItemDevice[]>;
|
|
15
15
|
readonly trpc: UseDeviceProxyTrpc;
|
|
16
|
-
|
|
16
|
+
/** The badge beside a row's name — already bound to the row's resolved
|
|
17
|
+
* integration by the device-mode wrapper. */
|
|
18
|
+
readonly resolveIntegrationIcon: ((device: DeviceItemDevice) => ReactNode | null) | null;
|
|
17
19
|
readonly resolveParent: ((parentId: number) => DeviceItemParent | null) | null;
|
|
18
20
|
readonly onNavigate: ((deviceId: number) => void) | null;
|
|
19
21
|
readonly renderRowAction: ((device: DeviceItemDevice) => ReactNode) | null;
|
|
@@ -335,6 +335,8 @@ export declare const useCoreBlocksUpdateComposition: typeof trpc.coreBlocks.upda
|
|
|
335
335
|
export declare const useCoreBlocksGetComposition: typeof trpc.coreBlocks.getComposition.useQuery;
|
|
336
336
|
/** Generated alias around `trpc.coreBlocks.listCompositions.useQuery`. */
|
|
337
337
|
export declare const useCoreBlocksListCompositions: typeof trpc.coreBlocks.listCompositions.useQuery;
|
|
338
|
+
/** Generated alias around `trpc.coreBlocks.getCustomization.useQuery`. */
|
|
339
|
+
export declare const useCoreBlocksGetCustomization: typeof trpc.coreBlocks.getCustomization.useQuery;
|
|
338
340
|
/** Generated alias around `trpc.coreBlocks.validateComposition.useMutation`. */
|
|
339
341
|
export declare const useCoreBlocksValidateComposition: typeof trpc.coreBlocks.validateComposition.useMutation;
|
|
340
342
|
/** Generated alias around `trpc.cover.open.useMutation`. */
|
|
@@ -669,6 +671,16 @@ export declare const useDeviceStateGetCapSlice: typeof trpc.deviceState.getCapSl
|
|
|
669
671
|
export declare const useDeviceStateGetAllSnapshots: typeof trpc.deviceState.getAllSnapshots.useQuery;
|
|
670
672
|
/** Generated alias around `trpc.deviceState.setCapSlice.useMutation`. */
|
|
671
673
|
export declare const useDeviceStateSetCapSlice: typeof trpc.deviceState.setCapSlice.useMutation;
|
|
674
|
+
/** Generated alias around `trpc.deviceState.claimFields.useMutation`. */
|
|
675
|
+
export declare const useDeviceStateClaimFields: typeof trpc.deviceState.claimFields.useMutation;
|
|
676
|
+
/** Generated alias around `trpc.deviceState.patchOwnedFields.useMutation`. */
|
|
677
|
+
export declare const useDeviceStatePatchOwnedFields: typeof trpc.deviceState.patchOwnedFields.useMutation;
|
|
678
|
+
/** Generated alias around `trpc.deviceState.releaseClaim.useMutation`. */
|
|
679
|
+
export declare const useDeviceStateReleaseClaim: typeof trpc.deviceState.releaseClaim.useMutation;
|
|
680
|
+
/** Generated alias around `trpc.deviceState.listClaims.useQuery`. */
|
|
681
|
+
export declare const useDeviceStateListClaims: typeof trpc.deviceState.listClaims.useQuery;
|
|
682
|
+
/** Generated alias around `trpc.deviceState.getNativeCapSlice.useQuery`. */
|
|
683
|
+
export declare const useDeviceStateGetNativeCapSlice: typeof trpc.deviceState.getNativeCapSlice.useQuery;
|
|
672
684
|
/** Generated alias around `trpc.deviceStatus.getStatus.useQuery`. */
|
|
673
685
|
export declare const useDeviceStatusGetStatus: typeof trpc.deviceStatus.getStatus.useQuery;
|
|
674
686
|
/** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { BatteryStatus } from '@camstack/types';
|
|
1
2
|
import { UseDeviceProxyTrpc } from './use-device-proxy';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
/**
|
|
4
|
+
* The cap's own runtime-state shape (`z.infer<BatteryStatusSchema>`) —
|
|
5
|
+
* `percentage` is `number | null`: `null` means no reading has landed yet
|
|
6
|
+
* (D315). Re-exported so call sites don't have to reach into
|
|
7
|
+
* `@camstack/types` themselves.
|
|
8
|
+
*/
|
|
9
|
+
export type { BatteryStatus };
|
|
8
10
|
/**
|
|
9
11
|
* Backwards-compatible alias for the trpc shape — historically the
|
|
10
12
|
* hook took its own narrow contract; the proxy generalisation
|
package/dist/index.cjs
CHANGED
|
@@ -6854,6 +6854,8 @@ var useCoreBlocksUpdateComposition = trpc.coreBlocks.updateComposition.useMutati
|
|
|
6854
6854
|
var useCoreBlocksGetComposition = trpc.coreBlocks.getComposition.useQuery;
|
|
6855
6855
|
/** Generated alias around `trpc.coreBlocks.listCompositions.useQuery`. */
|
|
6856
6856
|
var useCoreBlocksListCompositions = trpc.coreBlocks.listCompositions.useQuery;
|
|
6857
|
+
/** Generated alias around `trpc.coreBlocks.getCustomization.useQuery`. */
|
|
6858
|
+
var useCoreBlocksGetCustomization = trpc.coreBlocks.getCustomization.useQuery;
|
|
6857
6859
|
/** Generated alias around `trpc.coreBlocks.validateComposition.useMutation`. */
|
|
6858
6860
|
var useCoreBlocksValidateComposition = trpc.coreBlocks.validateComposition.useMutation;
|
|
6859
6861
|
/** Generated alias around `trpc.cover.open.useMutation`. */
|
|
@@ -7188,6 +7190,16 @@ var useDeviceStateGetCapSlice = trpc.deviceState.getCapSlice.useQuery;
|
|
|
7188
7190
|
var useDeviceStateGetAllSnapshots = trpc.deviceState.getAllSnapshots.useQuery;
|
|
7189
7191
|
/** Generated alias around `trpc.deviceState.setCapSlice.useMutation`. */
|
|
7190
7192
|
var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
|
|
7193
|
+
/** Generated alias around `trpc.deviceState.claimFields.useMutation`. */
|
|
7194
|
+
var useDeviceStateClaimFields = trpc.deviceState.claimFields.useMutation;
|
|
7195
|
+
/** Generated alias around `trpc.deviceState.patchOwnedFields.useMutation`. */
|
|
7196
|
+
var useDeviceStatePatchOwnedFields = trpc.deviceState.patchOwnedFields.useMutation;
|
|
7197
|
+
/** Generated alias around `trpc.deviceState.releaseClaim.useMutation`. */
|
|
7198
|
+
var useDeviceStateReleaseClaim = trpc.deviceState.releaseClaim.useMutation;
|
|
7199
|
+
/** Generated alias around `trpc.deviceState.listClaims.useQuery`. */
|
|
7200
|
+
var useDeviceStateListClaims = trpc.deviceState.listClaims.useQuery;
|
|
7201
|
+
/** Generated alias around `trpc.deviceState.getNativeCapSlice.useQuery`. */
|
|
7202
|
+
var useDeviceStateGetNativeCapSlice = trpc.deviceState.getNativeCapSlice.useQuery;
|
|
7191
7203
|
/** Generated alias around `trpc.deviceStatus.getStatus.useQuery`. */
|
|
7192
7204
|
var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
|
|
7193
7205
|
/** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
|
|
@@ -18905,12 +18917,28 @@ function useDeviceCapability(options) {
|
|
|
18905
18917
|
* Reads the cap's pushed runtime-state slice via `useDeviceCapability`
|
|
18906
18918
|
* and renders one row per item: a fill bar + percentage when `level` is
|
|
18907
18919
|
* known, else an `ok`/`replace` status pill when `status` is known, else
|
|
18908
|
-
* a muted em-dash.
|
|
18909
|
-
*
|
|
18910
|
-
*
|
|
18920
|
+
* a muted em-dash. When a provider also reports `remaining` (a count in
|
|
18921
|
+
* days/hours/cycles), its value is shown alongside — `null` renders a
|
|
18922
|
+
* muted em-dash, never a fake `0` (D393); absent `remaining` renders
|
|
18923
|
+
* nothing, exactly as before this field existed. A per-item "Replaced"
|
|
18924
|
+
* button calls `cap.reset` when the item is `resettable`. The cap is
|
|
18925
|
+
* inert until a provider sets items — an empty list renders a muted
|
|
18926
|
+
* placeholder.
|
|
18911
18927
|
*/
|
|
18912
18928
|
/** Remaining-life % at or below this is treated as a warning. */
|
|
18913
18929
|
var LOW_LEVEL_THRESHOLD = 15;
|
|
18930
|
+
/** [singular, plural] display label per `remaining` unit. */
|
|
18931
|
+
var UNIT_LABEL = {
|
|
18932
|
+
days: ["day", "days"],
|
|
18933
|
+
hours: ["hour", "hours"],
|
|
18934
|
+
cycles: ["cycle", "cycles"]
|
|
18935
|
+
};
|
|
18936
|
+
/** `value` null = unknown (D393) — renders an em-dash, never a fake `0`. */
|
|
18937
|
+
function formatRemaining(r) {
|
|
18938
|
+
if (r.value === null) return "—";
|
|
18939
|
+
const [singular, plural] = UNIT_LABEL[r.unit];
|
|
18940
|
+
return `${r.value} ${r.value === 1 ? singular : plural}`;
|
|
18941
|
+
}
|
|
18914
18942
|
function isLowOrReplace(item) {
|
|
18915
18943
|
return item.status === "replace" || item.level !== null && item.level <= LOW_LEVEL_THRESHOLD;
|
|
18916
18944
|
}
|
|
@@ -18964,6 +18992,10 @@ function ConsumableRow({ item, busy, canReset, onReset }) {
|
|
|
18964
18992
|
className: "text-[10px] text-foreground-subtle",
|
|
18965
18993
|
children: "—"
|
|
18966
18994
|
}),
|
|
18995
|
+
item.remaining && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
18996
|
+
className: "text-[10px] font-medium tabular-nums text-foreground-subtle",
|
|
18997
|
+
children: formatRemaining(item.remaining)
|
|
18998
|
+
}),
|
|
18967
18999
|
item.lastResetAt !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
18968
19000
|
className: "text-[10px] text-foreground-subtle",
|
|
18969
19001
|
children: ["Replaced ", formatResetAt(item.lastResetAt)]
|
|
@@ -21393,8 +21425,9 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
|
|
|
21393
21425
|
* "Linked devices" and "Virtual doorbell" sections it replaced were retired
|
|
21394
21426
|
* once the live read matched them on every measured camera (D655).
|
|
21395
21427
|
*
|
|
21396
|
-
*
|
|
21397
|
-
*
|
|
21428
|
+
* Every slot is an ASSOCIATION, so every card is a device multiselect. A
|
|
21429
|
+
* device that GAINS a capability from other devices is a composition, not a
|
|
21430
|
+
* slot, and is authored there (D663, amends D648).
|
|
21398
21431
|
*
|
|
21399
21432
|
* Absence is claimed only from an answer (D315): pending, failed and empty
|
|
21400
21433
|
* are three different sentences, and an owner that could not answer is shown
|
|
@@ -21430,28 +21463,10 @@ function ExtensionsPanel({ deviceId }) {
|
|
|
21430
21463
|
className: "text-[11px] text-foreground-subtle italic",
|
|
21431
21464
|
children: "No extensions are offered on this device."
|
|
21432
21465
|
}),
|
|
21433
|
-
view.kind === "rows" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [view.slots.map((row) =>
|
|
21466
|
+
view.kind === "rows" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [view.slots.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AssociationSlotCard, {
|
|
21434
21467
|
deviceId,
|
|
21435
21468
|
row,
|
|
21436
21469
|
onSaved: () => void query.refetch()
|
|
21437
|
-
}, row.slotRef) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21438
|
-
className: "rounded-md border border-border/40 p-3",
|
|
21439
|
-
children: [
|
|
21440
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
21441
|
-
className: "text-xs font-semibold text-foreground",
|
|
21442
|
-
children: _camstack_types.EXTENSION_SLOTS[row.slot].descriptor.label
|
|
21443
|
-
}),
|
|
21444
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
21445
|
-
className: "text-[10px] text-foreground-subtle",
|
|
21446
|
-
children: [
|
|
21447
|
-
row.enabled === false ? "Off" : "On",
|
|
21448
|
-
" — ",
|
|
21449
|
-
row.authority,
|
|
21450
|
-
". Editing it needs a newer admin."
|
|
21451
|
-
]
|
|
21452
|
-
}),
|
|
21453
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotSourceList, { sources: row.sources })
|
|
21454
|
-
]
|
|
21455
21470
|
}, row.slotRef)), view.unreachable.map((row) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21456
21471
|
role: "alert",
|
|
21457
21472
|
className: "flex flex-col gap-1 rounded-md border border-warning/40 bg-warning/5 p-3",
|
|
@@ -29997,8 +30012,14 @@ function levelColor(percentage, charging) {
|
|
|
29997
30012
|
}
|
|
29998
30013
|
function BatteryBadge({ status, variant = "compact", className }) {
|
|
29999
30014
|
if (!status) return null;
|
|
30000
|
-
|
|
30001
|
-
|
|
30015
|
+
const { percentage, charging, sleeping, binary } = status;
|
|
30016
|
+
if (percentage === null) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
30017
|
+
className: cn("inline-flex items-center gap-1 text-[10px] font-medium text-foreground-subtle", className),
|
|
30018
|
+
title: "Battery: unknown",
|
|
30019
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Battery, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: "Unknown" })]
|
|
30020
|
+
});
|
|
30021
|
+
if (binary === true) {
|
|
30022
|
+
const low = percentage < BINARY_LOW_THRESHOLD;
|
|
30002
30023
|
const BinIcon = low ? BatteryWarning : BatteryFull;
|
|
30003
30024
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
30004
30025
|
className: cn("inline-flex items-center gap-1 text-[10px] font-medium", low ? "text-rose-400" : "text-foreground-subtle", className),
|
|
@@ -30006,21 +30027,21 @@ function BatteryBadge({ status, variant = "compact", className }) {
|
|
|
30006
30027
|
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(BinIcon, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: low ? "Low" : "Normal" })]
|
|
30007
30028
|
});
|
|
30008
30029
|
}
|
|
30009
|
-
const Icon = pickIcon(
|
|
30010
|
-
const color = levelColor(
|
|
30011
|
-
const ChargingGlyph =
|
|
30012
|
-
const showSleeping =
|
|
30030
|
+
const Icon = pickIcon(percentage);
|
|
30031
|
+
const color = levelColor(percentage, charging);
|
|
30032
|
+
const ChargingGlyph = charging === "solar" ? Sun : charging === "dc" ? Plug : null;
|
|
30033
|
+
const showSleeping = sleeping;
|
|
30013
30034
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
30014
30035
|
className: cn("inline-flex items-center gap-1 text-[10px] font-medium", color, className),
|
|
30015
|
-
title: `Battery: ${Math.round(
|
|
30036
|
+
title: `Battery: ${Math.round(percentage)}%` + (isPowered(charging) ? ` · charging (${charging})` : "") + (sleeping ? " · sleeping" : ""),
|
|
30016
30037
|
children: [
|
|
30017
30038
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon, { className: "h-3.5 w-3.5" }),
|
|
30018
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [Math.round(
|
|
30039
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [Math.round(percentage), "%"] }),
|
|
30019
30040
|
ChargingGlyph && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChargingGlyph, { className: "h-3 w-3" }),
|
|
30020
30041
|
showSleeping && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Moon, { className: "h-3 w-3 text-blue-300" }),
|
|
30021
|
-
variant === "full" && isPowered(
|
|
30042
|
+
variant === "full" && isPowered(charging) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
30022
30043
|
className: "text-foreground-subtle",
|
|
30023
|
-
children:
|
|
30044
|
+
children: charging
|
|
30024
30045
|
})
|
|
30025
30046
|
]
|
|
30026
30047
|
});
|
|
@@ -35968,9 +35989,11 @@ function getStyle(category, data) {
|
|
|
35968
35989
|
}
|
|
35969
35990
|
return base;
|
|
35970
35991
|
}
|
|
35971
|
-
/** Every
|
|
35972
|
-
*
|
|
35973
|
-
|
|
35992
|
+
/** Every PUBLIC EventCategory value, sorted alphabetically — the owner-only
|
|
35993
|
+
* categories the routers refuse (D224) are not offered, a filter that can
|
|
35994
|
+
* never match is not a filter. Computed once at module load — drives the
|
|
35995
|
+
* multiselect popover. */
|
|
35996
|
+
var ALL_EVENT_CATEGORIES = Object.freeze([...(0, _camstack_types.publicEventCategories)()]);
|
|
35974
35997
|
/**
|
|
35975
35998
|
* Categories that are emitted at high frequency (~1 Hz per camera /
|
|
35976
35999
|
* per node / per engine) and pollute the live events tab without
|
|
@@ -49101,19 +49124,6 @@ function DeviceItemHeader({ device, variant, flags, parent, integrationIcon, has
|
|
|
49101
49124
|
}
|
|
49102
49125
|
//#endregion
|
|
49103
49126
|
//#region src/hooks/use-device-battery.ts
|
|
49104
|
-
/**
|
|
49105
|
-
* useDeviceBattery — battery status for a device.
|
|
49106
|
-
*
|
|
49107
|
-
* Thin wrapper over the `useDeviceState` combinator, which itself
|
|
49108
|
-
* wraps `useDeviceProxy + useDeviceStateSlice(dev?.state.battery)`.
|
|
49109
|
-
* The kernel runtime-state mirror keeps the slice value warm — one
|
|
49110
|
-
* initial fetch on first subscribe, then push updates on every
|
|
49111
|
-
* `setCapSlice` for the battery slice. No manual event subscription,
|
|
49112
|
-
* no parallel `getStatus` polling.
|
|
49113
|
-
*
|
|
49114
|
-
* Returns `null` when no provider has emitted yet (non-battery
|
|
49115
|
-
* camera, or initial fetch hasn't returned).
|
|
49116
|
-
*/
|
|
49117
49127
|
function useDeviceBattery(trpc, deviceId) {
|
|
49118
49128
|
return useDeviceState(trpc, deviceId, (s) => s.battery) ?? null;
|
|
49119
49129
|
}
|
|
@@ -50089,6 +50099,11 @@ function IntegrationMultiSelect({ addons, selected, onChange }) {
|
|
|
50089
50099
|
}
|
|
50090
50100
|
//#endregion
|
|
50091
50101
|
//#region src/composites/device-list/empty-state.tsx
|
|
50102
|
+
var EMPTY_STATE_TEXT = {
|
|
50103
|
+
nofilter: "No devices yet",
|
|
50104
|
+
filtered: "No devices match the current filters",
|
|
50105
|
+
pending: "Loading integrations…"
|
|
50106
|
+
};
|
|
50092
50107
|
function DeviceListEmptyState({ variant, onClearFilters }) {
|
|
50093
50108
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50094
50109
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
@@ -50096,7 +50111,7 @@ function DeviceListEmptyState({ variant, onClearFilters }) {
|
|
|
50096
50111
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Inbox, { className: "h-8 w-8 text-foreground-subtle/40 mb-3" }),
|
|
50097
50112
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
50098
50113
|
className: "text-sm font-medium text-foreground-subtle",
|
|
50099
|
-
children: variant
|
|
50114
|
+
children: EMPTY_STATE_TEXT[variant]
|
|
50100
50115
|
}),
|
|
50101
50116
|
variant === "filtered" && onClearFilters && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
50102
50117
|
type: "button",
|
|
@@ -50347,7 +50362,7 @@ function TableLayout({ rows, accessoriesByParent, expandedParents, onToggleExpan
|
|
|
50347
50362
|
expanded: expandedParents.has(d.id),
|
|
50348
50363
|
onToggleExpand: () => onToggleExpand(d.id),
|
|
50349
50364
|
trpc,
|
|
50350
|
-
integrationIcon: showIcon ? resolveIntegrationIcon?.(d
|
|
50365
|
+
integrationIcon: showIcon ? resolveIntegrationIcon?.(d) ?? null : null,
|
|
50351
50366
|
showType,
|
|
50352
50367
|
showManufacturer,
|
|
50353
50368
|
showFeatures,
|
|
@@ -50563,7 +50578,7 @@ var DEFAULT_PAGE_SIZE = {
|
|
|
50563
50578
|
table: 50
|
|
50564
50579
|
};
|
|
50565
50580
|
function DeviceModeList(props) {
|
|
50566
|
-
const { devices, trpc, context = "devices", filters,
|
|
50581
|
+
const { devices, trpc, context = "devices", filters, forceIntegrationId, integrationOf, resolveIntegrationIcon, resolveParent, onNavigate, pageSize = DEFAULT_PAGE_SIZE, urlScope = "root", lsKey = urlScope === "root" ? "devices" : "integrations:nested", renderRowAction, onDeleteDevice, selectable = false, selectedIds, onSelectionChange, batchActions } = props;
|
|
50567
50582
|
const [batchActive, setBatchActive] = (0, react$1.useState)(false);
|
|
50568
50583
|
const [internalSelected, setInternalSelected] = (0, react$1.useState)(/* @__PURE__ */ new Set());
|
|
50569
50584
|
const activeSelected = selectedIds ?? internalSelected;
|
|
@@ -50600,7 +50615,8 @@ function DeviceModeList(props) {
|
|
|
50600
50615
|
(0, react$1.useEffect)(() => {
|
|
50601
50616
|
if (debouncedSearch !== url.state.q) url.setQ(debouncedSearch);
|
|
50602
50617
|
}, [debouncedSearch]);
|
|
50603
|
-
const effectiveAddons = (0, react$1.useMemo)(() =>
|
|
50618
|
+
const effectiveAddons = (0, react$1.useMemo)(() => forceIntegrationId !== void 0 ? [forceIntegrationId] : url.state.addons, [forceIntegrationId, url.state.addons]);
|
|
50619
|
+
const integrationOfRow = (0, react$1.useCallback)((device) => integrationOf !== void 0 ? integrationOf(device) : { kind: "unknown" }, [integrationOf]);
|
|
50604
50620
|
const childrenByParent = (0, react$1.useMemo)(() => {
|
|
50605
50621
|
const map = /* @__PURE__ */ new Map();
|
|
50606
50622
|
for (const d of devices) {
|
|
@@ -50616,7 +50632,7 @@ function DeviceModeList(props) {
|
|
|
50616
50632
|
const addonSet = effectiveAddons.length > 0 ? new Set(effectiveAddons) : null;
|
|
50617
50633
|
const typeSet = url.state.types.length > 0 ? new Set(url.state.types) : null;
|
|
50618
50634
|
return devices.filter((d) => {
|
|
50619
|
-
if (addonSet && !
|
|
50635
|
+
if (addonSet && !belongsToAny(integrationOfRow(d), addonSet)) return false;
|
|
50620
50636
|
if (typeSet && !typeSet.has(effectiveType(d, childrenByParent.get(d.id)))) return false;
|
|
50621
50637
|
if (q.trim() !== "" && !fuzzyMatch(q, d.name) && !fuzzyMatch(q, d.stableId)) return false;
|
|
50622
50638
|
return true;
|
|
@@ -50625,10 +50641,12 @@ function DeviceModeList(props) {
|
|
|
50625
50641
|
devices,
|
|
50626
50642
|
childrenByParent,
|
|
50627
50643
|
effectiveAddons,
|
|
50644
|
+
integrationOfRow,
|
|
50628
50645
|
url.state.types,
|
|
50629
50646
|
url.state.q
|
|
50630
50647
|
]);
|
|
50631
50648
|
const grouped = (0, react$1.useMemo)(() => groupTopLevelAndAccessories(filtered), [filtered]);
|
|
50649
|
+
const rowIntegrationIcon = (0, react$1.useMemo)(() => resolveIntegrationIcon === void 0 ? null : (d) => resolveIntegrationIcon(d, integrationOfRow(d)), [resolveIntegrationIcon, integrationOfRow]);
|
|
50632
50650
|
const sortedTopLevel = (0, react$1.useMemo)(() => sortRows(grouped.topLevel, sort), [grouped.topLevel, sort]);
|
|
50633
50651
|
const [openParents, setOpenParents] = (0, react$1.useState)(() => /* @__PURE__ */ new Set());
|
|
50634
50652
|
const toggleParent = (0, react$1.useCallback)((id) => {
|
|
@@ -50650,6 +50668,11 @@ function DeviceModeList(props) {
|
|
|
50650
50668
|
useDeviceListRealtimeSync();
|
|
50651
50669
|
const isFiltered = effectiveAddons.length > 0 || url.state.types.length > 0 || url.state.q !== "";
|
|
50652
50670
|
const isEmpty = totalItems === 0;
|
|
50671
|
+
const integrationPending = (0, react$1.useMemo)(() => effectiveAddons.length > 0 && devices.some((d) => integrationOfRow(d).kind === "unknown"), [
|
|
50672
|
+
effectiveAddons,
|
|
50673
|
+
devices,
|
|
50674
|
+
integrationOfRow
|
|
50675
|
+
]);
|
|
50653
50676
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50654
50677
|
className: "flex flex-col gap-3",
|
|
50655
50678
|
children: [
|
|
@@ -50659,7 +50682,7 @@ function DeviceModeList(props) {
|
|
|
50659
50682
|
typeOptions: typeFilterOptions,
|
|
50660
50683
|
selectedTypes: url.state.types,
|
|
50661
50684
|
onTypesChange: url.setTypes,
|
|
50662
|
-
addons: filters?.
|
|
50685
|
+
addons: filters?.integrations,
|
|
50663
50686
|
selectedAddons: url.state.addons,
|
|
50664
50687
|
query: url.state.q,
|
|
50665
50688
|
onClearFilters: () => {
|
|
@@ -50667,7 +50690,7 @@ function DeviceModeList(props) {
|
|
|
50667
50690
|
url.clearFilters();
|
|
50668
50691
|
},
|
|
50669
50692
|
onAddonsChange: url.setAddons,
|
|
50670
|
-
hideAddons:
|
|
50693
|
+
hideAddons: forceIntegrationId !== void 0
|
|
50671
50694
|
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
50672
50695
|
className: "flex items-center gap-2",
|
|
50673
50696
|
children: [batchActions !== void 0 && (batchActive ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
|
|
@@ -50701,8 +50724,8 @@ function DeviceModeList(props) {
|
|
|
50701
50724
|
enable: batchActions.enable
|
|
50702
50725
|
}),
|
|
50703
50726
|
isEmpty ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DeviceListEmptyState, {
|
|
50704
|
-
variant: isFiltered ? "filtered" : "nofilter",
|
|
50705
|
-
onClearFilters: isFiltered ? url.clearFilters : void 0
|
|
50727
|
+
variant: integrationPending ? "pending" : isFiltered ? "filtered" : "nofilter",
|
|
50728
|
+
onClearFilters: isFiltered && !integrationPending ? url.clearFilters : void 0
|
|
50706
50729
|
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ContainerChildrenProvider, {
|
|
50707
50730
|
value: grouped.accessoriesByParent,
|
|
50708
50731
|
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TableLayout, {
|
|
@@ -50715,7 +50738,7 @@ function DeviceModeList(props) {
|
|
|
50715
50738
|
onSort,
|
|
50716
50739
|
devices: filtered,
|
|
50717
50740
|
trpc,
|
|
50718
|
-
resolveIntegrationIcon:
|
|
50741
|
+
resolveIntegrationIcon: rowIntegrationIcon,
|
|
50719
50742
|
resolveParent: resolveParent ?? null,
|
|
50720
50743
|
onNavigate: onNavigate ?? null,
|
|
50721
50744
|
renderRowAction: renderRowAction ?? null,
|
|
@@ -50759,7 +50782,7 @@ function DeviceModeList(props) {
|
|
|
50759
50782
|
onPageChange: url.setPage
|
|
50760
50783
|
})]
|
|
50761
50784
|
}),
|
|
50762
|
-
|
|
50785
|
+
forceIntegrationId === void 0 && isFiltered && totalItems > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
|
|
50763
50786
|
className: "text-[11px] text-foreground-subtle",
|
|
50764
50787
|
children: [
|
|
50765
50788
|
"Showing ",
|
|
@@ -50773,7 +50796,7 @@ function DeviceModeList(props) {
|
|
|
50773
50796
|
" ",
|
|
50774
50797
|
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("strong", {
|
|
50775
50798
|
className: "text-primary",
|
|
50776
|
-
children: effectiveAddons.map((id) => filters?.
|
|
50799
|
+
children: effectiveAddons.map((id) => filters?.integrations?.find((a) => a.id === id)?.name ?? id).join(", ")
|
|
50777
50800
|
})
|
|
50778
50801
|
] })
|
|
50779
50802
|
]
|
|
@@ -50781,6 +50804,14 @@ function DeviceModeList(props) {
|
|
|
50781
50804
|
]
|
|
50782
50805
|
});
|
|
50783
50806
|
}
|
|
50807
|
+
/**
|
|
50808
|
+
* A row matches an integration filter only when it RESOLVED to one of the
|
|
50809
|
+
* picked integrations. `unknown` (integrations not answered yet), `orphan`
|
|
50810
|
+
* and `unlinked` rows belong to none of them.
|
|
50811
|
+
*/
|
|
50812
|
+
function belongsToAny(resolution, integrationIds) {
|
|
50813
|
+
return resolution.kind === "resolved" && integrationIds.has(resolution.integration.id);
|
|
50814
|
+
}
|
|
50784
50815
|
function useDeviceListRealtimeSync() {
|
|
50785
50816
|
(0, _tanstack_react_query.useQueryClient)();
|
|
50786
50817
|
}
|
|
@@ -50936,6 +50967,46 @@ function GenericModeList(props) {
|
|
|
50936
50967
|
});
|
|
50937
50968
|
}
|
|
50938
50969
|
//#endregion
|
|
50970
|
+
//#region src/composites/device-list/device-integration.ts
|
|
50971
|
+
function nonEmpty(value) {
|
|
50972
|
+
return typeof value === "string" && value.length > 0;
|
|
50973
|
+
}
|
|
50974
|
+
function resolveDeviceIntegration(device, integrations) {
|
|
50975
|
+
return deviceIntegrationResolver(integrations)(device);
|
|
50976
|
+
}
|
|
50977
|
+
/**
|
|
50978
|
+
* The rule itself, prepared once over a list for per-row use on a large
|
|
50979
|
+
* fleet (two map lookups per row, not two scans). `resolveDeviceIntegration`
|
|
50980
|
+
* is this, applied to one device; `<DeviceList integrationOf>` takes the
|
|
50981
|
+
* returned resolver.
|
|
50982
|
+
*/
|
|
50983
|
+
function deviceIntegrationResolver(integrations) {
|
|
50984
|
+
if (integrations === null || integrations === void 0) return () => ({ kind: "unknown" });
|
|
50985
|
+
const byId = /* @__PURE__ */ new Map();
|
|
50986
|
+
const byAddon = /* @__PURE__ */ new Map();
|
|
50987
|
+
for (const i of integrations) {
|
|
50988
|
+
if (!byId.has(i.id)) byId.set(i.id, i);
|
|
50989
|
+
if (!byAddon.has(i.addonId)) byAddon.set(i.addonId, i);
|
|
50990
|
+
}
|
|
50991
|
+
return (device) => {
|
|
50992
|
+
if (nonEmpty(device.integrationId)) {
|
|
50993
|
+
const hit = byId.get(device.integrationId);
|
|
50994
|
+
return hit !== void 0 ? {
|
|
50995
|
+
kind: "resolved",
|
|
50996
|
+
integration: hit
|
|
50997
|
+
} : { kind: "orphan" };
|
|
50998
|
+
}
|
|
50999
|
+
if (nonEmpty(device.addonId)) {
|
|
51000
|
+
const hit = byAddon.get(device.addonId);
|
|
51001
|
+
return hit !== void 0 ? {
|
|
51002
|
+
kind: "resolved",
|
|
51003
|
+
integration: hit
|
|
51004
|
+
} : { kind: "orphan" };
|
|
51005
|
+
}
|
|
51006
|
+
return { kind: "unlinked" };
|
|
51007
|
+
};
|
|
51008
|
+
}
|
|
51009
|
+
//#endregion
|
|
50939
51010
|
//#region src/composites/device-list/index.tsx
|
|
50940
51011
|
/**
|
|
50941
51012
|
* Dispatcher: default registry-device list, or a generic render-prop list when
|
|
@@ -56890,6 +56961,7 @@ exports.defaultTheme = require_theme_index.defaultTheme$1;
|
|
|
56890
56961
|
exports.deriveDeviceKind = deriveDeviceKind;
|
|
56891
56962
|
exports.deriveWebrtcDebugStats = deriveWebrtcDebugStats;
|
|
56892
56963
|
exports.describeDeviceSelector = describeDeviceSelector;
|
|
56964
|
+
exports.deviceIntegrationResolver = deviceIntegrationResolver;
|
|
56893
56965
|
exports.deviceMatchesFilter = deviceMatchesFilter;
|
|
56894
56966
|
exports.deviceOptionLabel = deviceOptionLabel;
|
|
56895
56967
|
exports.deviceRoleMeta = deviceRoleMeta;
|
|
@@ -56947,6 +57019,7 @@ exports.resetHubMountForTests = resetHubMountForTests;
|
|
|
56947
57019
|
exports.resolveContainerPrimary = resolveContainerPrimary;
|
|
56948
57020
|
exports.resolveControlAlign = resolveControlAlign;
|
|
56949
57021
|
exports.resolveDeviceControl = resolveDeviceControl;
|
|
57022
|
+
exports.resolveDeviceIntegration = resolveDeviceIntegration;
|
|
56950
57023
|
exports.resolveDisplayIcon = resolveDisplayIcon;
|
|
56951
57024
|
exports.resolveEffectiveDefaultModel = resolveEffectiveDefaultModel;
|
|
56952
57025
|
exports.resolveEffectiveStepModel = resolveEffectiveStepModel;
|
|
@@ -57146,6 +57219,7 @@ exports.useCoreBlocksCreateComposition = useCoreBlocksCreateComposition;
|
|
|
57146
57219
|
exports.useCoreBlocksDelete = useCoreBlocksDelete;
|
|
57147
57220
|
exports.useCoreBlocksGet = useCoreBlocksGet;
|
|
57148
57221
|
exports.useCoreBlocksGetComposition = useCoreBlocksGetComposition;
|
|
57222
|
+
exports.useCoreBlocksGetCustomization = useCoreBlocksGetCustomization;
|
|
57149
57223
|
exports.useCoreBlocksGetTypeDefs = useCoreBlocksGetTypeDefs;
|
|
57150
57224
|
exports.useCoreBlocksList = useCoreBlocksList;
|
|
57151
57225
|
exports.useCoreBlocksListCompositions = useCoreBlocksListCompositions;
|
|
@@ -57336,9 +57410,14 @@ exports.useDeviceSnapshot = useDeviceSnapshot;
|
|
|
57336
57410
|
exports.useDeviceSnapshotImage = useDeviceSnapshotImage;
|
|
57337
57411
|
exports.useDeviceSnapshotImage$1 = useDeviceSnapshotImage;
|
|
57338
57412
|
exports.useDeviceState = useDeviceState;
|
|
57413
|
+
exports.useDeviceStateClaimFields = useDeviceStateClaimFields;
|
|
57339
57414
|
exports.useDeviceStateGetAllSnapshots = useDeviceStateGetAllSnapshots;
|
|
57340
57415
|
exports.useDeviceStateGetCapSlice = useDeviceStateGetCapSlice;
|
|
57416
|
+
exports.useDeviceStateGetNativeCapSlice = useDeviceStateGetNativeCapSlice;
|
|
57341
57417
|
exports.useDeviceStateGetSnapshot = useDeviceStateGetSnapshot;
|
|
57418
|
+
exports.useDeviceStateListClaims = useDeviceStateListClaims;
|
|
57419
|
+
exports.useDeviceStatePatchOwnedFields = useDeviceStatePatchOwnedFields;
|
|
57420
|
+
exports.useDeviceStateReleaseClaim = useDeviceStateReleaseClaim;
|
|
57342
57421
|
exports.useDeviceStateSetCapSlice = useDeviceStateSetCapSlice;
|
|
57343
57422
|
exports.useDeviceStateSlice = useDeviceStateSlice;
|
|
57344
57423
|
exports.useDeviceStateSlice$1 = useDeviceStateSlice;
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import * as __mfHostReactDOMClient from "react-dom/client";
|
|
|
13
13
|
import { createRoot } from "react-dom/client";
|
|
14
14
|
import * as __mfHostTrpcClient from "@trpc/client";
|
|
15
15
|
import { createTRPCClient, createWSClient, httpLink, splitLink, wsLink } from "@trpc/client";
|
|
16
|
-
import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, CLIP_STILL_DISPOSITION_HEADER, CLIP_STILL_REASON_CODE_HEADER, CLIP_STILL_REASON_HEADER, CONTAINER_CHILD_PRIORITY, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DISPLAY_ICON_GROUPS, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EXTENSION_SLOTS, EXTENSION_SLOT_IDS, EventCategory, ExposedDeviceSchema, FIRST_LEVEL_MACRO_CLASSES, KNOWN_CAP_NAMES, MAX_SENSOR_TRIGGER_DEVICES, MODEL_PROVIDER_IDS, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RECORDING_AUDIO_TRIGGER_OFFERED_DBFS, RECORDING_SOURCE_CAMSTACK_ADDON, RecordingConfigSchema, RecordingStatusSchema, SOURCE_CAP_ACTIVE_FIELD, STATIONARY_OVERLAY_STYLE, TIMEZONES, buildModelVariantGroups, canConvertUnit, clusterStepSettingFieldsFor, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, formatParkedFor, resolveContainerPrimaryChild, resolveDeviceControlKind, resolveRecordingProfiles, resolveVariantModelId, resolveViewableDeviceIds, searchDisplayIcons, selectAssignedProfileSlots, tryConvertUnit } from "@camstack/types";
|
|
16
|
+
import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, CLIP_STILL_DISPOSITION_HEADER, CLIP_STILL_REASON_CODE_HEADER, CLIP_STILL_REASON_HEADER, CONTAINER_CHILD_PRIORITY, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DISPLAY_ICON_GROUPS, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EXTENSION_SLOTS, EXTENSION_SLOT_IDS, EventCategory, ExposedDeviceSchema, FIRST_LEVEL_MACRO_CLASSES, KNOWN_CAP_NAMES, MAX_SENSOR_TRIGGER_DEVICES, MODEL_PROVIDER_IDS, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RECORDING_AUDIO_TRIGGER_OFFERED_DBFS, RECORDING_SOURCE_CAMSTACK_ADDON, RecordingConfigSchema, RecordingStatusSchema, SOURCE_CAP_ACTIVE_FIELD, STATIONARY_OVERLAY_STYLE, TIMEZONES, buildModelVariantGroups, canConvertUnit, clusterStepSettingFieldsFor, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, formatParkedFor, publicEventCategories, resolveContainerPrimaryChild, resolveDeviceControlKind, resolveRecordingProfiles, resolveVariantModelId, resolveViewableDeviceIds, searchDisplayIcons, selectAssignedProfileSlots, tryConvertUnit } from "@camstack/types";
|
|
17
17
|
import { createSystem } from "@camstack/sdk";
|
|
18
18
|
import { z } from "zod";
|
|
19
19
|
//#region ../../node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
@@ -6830,6 +6830,8 @@ var useCoreBlocksUpdateComposition = trpc.coreBlocks.updateComposition.useMutati
|
|
|
6830
6830
|
var useCoreBlocksGetComposition = trpc.coreBlocks.getComposition.useQuery;
|
|
6831
6831
|
/** Generated alias around `trpc.coreBlocks.listCompositions.useQuery`. */
|
|
6832
6832
|
var useCoreBlocksListCompositions = trpc.coreBlocks.listCompositions.useQuery;
|
|
6833
|
+
/** Generated alias around `trpc.coreBlocks.getCustomization.useQuery`. */
|
|
6834
|
+
var useCoreBlocksGetCustomization = trpc.coreBlocks.getCustomization.useQuery;
|
|
6833
6835
|
/** Generated alias around `trpc.coreBlocks.validateComposition.useMutation`. */
|
|
6834
6836
|
var useCoreBlocksValidateComposition = trpc.coreBlocks.validateComposition.useMutation;
|
|
6835
6837
|
/** Generated alias around `trpc.cover.open.useMutation`. */
|
|
@@ -7164,6 +7166,16 @@ var useDeviceStateGetCapSlice = trpc.deviceState.getCapSlice.useQuery;
|
|
|
7164
7166
|
var useDeviceStateGetAllSnapshots = trpc.deviceState.getAllSnapshots.useQuery;
|
|
7165
7167
|
/** Generated alias around `trpc.deviceState.setCapSlice.useMutation`. */
|
|
7166
7168
|
var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
|
|
7169
|
+
/** Generated alias around `trpc.deviceState.claimFields.useMutation`. */
|
|
7170
|
+
var useDeviceStateClaimFields = trpc.deviceState.claimFields.useMutation;
|
|
7171
|
+
/** Generated alias around `trpc.deviceState.patchOwnedFields.useMutation`. */
|
|
7172
|
+
var useDeviceStatePatchOwnedFields = trpc.deviceState.patchOwnedFields.useMutation;
|
|
7173
|
+
/** Generated alias around `trpc.deviceState.releaseClaim.useMutation`. */
|
|
7174
|
+
var useDeviceStateReleaseClaim = trpc.deviceState.releaseClaim.useMutation;
|
|
7175
|
+
/** Generated alias around `trpc.deviceState.listClaims.useQuery`. */
|
|
7176
|
+
var useDeviceStateListClaims = trpc.deviceState.listClaims.useQuery;
|
|
7177
|
+
/** Generated alias around `trpc.deviceState.getNativeCapSlice.useQuery`. */
|
|
7178
|
+
var useDeviceStateGetNativeCapSlice = trpc.deviceState.getNativeCapSlice.useQuery;
|
|
7167
7179
|
/** Generated alias around `trpc.deviceStatus.getStatus.useQuery`. */
|
|
7168
7180
|
var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
|
|
7169
7181
|
/** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
|
|
@@ -18881,12 +18893,28 @@ function useDeviceCapability(options) {
|
|
|
18881
18893
|
* Reads the cap's pushed runtime-state slice via `useDeviceCapability`
|
|
18882
18894
|
* and renders one row per item: a fill bar + percentage when `level` is
|
|
18883
18895
|
* known, else an `ok`/`replace` status pill when `status` is known, else
|
|
18884
|
-
* a muted em-dash.
|
|
18885
|
-
*
|
|
18886
|
-
*
|
|
18896
|
+
* a muted em-dash. When a provider also reports `remaining` (a count in
|
|
18897
|
+
* days/hours/cycles), its value is shown alongside — `null` renders a
|
|
18898
|
+
* muted em-dash, never a fake `0` (D393); absent `remaining` renders
|
|
18899
|
+
* nothing, exactly as before this field existed. A per-item "Replaced"
|
|
18900
|
+
* button calls `cap.reset` when the item is `resettable`. The cap is
|
|
18901
|
+
* inert until a provider sets items — an empty list renders a muted
|
|
18902
|
+
* placeholder.
|
|
18887
18903
|
*/
|
|
18888
18904
|
/** Remaining-life % at or below this is treated as a warning. */
|
|
18889
18905
|
var LOW_LEVEL_THRESHOLD = 15;
|
|
18906
|
+
/** [singular, plural] display label per `remaining` unit. */
|
|
18907
|
+
var UNIT_LABEL = {
|
|
18908
|
+
days: ["day", "days"],
|
|
18909
|
+
hours: ["hour", "hours"],
|
|
18910
|
+
cycles: ["cycle", "cycles"]
|
|
18911
|
+
};
|
|
18912
|
+
/** `value` null = unknown (D393) — renders an em-dash, never a fake `0`. */
|
|
18913
|
+
function formatRemaining(r) {
|
|
18914
|
+
if (r.value === null) return "—";
|
|
18915
|
+
const [singular, plural] = UNIT_LABEL[r.unit];
|
|
18916
|
+
return `${r.value} ${r.value === 1 ? singular : plural}`;
|
|
18917
|
+
}
|
|
18890
18918
|
function isLowOrReplace(item) {
|
|
18891
18919
|
return item.status === "replace" || item.level !== null && item.level <= LOW_LEVEL_THRESHOLD;
|
|
18892
18920
|
}
|
|
@@ -18940,6 +18968,10 @@ function ConsumableRow({ item, busy, canReset, onReset }) {
|
|
|
18940
18968
|
className: "text-[10px] text-foreground-subtle",
|
|
18941
18969
|
children: "—"
|
|
18942
18970
|
}),
|
|
18971
|
+
item.remaining && /* @__PURE__ */ jsx("span", {
|
|
18972
|
+
className: "text-[10px] font-medium tabular-nums text-foreground-subtle",
|
|
18973
|
+
children: formatRemaining(item.remaining)
|
|
18974
|
+
}),
|
|
18943
18975
|
item.lastResetAt !== null && /* @__PURE__ */ jsxs("span", {
|
|
18944
18976
|
className: "text-[10px] text-foreground-subtle",
|
|
18945
18977
|
children: ["Replaced ", formatResetAt(item.lastResetAt)]
|
|
@@ -21369,8 +21401,9 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
|
|
|
21369
21401
|
* "Linked devices" and "Virtual doorbell" sections it replaced were retired
|
|
21370
21402
|
* once the live read matched them on every measured camera (D655).
|
|
21371
21403
|
*
|
|
21372
|
-
*
|
|
21373
|
-
*
|
|
21404
|
+
* Every slot is an ASSOCIATION, so every card is a device multiselect. A
|
|
21405
|
+
* device that GAINS a capability from other devices is a composition, not a
|
|
21406
|
+
* slot, and is authored there (D663, amends D648).
|
|
21374
21407
|
*
|
|
21375
21408
|
* Absence is claimed only from an answer (D315): pending, failed and empty
|
|
21376
21409
|
* are three different sentences, and an owner that could not answer is shown
|
|
@@ -21406,28 +21439,10 @@ function ExtensionsPanel({ deviceId }) {
|
|
|
21406
21439
|
className: "text-[11px] text-foreground-subtle italic",
|
|
21407
21440
|
children: "No extensions are offered on this device."
|
|
21408
21441
|
}),
|
|
21409
|
-
view.kind === "rows" && /* @__PURE__ */ jsxs(Fragment$1, { children: [view.slots.map((row) =>
|
|
21442
|
+
view.kind === "rows" && /* @__PURE__ */ jsxs(Fragment$1, { children: [view.slots.map((row) => /* @__PURE__ */ jsx(AssociationSlotCard, {
|
|
21410
21443
|
deviceId,
|
|
21411
21444
|
row,
|
|
21412
21445
|
onSaved: () => void query.refetch()
|
|
21413
|
-
}, row.slotRef) : /* @__PURE__ */ jsxs("div", {
|
|
21414
|
-
className: "rounded-md border border-border/40 p-3",
|
|
21415
|
-
children: [
|
|
21416
|
-
/* @__PURE__ */ jsx("span", {
|
|
21417
|
-
className: "text-xs font-semibold text-foreground",
|
|
21418
|
-
children: EXTENSION_SLOTS[row.slot].descriptor.label
|
|
21419
|
-
}),
|
|
21420
|
-
/* @__PURE__ */ jsxs("p", {
|
|
21421
|
-
className: "text-[10px] text-foreground-subtle",
|
|
21422
|
-
children: [
|
|
21423
|
-
row.enabled === false ? "Off" : "On",
|
|
21424
|
-
" — ",
|
|
21425
|
-
row.authority,
|
|
21426
|
-
". Editing it needs a newer admin."
|
|
21427
|
-
]
|
|
21428
|
-
}),
|
|
21429
|
-
/* @__PURE__ */ jsx(SlotSourceList, { sources: row.sources })
|
|
21430
|
-
]
|
|
21431
21446
|
}, row.slotRef)), view.unreachable.map((row) => /* @__PURE__ */ jsxs("div", {
|
|
21432
21447
|
role: "alert",
|
|
21433
21448
|
className: "flex flex-col gap-1 rounded-md border border-warning/40 bg-warning/5 p-3",
|
|
@@ -29973,8 +29988,14 @@ function levelColor(percentage, charging) {
|
|
|
29973
29988
|
}
|
|
29974
29989
|
function BatteryBadge({ status, variant = "compact", className }) {
|
|
29975
29990
|
if (!status) return null;
|
|
29976
|
-
|
|
29977
|
-
|
|
29991
|
+
const { percentage, charging, sleeping, binary } = status;
|
|
29992
|
+
if (percentage === null) return /* @__PURE__ */ jsxs("span", {
|
|
29993
|
+
className: cn("inline-flex items-center gap-1 text-[10px] font-medium text-foreground-subtle", className),
|
|
29994
|
+
title: "Battery: unknown",
|
|
29995
|
+
children: [/* @__PURE__ */ jsx(Battery, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("span", { children: "Unknown" })]
|
|
29996
|
+
});
|
|
29997
|
+
if (binary === true) {
|
|
29998
|
+
const low = percentage < BINARY_LOW_THRESHOLD;
|
|
29978
29999
|
const BinIcon = low ? BatteryWarning : BatteryFull;
|
|
29979
30000
|
return /* @__PURE__ */ jsxs("span", {
|
|
29980
30001
|
className: cn("inline-flex items-center gap-1 text-[10px] font-medium", low ? "text-rose-400" : "text-foreground-subtle", className),
|
|
@@ -29982,21 +30003,21 @@ function BatteryBadge({ status, variant = "compact", className }) {
|
|
|
29982
30003
|
children: [/* @__PURE__ */ jsx(BinIcon, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("span", { children: low ? "Low" : "Normal" })]
|
|
29983
30004
|
});
|
|
29984
30005
|
}
|
|
29985
|
-
const Icon = pickIcon(
|
|
29986
|
-
const color = levelColor(
|
|
29987
|
-
const ChargingGlyph =
|
|
29988
|
-
const showSleeping =
|
|
30006
|
+
const Icon = pickIcon(percentage);
|
|
30007
|
+
const color = levelColor(percentage, charging);
|
|
30008
|
+
const ChargingGlyph = charging === "solar" ? Sun : charging === "dc" ? Plug : null;
|
|
30009
|
+
const showSleeping = sleeping;
|
|
29989
30010
|
return /* @__PURE__ */ jsxs("span", {
|
|
29990
30011
|
className: cn("inline-flex items-center gap-1 text-[10px] font-medium", color, className),
|
|
29991
|
-
title: `Battery: ${Math.round(
|
|
30012
|
+
title: `Battery: ${Math.round(percentage)}%` + (isPowered(charging) ? ` · charging (${charging})` : "") + (sleeping ? " · sleeping" : ""),
|
|
29992
30013
|
children: [
|
|
29993
30014
|
/* @__PURE__ */ jsx(Icon, { className: "h-3.5 w-3.5" }),
|
|
29994
|
-
/* @__PURE__ */ jsxs("span", { children: [Math.round(
|
|
30015
|
+
/* @__PURE__ */ jsxs("span", { children: [Math.round(percentage), "%"] }),
|
|
29995
30016
|
ChargingGlyph && /* @__PURE__ */ jsx(ChargingGlyph, { className: "h-3 w-3" }),
|
|
29996
30017
|
showSleeping && /* @__PURE__ */ jsx(Moon, { className: "h-3 w-3 text-blue-300" }),
|
|
29997
|
-
variant === "full" && isPowered(
|
|
30018
|
+
variant === "full" && isPowered(charging) && /* @__PURE__ */ jsx("span", {
|
|
29998
30019
|
className: "text-foreground-subtle",
|
|
29999
|
-
children:
|
|
30020
|
+
children: charging
|
|
30000
30021
|
})
|
|
30001
30022
|
]
|
|
30002
30023
|
});
|
|
@@ -35944,9 +35965,11 @@ function getStyle(category, data) {
|
|
|
35944
35965
|
}
|
|
35945
35966
|
return base;
|
|
35946
35967
|
}
|
|
35947
|
-
/** Every
|
|
35948
|
-
*
|
|
35949
|
-
|
|
35968
|
+
/** Every PUBLIC EventCategory value, sorted alphabetically — the owner-only
|
|
35969
|
+
* categories the routers refuse (D224) are not offered, a filter that can
|
|
35970
|
+
* never match is not a filter. Computed once at module load — drives the
|
|
35971
|
+
* multiselect popover. */
|
|
35972
|
+
var ALL_EVENT_CATEGORIES = Object.freeze([...publicEventCategories()]);
|
|
35950
35973
|
/**
|
|
35951
35974
|
* Categories that are emitted at high frequency (~1 Hz per camera /
|
|
35952
35975
|
* per node / per engine) and pollute the live events tab without
|
|
@@ -49077,19 +49100,6 @@ function DeviceItemHeader({ device, variant, flags, parent, integrationIcon, has
|
|
|
49077
49100
|
}
|
|
49078
49101
|
//#endregion
|
|
49079
49102
|
//#region src/hooks/use-device-battery.ts
|
|
49080
|
-
/**
|
|
49081
|
-
* useDeviceBattery — battery status for a device.
|
|
49082
|
-
*
|
|
49083
|
-
* Thin wrapper over the `useDeviceState` combinator, which itself
|
|
49084
|
-
* wraps `useDeviceProxy + useDeviceStateSlice(dev?.state.battery)`.
|
|
49085
|
-
* The kernel runtime-state mirror keeps the slice value warm — one
|
|
49086
|
-
* initial fetch on first subscribe, then push updates on every
|
|
49087
|
-
* `setCapSlice` for the battery slice. No manual event subscription,
|
|
49088
|
-
* no parallel `getStatus` polling.
|
|
49089
|
-
*
|
|
49090
|
-
* Returns `null` when no provider has emitted yet (non-battery
|
|
49091
|
-
* camera, or initial fetch hasn't returned).
|
|
49092
|
-
*/
|
|
49093
49103
|
function useDeviceBattery(trpc, deviceId) {
|
|
49094
49104
|
return useDeviceState(trpc, deviceId, (s) => s.battery) ?? null;
|
|
49095
49105
|
}
|
|
@@ -50065,6 +50075,11 @@ function IntegrationMultiSelect({ addons, selected, onChange }) {
|
|
|
50065
50075
|
}
|
|
50066
50076
|
//#endregion
|
|
50067
50077
|
//#region src/composites/device-list/empty-state.tsx
|
|
50078
|
+
var EMPTY_STATE_TEXT = {
|
|
50079
|
+
nofilter: "No devices yet",
|
|
50080
|
+
filtered: "No devices match the current filters",
|
|
50081
|
+
pending: "Loading integrations…"
|
|
50082
|
+
};
|
|
50068
50083
|
function DeviceListEmptyState({ variant, onClearFilters }) {
|
|
50069
50084
|
return /* @__PURE__ */ jsxs("div", {
|
|
50070
50085
|
className: "flex flex-col items-center justify-center py-12 text-center",
|
|
@@ -50072,7 +50087,7 @@ function DeviceListEmptyState({ variant, onClearFilters }) {
|
|
|
50072
50087
|
/* @__PURE__ */ jsx(Inbox, { className: "h-8 w-8 text-foreground-subtle/40 mb-3" }),
|
|
50073
50088
|
/* @__PURE__ */ jsx("p", {
|
|
50074
50089
|
className: "text-sm font-medium text-foreground-subtle",
|
|
50075
|
-
children: variant
|
|
50090
|
+
children: EMPTY_STATE_TEXT[variant]
|
|
50076
50091
|
}),
|
|
50077
50092
|
variant === "filtered" && onClearFilters && /* @__PURE__ */ jsx("button", {
|
|
50078
50093
|
type: "button",
|
|
@@ -50323,7 +50338,7 @@ function TableLayout({ rows, accessoriesByParent, expandedParents, onToggleExpan
|
|
|
50323
50338
|
expanded: expandedParents.has(d.id),
|
|
50324
50339
|
onToggleExpand: () => onToggleExpand(d.id),
|
|
50325
50340
|
trpc,
|
|
50326
|
-
integrationIcon: showIcon ? resolveIntegrationIcon?.(d
|
|
50341
|
+
integrationIcon: showIcon ? resolveIntegrationIcon?.(d) ?? null : null,
|
|
50327
50342
|
showType,
|
|
50328
50343
|
showManufacturer,
|
|
50329
50344
|
showFeatures,
|
|
@@ -50539,7 +50554,7 @@ var DEFAULT_PAGE_SIZE = {
|
|
|
50539
50554
|
table: 50
|
|
50540
50555
|
};
|
|
50541
50556
|
function DeviceModeList(props) {
|
|
50542
|
-
const { devices, trpc, context = "devices", filters,
|
|
50557
|
+
const { devices, trpc, context = "devices", filters, forceIntegrationId, integrationOf, resolveIntegrationIcon, resolveParent, onNavigate, pageSize = DEFAULT_PAGE_SIZE, urlScope = "root", lsKey = urlScope === "root" ? "devices" : "integrations:nested", renderRowAction, onDeleteDevice, selectable = false, selectedIds, onSelectionChange, batchActions } = props;
|
|
50543
50558
|
const [batchActive, setBatchActive] = useState(false);
|
|
50544
50559
|
const [internalSelected, setInternalSelected] = useState(/* @__PURE__ */ new Set());
|
|
50545
50560
|
const activeSelected = selectedIds ?? internalSelected;
|
|
@@ -50576,7 +50591,8 @@ function DeviceModeList(props) {
|
|
|
50576
50591
|
useEffect(() => {
|
|
50577
50592
|
if (debouncedSearch !== url.state.q) url.setQ(debouncedSearch);
|
|
50578
50593
|
}, [debouncedSearch]);
|
|
50579
|
-
const effectiveAddons = useMemo(() =>
|
|
50594
|
+
const effectiveAddons = useMemo(() => forceIntegrationId !== void 0 ? [forceIntegrationId] : url.state.addons, [forceIntegrationId, url.state.addons]);
|
|
50595
|
+
const integrationOfRow = useCallback((device) => integrationOf !== void 0 ? integrationOf(device) : { kind: "unknown" }, [integrationOf]);
|
|
50580
50596
|
const childrenByParent = useMemo(() => {
|
|
50581
50597
|
const map = /* @__PURE__ */ new Map();
|
|
50582
50598
|
for (const d of devices) {
|
|
@@ -50592,7 +50608,7 @@ function DeviceModeList(props) {
|
|
|
50592
50608
|
const addonSet = effectiveAddons.length > 0 ? new Set(effectiveAddons) : null;
|
|
50593
50609
|
const typeSet = url.state.types.length > 0 ? new Set(url.state.types) : null;
|
|
50594
50610
|
return devices.filter((d) => {
|
|
50595
|
-
if (addonSet && !
|
|
50611
|
+
if (addonSet && !belongsToAny(integrationOfRow(d), addonSet)) return false;
|
|
50596
50612
|
if (typeSet && !typeSet.has(effectiveType(d, childrenByParent.get(d.id)))) return false;
|
|
50597
50613
|
if (q.trim() !== "" && !fuzzyMatch(q, d.name) && !fuzzyMatch(q, d.stableId)) return false;
|
|
50598
50614
|
return true;
|
|
@@ -50601,10 +50617,12 @@ function DeviceModeList(props) {
|
|
|
50601
50617
|
devices,
|
|
50602
50618
|
childrenByParent,
|
|
50603
50619
|
effectiveAddons,
|
|
50620
|
+
integrationOfRow,
|
|
50604
50621
|
url.state.types,
|
|
50605
50622
|
url.state.q
|
|
50606
50623
|
]);
|
|
50607
50624
|
const grouped = useMemo(() => groupTopLevelAndAccessories(filtered), [filtered]);
|
|
50625
|
+
const rowIntegrationIcon = useMemo(() => resolveIntegrationIcon === void 0 ? null : (d) => resolveIntegrationIcon(d, integrationOfRow(d)), [resolveIntegrationIcon, integrationOfRow]);
|
|
50608
50626
|
const sortedTopLevel = useMemo(() => sortRows(grouped.topLevel, sort), [grouped.topLevel, sort]);
|
|
50609
50627
|
const [openParents, setOpenParents] = useState(() => /* @__PURE__ */ new Set());
|
|
50610
50628
|
const toggleParent = useCallback((id) => {
|
|
@@ -50626,6 +50644,11 @@ function DeviceModeList(props) {
|
|
|
50626
50644
|
useDeviceListRealtimeSync();
|
|
50627
50645
|
const isFiltered = effectiveAddons.length > 0 || url.state.types.length > 0 || url.state.q !== "";
|
|
50628
50646
|
const isEmpty = totalItems === 0;
|
|
50647
|
+
const integrationPending = useMemo(() => effectiveAddons.length > 0 && devices.some((d) => integrationOfRow(d).kind === "unknown"), [
|
|
50648
|
+
effectiveAddons,
|
|
50649
|
+
devices,
|
|
50650
|
+
integrationOfRow
|
|
50651
|
+
]);
|
|
50629
50652
|
return /* @__PURE__ */ jsxs("div", {
|
|
50630
50653
|
className: "flex flex-col gap-3",
|
|
50631
50654
|
children: [
|
|
@@ -50635,7 +50658,7 @@ function DeviceModeList(props) {
|
|
|
50635
50658
|
typeOptions: typeFilterOptions,
|
|
50636
50659
|
selectedTypes: url.state.types,
|
|
50637
50660
|
onTypesChange: url.setTypes,
|
|
50638
|
-
addons: filters?.
|
|
50661
|
+
addons: filters?.integrations,
|
|
50639
50662
|
selectedAddons: url.state.addons,
|
|
50640
50663
|
query: url.state.q,
|
|
50641
50664
|
onClearFilters: () => {
|
|
@@ -50643,7 +50666,7 @@ function DeviceModeList(props) {
|
|
|
50643
50666
|
url.clearFilters();
|
|
50644
50667
|
},
|
|
50645
50668
|
onAddonsChange: url.setAddons,
|
|
50646
|
-
hideAddons:
|
|
50669
|
+
hideAddons: forceIntegrationId !== void 0
|
|
50647
50670
|
}), /* @__PURE__ */ jsxs("div", {
|
|
50648
50671
|
className: "flex items-center gap-2",
|
|
50649
50672
|
children: [batchActions !== void 0 && (batchActive ? /* @__PURE__ */ jsxs("button", {
|
|
@@ -50677,8 +50700,8 @@ function DeviceModeList(props) {
|
|
|
50677
50700
|
enable: batchActions.enable
|
|
50678
50701
|
}),
|
|
50679
50702
|
isEmpty ? /* @__PURE__ */ jsx(DeviceListEmptyState, {
|
|
50680
|
-
variant: isFiltered ? "filtered" : "nofilter",
|
|
50681
|
-
onClearFilters: isFiltered ? url.clearFilters : void 0
|
|
50703
|
+
variant: integrationPending ? "pending" : isFiltered ? "filtered" : "nofilter",
|
|
50704
|
+
onClearFilters: isFiltered && !integrationPending ? url.clearFilters : void 0
|
|
50682
50705
|
}) : /* @__PURE__ */ jsx(ContainerChildrenProvider, {
|
|
50683
50706
|
value: grouped.accessoriesByParent,
|
|
50684
50707
|
children: /* @__PURE__ */ jsx(TableLayout, {
|
|
@@ -50691,7 +50714,7 @@ function DeviceModeList(props) {
|
|
|
50691
50714
|
onSort,
|
|
50692
50715
|
devices: filtered,
|
|
50693
50716
|
trpc,
|
|
50694
|
-
resolveIntegrationIcon:
|
|
50717
|
+
resolveIntegrationIcon: rowIntegrationIcon,
|
|
50695
50718
|
resolveParent: resolveParent ?? null,
|
|
50696
50719
|
onNavigate: onNavigate ?? null,
|
|
50697
50720
|
renderRowAction: renderRowAction ?? null,
|
|
@@ -50735,7 +50758,7 @@ function DeviceModeList(props) {
|
|
|
50735
50758
|
onPageChange: url.setPage
|
|
50736
50759
|
})]
|
|
50737
50760
|
}),
|
|
50738
|
-
|
|
50761
|
+
forceIntegrationId === void 0 && isFiltered && totalItems > 0 && /* @__PURE__ */ jsxs("p", {
|
|
50739
50762
|
className: "text-[11px] text-foreground-subtle",
|
|
50740
50763
|
children: [
|
|
50741
50764
|
"Showing ",
|
|
@@ -50749,7 +50772,7 @@ function DeviceModeList(props) {
|
|
|
50749
50772
|
" ",
|
|
50750
50773
|
/* @__PURE__ */ jsx("strong", {
|
|
50751
50774
|
className: "text-primary",
|
|
50752
|
-
children: effectiveAddons.map((id) => filters?.
|
|
50775
|
+
children: effectiveAddons.map((id) => filters?.integrations?.find((a) => a.id === id)?.name ?? id).join(", ")
|
|
50753
50776
|
})
|
|
50754
50777
|
] })
|
|
50755
50778
|
]
|
|
@@ -50757,6 +50780,14 @@ function DeviceModeList(props) {
|
|
|
50757
50780
|
]
|
|
50758
50781
|
});
|
|
50759
50782
|
}
|
|
50783
|
+
/**
|
|
50784
|
+
* A row matches an integration filter only when it RESOLVED to one of the
|
|
50785
|
+
* picked integrations. `unknown` (integrations not answered yet), `orphan`
|
|
50786
|
+
* and `unlinked` rows belong to none of them.
|
|
50787
|
+
*/
|
|
50788
|
+
function belongsToAny(resolution, integrationIds) {
|
|
50789
|
+
return resolution.kind === "resolved" && integrationIds.has(resolution.integration.id);
|
|
50790
|
+
}
|
|
50760
50791
|
function useDeviceListRealtimeSync() {
|
|
50761
50792
|
useQueryClient();
|
|
50762
50793
|
}
|
|
@@ -50912,6 +50943,46 @@ function GenericModeList(props) {
|
|
|
50912
50943
|
});
|
|
50913
50944
|
}
|
|
50914
50945
|
//#endregion
|
|
50946
|
+
//#region src/composites/device-list/device-integration.ts
|
|
50947
|
+
function nonEmpty(value) {
|
|
50948
|
+
return typeof value === "string" && value.length > 0;
|
|
50949
|
+
}
|
|
50950
|
+
function resolveDeviceIntegration(device, integrations) {
|
|
50951
|
+
return deviceIntegrationResolver(integrations)(device);
|
|
50952
|
+
}
|
|
50953
|
+
/**
|
|
50954
|
+
* The rule itself, prepared once over a list for per-row use on a large
|
|
50955
|
+
* fleet (two map lookups per row, not two scans). `resolveDeviceIntegration`
|
|
50956
|
+
* is this, applied to one device; `<DeviceList integrationOf>` takes the
|
|
50957
|
+
* returned resolver.
|
|
50958
|
+
*/
|
|
50959
|
+
function deviceIntegrationResolver(integrations) {
|
|
50960
|
+
if (integrations === null || integrations === void 0) return () => ({ kind: "unknown" });
|
|
50961
|
+
const byId = /* @__PURE__ */ new Map();
|
|
50962
|
+
const byAddon = /* @__PURE__ */ new Map();
|
|
50963
|
+
for (const i of integrations) {
|
|
50964
|
+
if (!byId.has(i.id)) byId.set(i.id, i);
|
|
50965
|
+
if (!byAddon.has(i.addonId)) byAddon.set(i.addonId, i);
|
|
50966
|
+
}
|
|
50967
|
+
return (device) => {
|
|
50968
|
+
if (nonEmpty(device.integrationId)) {
|
|
50969
|
+
const hit = byId.get(device.integrationId);
|
|
50970
|
+
return hit !== void 0 ? {
|
|
50971
|
+
kind: "resolved",
|
|
50972
|
+
integration: hit
|
|
50973
|
+
} : { kind: "orphan" };
|
|
50974
|
+
}
|
|
50975
|
+
if (nonEmpty(device.addonId)) {
|
|
50976
|
+
const hit = byAddon.get(device.addonId);
|
|
50977
|
+
return hit !== void 0 ? {
|
|
50978
|
+
kind: "resolved",
|
|
50979
|
+
integration: hit
|
|
50980
|
+
} : { kind: "orphan" };
|
|
50981
|
+
}
|
|
50982
|
+
return { kind: "unlinked" };
|
|
50983
|
+
};
|
|
50984
|
+
}
|
|
50985
|
+
//#endregion
|
|
50915
50986
|
//#region src/composites/device-list/index.tsx
|
|
50916
50987
|
/**
|
|
50917
50988
|
* Dispatcher: default registry-device list, or a generic render-prop list when
|
|
@@ -56549,4 +56620,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-vfWTm6qv.js").t
|
|
|
56549
56620
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
56550
56621
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-DMkchqO1.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
56551
56622
|
//#endregion
|
|
56552
|
-
export { AddonGlobalSettingsForm, AdminLinkQuickAction, 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, DataTableFilterBar, 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, EMPTY_DATA_TABLE_FILTER, 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, IconPicker, 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, RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, 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, StreamDebugOverlay, 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, MicOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, EyeOff as c, childEntityId, childListName, classifyCapability, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, dataTableFacets, defaultTheme, deriveDeviceKind, deriveWebrtcDebugStats, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDataTableRows, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, freezeVerdict, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isDataTableFilterActive, isFieldVisible, Camera as l, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, ImageOff as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, Grid2x2 as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, toggleDataTableFacet, trpc, createLucideIcon as u, 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, useCapabilityPresence, 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, useCoreBlocksCreateComposition, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetComposition, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksListCompositions, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoreBlocksUpdateComposition, useCoreBlocksValidateComposition, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDataTableFilter, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdminLink, useDeviceAdminLinkGetAdminLink, 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, useDeviceExtensionListCandidates, useDeviceExtensionListSlots, useDeviceExtensionListSources, useDeviceExtensionSetSlot, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListDeviceIdsByCaps, 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, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, 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, useNodesDirectory, 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, useNotificationRulesGetRuleLastRuns, useNotificationRulesGetTemplateCatalog, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesPreviewStateSummary, useNotificationRulesPreviewTemplate, 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, usePipelineAnalyticsOwnersWithMedia, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, 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, usePipelineOrchestratorGetClusterModelChoice, 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, useRecordingArchiveApplyDeviceSettingsPatch, useRecordingArchiveCancelRelocateJob, useRecordingArchiveCancelStorageMigrationMove, useRecordingArchiveDeleteFootprint, useRecordingArchiveGetAvailabilityBatch, useRecordingArchiveGetDaysWithRecordingsBatch, useRecordingArchiveGetDeviceConfig, useRecordingArchiveGetDeviceLiveContribution, useRecordingArchiveGetDeviceSettingsContribution, useRecordingArchiveGetPlacement, useRecordingArchiveGetRelocateResidue, useRecordingArchiveGetStatus, useRecordingArchiveGetStorageMigrationMoveStatus, useRecordingArchiveGetStorageUsage, useRecordingArchiveListOpsLog, useRecordingArchiveListRelocateJobs, useRecordingArchiveLocateSegment, useRecordingArchivePauseForStorageMigration, useRecordingArchivePlanStorageRebalance, useRecordingArchivePruneFootage, useRecordingArchiveReadGopBytes, useRecordingArchiveReadSegmentBytes, useRecordingArchiveReadWindowBytes, useRecordingArchiveReconcileLedgerAgainstDisk, useRecordingArchiveRefreshStorageLocationsForMigration, useRecordingArchiveRelocateFootage, useRecordingArchiveRenderClip, useRecordingArchiveRenderGif, useRecordingArchiveRescanStorage, useRecordingArchiveResumeForStorageMigration, useRecordingArchiveSetDeviceConfig, useRecordingArchiveSetDevicePlacement, useRecordingArchiveStartStorageMigrationMove, useRecordingArchiveStartStorageRebalance, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetPlayback, useRecordingGetPlaybackOptions, useRecordingListSources, useRecordingOnboardGetOptions, useRecordingOnboardGetStatus, useRecordingOnboardSetSettings, useRecordingSignalGetStatus, useRemoteComponent, useRoleDisplayDefaults, 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, useVideoclipsDialClipStream, useVideoclipsGetClipPlayback, useVideoclipsGetPlaybackOptions, useVideoclipsListClips, useVideoclipsListSources, useVideoclipsOfferClipBytes, useVideoclipsReadClipBytes, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionDebug, 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 };
|
|
56623
|
+
export { AddonGlobalSettingsForm, AdminLinkQuickAction, 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, DataTableFilterBar, 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, EMPTY_DATA_TABLE_FILTER, 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, IconPicker, 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, RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, 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, StreamDebugOverlay, 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, MicOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, EyeOff as c, childEntityId, childListName, classifyCapability, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, dataTableFacets, defaultTheme, deriveDeviceKind, deriveWebrtcDebugStats, describeDeviceSelector, deviceIntegrationResolver, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDataTableRows, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, freezeVerdict, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isDataTableFilterActive, isFieldVisible, Camera as l, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, ImageOff as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDeviceIntegration, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, Grid2x2 as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, toggleDataTableFacet, trpc, createLucideIcon as u, 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, useCapabilityPresence, 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, useCoreBlocksCreateComposition, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetComposition, useCoreBlocksGetCustomization, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksListCompositions, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoreBlocksUpdateComposition, useCoreBlocksValidateComposition, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDataTableFilter, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdminLink, useDeviceAdminLinkGetAdminLink, 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, useDeviceExtensionListCandidates, useDeviceExtensionListSlots, useDeviceExtensionListSources, useDeviceExtensionSetSlot, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListDeviceIdsByCaps, 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, useDeviceStateClaimFields, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetNativeCapSlice, useDeviceStateGetSnapshot, useDeviceStateListClaims, useDeviceStatePatchOwnedFields, useDeviceStateReleaseClaim, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, 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, useNodesDirectory, 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, useNotificationRulesGetRuleLastRuns, useNotificationRulesGetTemplateCatalog, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesPreviewStateSummary, useNotificationRulesPreviewTemplate, 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, usePipelineAnalyticsOwnersWithMedia, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, 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, usePipelineOrchestratorGetClusterModelChoice, 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, useRecordingArchiveApplyDeviceSettingsPatch, useRecordingArchiveCancelRelocateJob, useRecordingArchiveCancelStorageMigrationMove, useRecordingArchiveDeleteFootprint, useRecordingArchiveGetAvailabilityBatch, useRecordingArchiveGetDaysWithRecordingsBatch, useRecordingArchiveGetDeviceConfig, useRecordingArchiveGetDeviceLiveContribution, useRecordingArchiveGetDeviceSettingsContribution, useRecordingArchiveGetPlacement, useRecordingArchiveGetRelocateResidue, useRecordingArchiveGetStatus, useRecordingArchiveGetStorageMigrationMoveStatus, useRecordingArchiveGetStorageUsage, useRecordingArchiveListOpsLog, useRecordingArchiveListRelocateJobs, useRecordingArchiveLocateSegment, useRecordingArchivePauseForStorageMigration, useRecordingArchivePlanStorageRebalance, useRecordingArchivePruneFootage, useRecordingArchiveReadGopBytes, useRecordingArchiveReadSegmentBytes, useRecordingArchiveReadWindowBytes, useRecordingArchiveReconcileLedgerAgainstDisk, useRecordingArchiveRefreshStorageLocationsForMigration, useRecordingArchiveRelocateFootage, useRecordingArchiveRenderClip, useRecordingArchiveRenderGif, useRecordingArchiveRescanStorage, useRecordingArchiveResumeForStorageMigration, useRecordingArchiveSetDeviceConfig, useRecordingArchiveSetDevicePlacement, useRecordingArchiveStartStorageMigrationMove, useRecordingArchiveStartStorageRebalance, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetPlayback, useRecordingGetPlaybackOptions, useRecordingListSources, useRecordingOnboardGetOptions, useRecordingOnboardGetStatus, useRecordingOnboardSetSettings, useRecordingSignalGetStatus, useRemoteComponent, useRoleDisplayDefaults, 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, useVideoclipsDialClipStream, useVideoclipsGetClipPlayback, useVideoclipsGetPlaybackOptions, useVideoclipsListClips, useVideoclipsListSources, useVideoclipsOfferClipBytes, useVideoclipsReadClipBytes, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionDebug, 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 };
|