@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.
@@ -1,5 +1,7 @@
1
1
  export interface BatteryStatusLike {
2
- readonly percentage: number;
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
- export interface DeviceListAddonOption {
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
- readonly addons?: readonly DeviceListAddonOption[];
43
+ /** Integration chips — ids are integration ids. Requires `integrationOf`. */
44
+ readonly integrations?: readonly DeviceListIntegrationOption[];
35
45
  readonly typeOptions?: readonly MultiSelectOption[];
36
46
  };
37
- /** Pre-applied addon filter — hides the addon-chip group. */
38
- readonly forceAddon?: string;
39
- readonly resolveIntegrationIcon?: (addonId: string) => ReactNode | null;
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
- readonly resolveIntegrationIcon: ((addonId: string) => ReactNode | null) | null;
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
- export interface BatteryStatus {
3
- readonly percentage: number;
4
- readonly charging: 'dc' | 'solar' | 'none';
5
- readonly sleeping: boolean;
6
- readonly lastUpdated: number;
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. A per-item "Replaced" button calls `cap.reset` when
18909
- * the item is `resettable`. The cap is inert until a provider sets
18910
- * items — an empty list renders a muted placeholder.
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
- * It renders ASSOCIATION cards only (a device multiselect). A `graft`
21397
- * slot (slice 2) gets a read-only card here until its editor exists.
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) => _camstack_types.EXTENSION_SLOTS[row.slot].descriptor.shape === "association" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AssociationSlotCard, {
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
- if (status.binary === true) {
30001
- const low = status.percentage < BINARY_LOW_THRESHOLD;
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(status.percentage);
30010
- const color = levelColor(status.percentage, status.charging);
30011
- const ChargingGlyph = status.charging === "solar" ? Sun : status.charging === "dc" ? Plug : null;
30012
- const showSleeping = status.sleeping;
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(status.percentage)}%` + (isPowered(status.charging) ? ` · charging (${status.charging})` : "") + (status.sleeping ? " · sleeping" : ""),
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(status.percentage), "%"] }),
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(status.charging) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
30042
+ variant === "full" && isPowered(charging) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
30022
30043
  className: "text-foreground-subtle",
30023
- children: status.charging
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 value in the EventCategory enum, sorted alphabetically.
35972
- * Computed once at module load — drives the multiselect popover. */
35973
- var ALL_EVENT_CATEGORIES = Object.freeze([...new Set(Object.values(_camstack_types.EventCategory))].toSorted());
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 === "filtered" ? "No devices match the current filters" : "No devices yet"
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.addonId) ?? null : null,
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, forceAddon, resolveIntegrationIcon, resolveParent, onNavigate, pageSize = DEFAULT_PAGE_SIZE, urlScope = "root", lsKey = urlScope === "root" ? "devices" : "integrations:nested", renderRowAction, onDeleteDevice, selectable = false, selectedIds, onSelectionChange, batchActions } = props;
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)(() => forceAddon !== void 0 ? [forceAddon] : url.state.addons, [forceAddon, url.state.addons]);
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 && !addonSet.has(d.addonId)) return false;
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?.addons,
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: forceAddon !== void 0
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: resolveIntegrationIcon ?? null,
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
- forceAddon === void 0 && isFiltered && totalItems > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
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?.addons?.find((a) => a.id === id)?.name ?? id).join(", ")
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. A per-item "Replaced" button calls `cap.reset` when
18885
- * the item is `resettable`. The cap is inert until a provider sets
18886
- * items — an empty list renders a muted placeholder.
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
- * It renders ASSOCIATION cards only (a device multiselect). A `graft`
21373
- * slot (slice 2) gets a read-only card here until its editor exists.
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) => EXTENSION_SLOTS[row.slot].descriptor.shape === "association" ? /* @__PURE__ */ jsx(AssociationSlotCard, {
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
- if (status.binary === true) {
29977
- const low = status.percentage < BINARY_LOW_THRESHOLD;
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(status.percentage);
29986
- const color = levelColor(status.percentage, status.charging);
29987
- const ChargingGlyph = status.charging === "solar" ? Sun : status.charging === "dc" ? Plug : null;
29988
- const showSleeping = status.sleeping;
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(status.percentage)}%` + (isPowered(status.charging) ? ` · charging (${status.charging})` : "") + (status.sleeping ? " · sleeping" : ""),
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(status.percentage), "%"] }),
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(status.charging) && /* @__PURE__ */ jsx("span", {
30018
+ variant === "full" && isPowered(charging) && /* @__PURE__ */ jsx("span", {
29998
30019
  className: "text-foreground-subtle",
29999
- children: status.charging
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 value in the EventCategory enum, sorted alphabetically.
35948
- * Computed once at module load — drives the multiselect popover. */
35949
- var ALL_EVENT_CATEGORIES = Object.freeze([...new Set(Object.values(EventCategory))].toSorted());
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 === "filtered" ? "No devices match the current filters" : "No devices yet"
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.addonId) ?? null : null,
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, forceAddon, resolveIntegrationIcon, resolveParent, onNavigate, pageSize = DEFAULT_PAGE_SIZE, urlScope = "root", lsKey = urlScope === "root" ? "devices" : "integrations:nested", renderRowAction, onDeleteDevice, selectable = false, selectedIds, onSelectionChange, batchActions } = props;
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(() => forceAddon !== void 0 ? [forceAddon] : url.state.addons, [forceAddon, url.state.addons]);
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 && !addonSet.has(d.addonId)) return false;
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?.addons,
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: forceAddon !== void 0
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: resolveIntegrationIcon ?? null,
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
- forceAddon === void 0 && isFiltered && totalItems > 0 && /* @__PURE__ */ jsxs("p", {
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?.addons?.find((a) => a.id === id)?.name ?? id).join(", ")
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.2.210",
3
+ "version": "1.2.212",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",