@camstack/ui-library 1.2.207 → 1.2.209

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,9 +1,12 @@
1
1
  import { ExtensionSlotSource, ExtensionSlotState } from '@camstack/types';
2
+ import { TrackedOption } from './extensions-view-state.js';
2
3
  export interface SlotSourceListProps {
3
4
  readonly sources: readonly ExtensionSlotSource[];
5
+ /** The tracked-event opt-in, when the slot carries one. */
6
+ readonly tracked?: readonly number[] | undefined;
4
7
  }
5
8
  /** The saved sources, each with its health — a bad one is shown, never hidden. */
6
- export declare function SlotSourceList({ sources }: SlotSourceListProps): import("react").JSX.Element;
9
+ export declare function SlotSourceList({ sources, tracked }: SlotSourceListProps): import("react").JSX.Element;
7
10
  export interface AssociationSlotCardProps {
8
11
  readonly deviceId: number;
9
12
  readonly row: ExtensionSlotState;
@@ -12,4 +15,14 @@ export interface AssociationSlotCardProps {
12
15
  export interface ActivationLineProps {
13
16
  readonly row: ExtensionSlotState;
14
17
  }
18
+ export interface ImpliedSourceListProps {
19
+ readonly sources: readonly ExtensionSlotSource[];
20
+ readonly tracked?: readonly number[] | undefined;
21
+ }
22
+ export interface TrackedTogglesProps {
23
+ readonly options: readonly TrackedOption[];
24
+ readonly tracked: readonly number[];
25
+ readonly nameOf: (id: number) => string;
26
+ readonly onToggle: (id: number) => void;
27
+ }
15
28
  export declare function AssociationSlotCard({ deviceId, row, onSaved }: AssociationSlotCardProps): import("react").JSX.Element;
@@ -1,4 +1,4 @@
1
- import { ExtensionCandidate, ExtensionSlotCardinality, ExtensionSlotRow, ExtensionSlotState, ExtensionSlotUnreachable } from '@camstack/types';
1
+ import { ExtensionCandidate, ExtensionSlotCardinality, ExtensionSlotRow, ExtensionSlotState, ExtensionSlotUnreachable, ExtensionSlotValue } from '@camstack/types';
2
2
  /** The one field of a query error this module reads. */
3
3
  export interface ExtensionsQueryError {
4
4
  readonly message: string;
@@ -38,3 +38,52 @@ export declare function pendingSuggestions(candidates: readonly ExtensionCandida
38
38
  export declare function searchCandidates(candidates: readonly ExtensionCandidate[], draft: readonly number[], query: string): readonly ExtensionCandidate[];
39
39
  /** Whether the draft differs from what the owner's store holds. */
40
40
  export declare function isDirty(saved: readonly number[], draft: readonly number[]): boolean;
41
+ /**
42
+ * The tracked-event opt-in a slot's value carries, or `undefined` when it
43
+ * carries none — every slot but `linked-devices`, and a `linked-devices` row
44
+ * from a server older than D655. `undefined` is "this owner offers no
45
+ * opt-in", never "nothing is opted in": the card then shows no toggle rather
46
+ * than a row of unticked ones it could not save.
47
+ */
48
+ export declare function trackedOptInOf(value: ExtensionSlotValue): readonly number[] | undefined;
49
+ /** Flip one device's tracked-event opt-in. */
50
+ export declare function toggleTracked(tracked: readonly number[], deviceId: number): readonly number[];
51
+ /** Whether two opt-ins differ as SETS — the order carries no meaning. */
52
+ export declare function isTrackedDirty(saved: readonly number[], draft: readonly number[]): boolean;
53
+ /** Where a tracked-event toggle comes from — said next to it. */
54
+ export type TrackedOptionOrigin = 'pick' | 'implied' | 'not-linked';
55
+ /** One device the editor offers a tracked-event toggle for. */
56
+ export interface TrackedOption {
57
+ readonly deviceId: number;
58
+ readonly origin: TrackedOptionOrigin;
59
+ }
60
+ /** What `trackedOptions` builds the toggle list from. */
61
+ export interface TrackedOptionsInput {
62
+ /** The draft picks. */
63
+ readonly picks: readonly number[];
64
+ /** Saved picks that are not a valid source (a container, D356) — no toggle. */
65
+ readonly invalidPicks: readonly number[];
66
+ /** Linked by the owner's own structure (`impliedSources`). */
67
+ readonly implied: readonly number[];
68
+ /** The draft opt-in. */
69
+ readonly tracked: readonly number[];
70
+ }
71
+ /**
72
+ * One toggle per device the camera links — the old section's set (D655):
73
+ * the valid picks, then what the owner links by structure (tree children, a
74
+ * picked container's child — never the container itself, D356), then every
75
+ * opted-in device that is linked no more, so a stored opt-in is always
76
+ * visible and can always be removed.
77
+ */
78
+ export declare function trackedOptions(input: TrackedOptionsInput): readonly TrackedOption[];
79
+ /**
80
+ * The opt-in after one device is removed from the draft picks: its toggle
81
+ * goes with it, unless the camera still links it by structure.
82
+ */
83
+ export declare function untrackUnpicked(tracked: readonly number[], deviceId: number, implied: readonly number[]): readonly number[];
84
+ /**
85
+ * The value a Save sends. The opt-in travels only when the owner offered one,
86
+ * and then WHOLE: it replaces the stored one, and the owner accepts any id it
87
+ * already stored, so what was read can be sent back unchanged (D655).
88
+ */
89
+ export declare function slotWriteValue(saved: ExtensionSlotValue, deviceIds: readonly number[], tracked: readonly number[] | undefined): ExtensionSlotValue;
@@ -169,4 +169,3 @@ export * from './version-badge';
169
169
  export * from './widget-panel.js';
170
170
  export type { WidgetSlotProps } from './widget-slot';
171
171
  export { WidgetSlot } from './widget-slot';
172
- export { DEVICE_AGGREGATE_QUERY_KEY, EXTENSION_SLOTS_QUERY_KEY, invalidateExtensionSurfaces, type QueryInvalidator, } from './extensions/extension-invalidation.js';
@@ -327,6 +327,16 @@ export declare const useCoreBlocksRestart: typeof trpc.coreBlocks.restart.useMut
327
327
  export declare const useCoreBlocksCompile: typeof trpc.coreBlocks.compile.useMutation;
328
328
  /** Generated alias around `trpc.coreBlocks.getTypeDefs.useQuery`. */
329
329
  export declare const useCoreBlocksGetTypeDefs: typeof trpc.coreBlocks.getTypeDefs.useQuery;
330
+ /** Generated alias around `trpc.coreBlocks.createComposition.useMutation`. */
331
+ export declare const useCoreBlocksCreateComposition: typeof trpc.coreBlocks.createComposition.useMutation;
332
+ /** Generated alias around `trpc.coreBlocks.updateComposition.useMutation`. */
333
+ export declare const useCoreBlocksUpdateComposition: typeof trpc.coreBlocks.updateComposition.useMutation;
334
+ /** Generated alias around `trpc.coreBlocks.getComposition.useQuery`. */
335
+ export declare const useCoreBlocksGetComposition: typeof trpc.coreBlocks.getComposition.useQuery;
336
+ /** Generated alias around `trpc.coreBlocks.listCompositions.useQuery`. */
337
+ export declare const useCoreBlocksListCompositions: typeof trpc.coreBlocks.listCompositions.useQuery;
338
+ /** Generated alias around `trpc.coreBlocks.validateComposition.useMutation`. */
339
+ export declare const useCoreBlocksValidateComposition: typeof trpc.coreBlocks.validateComposition.useMutation;
330
340
  /** Generated alias around `trpc.cover.open.useMutation`. */
331
341
  export declare const useCoverOpen: typeof trpc.cover.open.useMutation;
332
342
  /** Generated alias around `trpc.cover.close.useMutation`. */
@@ -609,12 +619,6 @@ export declare const useDeviceManagerTestField: typeof trpc.deviceManager.testFi
609
619
  export declare const useDeviceManagerGetDeviceStatusAggregate: typeof trpc.deviceManager.getDeviceStatusAggregate.useQuery;
610
620
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
611
621
  export declare const useDeviceManagerGetDeviceStatusAggregateBatch: typeof trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery;
612
- /** Generated alias around `trpc.deviceManager.getDeviceSettingsContribution.useQuery`. */
613
- export declare const useDeviceManagerGetDeviceSettingsContribution: typeof trpc.deviceManager.getDeviceSettingsContribution.useQuery;
614
- /** Generated alias around `trpc.deviceManager.getDeviceLiveContribution.useQuery`. */
615
- export declare const useDeviceManagerGetDeviceLiveContribution: typeof trpc.deviceManager.getDeviceLiveContribution.useQuery;
616
- /** Generated alias around `trpc.deviceManager.applyDeviceSettingsPatch.useMutation`. */
617
- export declare const useDeviceManagerApplyDeviceSettingsPatch: typeof trpc.deviceManager.applyDeviceSettingsPatch.useMutation;
618
622
  /** Generated alias around `trpc.deviceOps.getStreamSources.useQuery`. */
619
623
  export declare const useDeviceOpsGetStreamSources: typeof trpc.deviceOps.getStreamSources.useQuery;
620
624
  /** Generated alias around `trpc.deviceOps.getConfigEntries.useQuery`. */
@@ -669,12 +673,6 @@ export declare const useDeviceStateSetCapSlice: typeof trpc.deviceState.setCapSl
669
673
  export declare const useDeviceStatusGetStatus: typeof trpc.deviceStatus.getStatus.useQuery;
670
674
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
671
675
  export declare const useDoorbellGetStatus: typeof trpc.doorbell.getStatus.useQuery;
672
- /** Generated alias around `trpc.doorbell.getDeviceSettingsContribution.useQuery`. */
673
- export declare const useDoorbellGetDeviceSettingsContribution: typeof trpc.doorbell.getDeviceSettingsContribution.useQuery;
674
- /** Generated alias around `trpc.doorbell.getDeviceLiveContribution.useQuery`. */
675
- export declare const useDoorbellGetDeviceLiveContribution: typeof trpc.doorbell.getDeviceLiveContribution.useQuery;
676
- /** Generated alias around `trpc.doorbell.applyDeviceSettingsPatch.useMutation`. */
677
- export declare const useDoorbellApplyDeviceSettingsPatch: typeof trpc.doorbell.applyDeviceSettingsPatch.useMutation;
678
676
  /** Generated alias around `trpc.enumSensor.getStatus.useQuery`. */
679
677
  export declare const useEnumSensorGetStatus: typeof trpc.enumSensor.getStatus.useQuery;
680
678
  /** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
package/dist/index.cjs CHANGED
@@ -6846,6 +6846,16 @@ var useCoreBlocksRestart = trpc.coreBlocks.restart.useMutation;
6846
6846
  var useCoreBlocksCompile = trpc.coreBlocks.compile.useMutation;
6847
6847
  /** Generated alias around `trpc.coreBlocks.getTypeDefs.useQuery`. */
6848
6848
  var useCoreBlocksGetTypeDefs = trpc.coreBlocks.getTypeDefs.useQuery;
6849
+ /** Generated alias around `trpc.coreBlocks.createComposition.useMutation`. */
6850
+ var useCoreBlocksCreateComposition = trpc.coreBlocks.createComposition.useMutation;
6851
+ /** Generated alias around `trpc.coreBlocks.updateComposition.useMutation`. */
6852
+ var useCoreBlocksUpdateComposition = trpc.coreBlocks.updateComposition.useMutation;
6853
+ /** Generated alias around `trpc.coreBlocks.getComposition.useQuery`. */
6854
+ var useCoreBlocksGetComposition = trpc.coreBlocks.getComposition.useQuery;
6855
+ /** Generated alias around `trpc.coreBlocks.listCompositions.useQuery`. */
6856
+ var useCoreBlocksListCompositions = trpc.coreBlocks.listCompositions.useQuery;
6857
+ /** Generated alias around `trpc.coreBlocks.validateComposition.useMutation`. */
6858
+ var useCoreBlocksValidateComposition = trpc.coreBlocks.validateComposition.useMutation;
6849
6859
  /** Generated alias around `trpc.cover.open.useMutation`. */
6850
6860
  var useCoverOpen = trpc.cover.open.useMutation;
6851
6861
  /** Generated alias around `trpc.cover.close.useMutation`. */
@@ -7128,12 +7138,6 @@ var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
7128
7138
  var useDeviceManagerGetDeviceStatusAggregate = trpc.deviceManager.getDeviceStatusAggregate.useQuery;
7129
7139
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
7130
7140
  var useDeviceManagerGetDeviceStatusAggregateBatch = trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery;
7131
- /** Generated alias around `trpc.deviceManager.getDeviceSettingsContribution.useQuery`. */
7132
- var useDeviceManagerGetDeviceSettingsContribution = trpc.deviceManager.getDeviceSettingsContribution.useQuery;
7133
- /** Generated alias around `trpc.deviceManager.getDeviceLiveContribution.useQuery`. */
7134
- var useDeviceManagerGetDeviceLiveContribution = trpc.deviceManager.getDeviceLiveContribution.useQuery;
7135
- /** Generated alias around `trpc.deviceManager.applyDeviceSettingsPatch.useMutation`. */
7136
- var useDeviceManagerApplyDeviceSettingsPatch = trpc.deviceManager.applyDeviceSettingsPatch.useMutation;
7137
7141
  /** Generated alias around `trpc.deviceOps.getStreamSources.useQuery`. */
7138
7142
  var useDeviceOpsGetStreamSources = trpc.deviceOps.getStreamSources.useQuery;
7139
7143
  /** Generated alias around `trpc.deviceOps.getConfigEntries.useQuery`. */
@@ -7188,12 +7192,6 @@ var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
7188
7192
  var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
7189
7193
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
7190
7194
  var useDoorbellGetStatus = trpc.doorbell.getStatus.useQuery;
7191
- /** Generated alias around `trpc.doorbell.getDeviceSettingsContribution.useQuery`. */
7192
- var useDoorbellGetDeviceSettingsContribution = trpc.doorbell.getDeviceSettingsContribution.useQuery;
7193
- /** Generated alias around `trpc.doorbell.getDeviceLiveContribution.useQuery`. */
7194
- var useDoorbellGetDeviceLiveContribution = trpc.doorbell.getDeviceLiveContribution.useQuery;
7195
- /** Generated alias around `trpc.doorbell.applyDeviceSettingsPatch.useMutation`. */
7196
- var useDoorbellApplyDeviceSettingsPatch = trpc.doorbell.applyDeviceSettingsPatch.useMutation;
7197
7195
  /** Generated alias around `trpc.enumSensor.getStatus.useQuery`. */
7198
7196
  var useEnumSensorGetStatus = trpc.enumSensor.getStatus.useQuery;
7199
7197
  /** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
@@ -12327,8 +12325,8 @@ function selectedDeviceOptions(options, selected) {
12327
12325
  * `device-select-filter.ts`). No server-computed option list is involved —
12328
12326
  * the form field carries only the filter. Value(s) are device ids as strings.
12329
12327
  *
12330
- * The multi variant mirrors the "Linked devices" searchable combobox UX
12331
- * (removable chips + typeahead dropdown); the single variant is a native
12328
+ * The multi variant is a searchable combobox (removable chips + typeahead
12329
+ * dropdown); the single variant is a native
12332
12330
  * select. Both are inline in ui-library (like `node-select`) so any host that
12333
12331
  * renders the shared form field gets them without extra registration.
12334
12332
  */
@@ -20916,16 +20914,6 @@ function ClipsSection({ deviceId }) {
20916
20914
  });
20917
20915
  }
20918
20916
  //#endregion
20919
- //#region src/composites/extensions/extension-invalidation.ts
20920
- /** tRPC v11 query-key prefix of `deviceManager.getDeviceAggregate`. */
20921
- var DEVICE_AGGREGATE_QUERY_KEY = [["deviceManager", "getDeviceAggregate"]];
20922
- /** tRPC v11 query-key prefix of `deviceExtension.listSlots`. */
20923
- var EXTENSION_SLOTS_QUERY_KEY = [["deviceExtension", "listSlots"]];
20924
- /** Re-read both surfaces over the linked-devices / doorbell stores. */
20925
- async function invalidateExtensionSurfaces(client) {
20926
- await Promise.all([client.invalidateQueries({ queryKey: DEVICE_AGGREGATE_QUERY_KEY }), client.invalidateQueries({ queryKey: EXTENSION_SLOTS_QUERY_KEY })]);
20927
- }
20928
- //#endregion
20929
20917
  //#region src/composites/extensions/extensions-view-state.ts
20930
20918
  /**
20931
20919
  * What the Extensions section may CLAIM, from what `listSlots` answered
@@ -20990,6 +20978,70 @@ function searchCandidates(candidates, draft, query) {
20990
20978
  function isDirty(saved, draft) {
20991
20979
  return saved.length !== draft.length || saved.some((id, i) => draft[i] !== id);
20992
20980
  }
20981
+ /**
20982
+ * The tracked-event opt-in a slot's value carries, or `undefined` when it
20983
+ * carries none — every slot but `linked-devices`, and a `linked-devices` row
20984
+ * from a server older than D655. `undefined` is "this owner offers no
20985
+ * opt-in", never "nothing is opted in": the card then shows no toggle rather
20986
+ * than a row of unticked ones it could not save.
20987
+ */
20988
+ function trackedOptInOf(value) {
20989
+ return value.slot === "linked-devices" ? value.trackedDeviceIds : void 0;
20990
+ }
20991
+ /** Flip one device's tracked-event opt-in. */
20992
+ function toggleTracked(tracked, deviceId) {
20993
+ return tracked.includes(deviceId) ? tracked.filter((id) => id !== deviceId) : [...tracked, deviceId];
20994
+ }
20995
+ /** Whether two opt-ins differ as SETS — the order carries no meaning. */
20996
+ function isTrackedDirty(saved, draft) {
20997
+ return saved.length !== draft.length || saved.some((id) => !draft.includes(id));
20998
+ }
20999
+ /**
21000
+ * One toggle per device the camera links — the old section's set (D655):
21001
+ * the valid picks, then what the owner links by structure (tree children, a
21002
+ * picked container's child — never the container itself, D356), then every
21003
+ * opted-in device that is linked no more, so a stored opt-in is always
21004
+ * visible and can always be removed.
21005
+ */
21006
+ function trackedOptions(input) {
21007
+ const out = [];
21008
+ const seen = /* @__PURE__ */ new Set();
21009
+ const add = (deviceId, origin) => {
21010
+ if (seen.has(deviceId)) return;
21011
+ seen.add(deviceId);
21012
+ out.push({
21013
+ deviceId,
21014
+ origin
21015
+ });
21016
+ };
21017
+ for (const id of input.picks) if (!input.invalidPicks.includes(id)) add(id, "pick");
21018
+ for (const id of input.implied) add(id, "implied");
21019
+ for (const id of input.tracked) add(id, "not-linked");
21020
+ return out;
21021
+ }
21022
+ /**
21023
+ * The opt-in after one device is removed from the draft picks: its toggle
21024
+ * goes with it, unless the camera still links it by structure.
21025
+ */
21026
+ function untrackUnpicked(tracked, deviceId, implied) {
21027
+ return implied.includes(deviceId) ? tracked : tracked.filter((id) => id !== deviceId);
21028
+ }
21029
+ /**
21030
+ * The value a Save sends. The opt-in travels only when the owner offered one,
21031
+ * and then WHOLE: it replaces the stored one, and the owner accepts any id it
21032
+ * already stored, so what was read can be sent back unchanged (D655).
21033
+ */
21034
+ function slotWriteValue(saved, deviceIds, tracked) {
21035
+ if (saved.slot === "linked-devices" && tracked !== void 0) return {
21036
+ slot: "linked-devices",
21037
+ deviceIds: [...deviceIds],
21038
+ trackedDeviceIds: [...tracked]
21039
+ };
21040
+ return {
21041
+ slot: saved.slot,
21042
+ deviceIds: [...deviceIds]
21043
+ };
21044
+ }
20993
21045
  //#endregion
20994
21046
  //#region src/composites/extensions/AssociationSlotCard.tsx
20995
21047
  /**
@@ -21006,6 +21058,11 @@ function isDirty(saved, draft) {
21006
21058
  * shown with its reason and never silently dropped from the draft.
21007
21059
  * - A gate owned by ANOTHER authority (the doorbell wrapper's binding) is
21008
21060
  * shown read-only, naming that authority (D62).
21061
+ * - A slot whose value carries a tracked-event opt-in (`linked-devices`,
21062
+ * D655) gets one toggle per LINKED device — the picks, what the owner links
21063
+ * by structure (`impliedSources`: tree children, never a container, D356)
21064
+ * and any stored opt-in no longer linked, so each can be removed — saved
21065
+ * with the picks, whole.
21009
21066
  */
21010
21067
  var HEALTH_LABEL = {
21011
21068
  ok: "OK",
@@ -21020,7 +21077,7 @@ var HEALTH_VARIANT = {
21020
21077
  unavailable: "warning"
21021
21078
  };
21022
21079
  /** The saved sources, each with its health — a bad one is shown, never hidden. */
21023
- function SlotSourceList({ sources }) {
21080
+ function SlotSourceList({ sources, tracked }) {
21024
21081
  if (sources.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
21025
21082
  className: "text-[11px] text-foreground-subtle italic",
21026
21083
  children: "No devices picked."
@@ -21038,6 +21095,10 @@ function SlotSourceList({ sources }) {
21038
21095
  variant: HEALTH_VARIANT[s.health],
21039
21096
  children: HEALTH_LABEL[s.health]
21040
21097
  }),
21098
+ tracked?.includes(s.deviceId) === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
21099
+ variant: "info",
21100
+ children: "Tracked events"
21101
+ }),
21041
21102
  s.detail !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21042
21103
  className: "text-[10px] text-foreground-subtle",
21043
21104
  children: s.detail
@@ -21061,11 +21122,75 @@ function ActivationLine({ row }) {
21061
21122
  ]
21062
21123
  });
21063
21124
  }
21125
+ /**
21126
+ * What the owner links by structure — tree children, a picked container's
21127
+ * child (D356). Shown, never editable as a pick: removing one is not the
21128
+ * editor's to do.
21129
+ */
21130
+ function ImpliedSourceList({ sources, tracked }) {
21131
+ if (sources.length === 0) return null;
21132
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21133
+ className: "flex flex-col gap-1",
21134
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21135
+ className: "text-[10px] text-foreground-subtle",
21136
+ children: "Always linked (device tree):"
21137
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
21138
+ "aria-label": "Always linked",
21139
+ className: "flex flex-col gap-1",
21140
+ children: sources.map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
21141
+ className: "flex flex-wrap items-center gap-2 text-[11px]",
21142
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21143
+ className: "text-foreground",
21144
+ children: s.name ?? `Device ${s.deviceId}`
21145
+ }), tracked?.includes(s.deviceId) === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
21146
+ variant: "info",
21147
+ children: "Tracked events"
21148
+ })]
21149
+ }, s.deviceId))
21150
+ })]
21151
+ });
21152
+ }
21153
+ var ORIGIN_NOTE = {
21154
+ pick: null,
21155
+ implied: "always linked",
21156
+ "not-linked": "not linked any more — untick to remove"
21157
+ };
21158
+ /** One opt-in toggle per linked device: does it produce tracked events here? */
21159
+ function TrackedToggles({ options, tracked, nameOf, onToggle }) {
21160
+ if (options.length === 0) return null;
21161
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
21162
+ className: "flex flex-col gap-1",
21163
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
21164
+ className: "text-[10px] text-foreground-subtle",
21165
+ children: "Produce tracked events on this camera (opt-in):"
21166
+ }), options.map(({ deviceId: id, origin }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
21167
+ className: "flex items-center gap-2 text-[11px] text-foreground",
21168
+ children: [
21169
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
21170
+ type: "checkbox",
21171
+ "aria-label": `Tracked events from ${nameOf(id)}`,
21172
+ checked: tracked.includes(id),
21173
+ onChange: () => onToggle(id)
21174
+ }),
21175
+ nameOf(id),
21176
+ ORIGIN_NOTE[origin] !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
21177
+ className: "text-[10px] text-foreground-subtle",
21178
+ children: ["· ", ORIGIN_NOTE[origin]]
21179
+ })
21180
+ ]
21181
+ }, id))]
21182
+ });
21183
+ }
21064
21184
  function AssociationSlotCard({ deviceId, row, onSaved }) {
21065
21185
  const descriptor = _camstack_types.EXTENSION_SLOTS[row.slot].descriptor;
21066
21186
  const saved = row.value.deviceIds;
21187
+ const savedTracked = trackedOptInOf(row.value);
21188
+ const implied = row.impliedSources ?? [];
21189
+ const impliedIds = implied.map((s) => s.deviceId);
21190
+ const invalidPicks = row.sources.filter((s) => s.health === "unavailable").map((s) => s.deviceId);
21067
21191
  const [editing, setEditing] = (0, react$1.useState)(false);
21068
21192
  const [draft, setDraft] = (0, react$1.useState)(saved);
21193
+ const [draftTracked, setDraftTracked] = (0, react$1.useState)(savedTracked ?? []);
21069
21194
  const [search, setSearch] = (0, react$1.useState)("");
21070
21195
  const [refusal, setRefusal] = (0, react$1.useState)(null);
21071
21196
  const candidatesQuery = useDeviceExtensionListCandidates({
@@ -21073,11 +21198,15 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21073
21198
  slotRef: row.slotRef
21074
21199
  }, { enabled: editing });
21075
21200
  const setSlot = useDeviceExtensionSetSlot();
21076
- const queryClient = (0, _tanstack_react_query.useQueryClient)();
21077
21201
  const candidates = candidatesQuery.data?.candidates ?? [];
21078
- const nameOf = (id) => candidates.find((c) => c.deviceId === id)?.name ?? row.sources.find((s) => s.deviceId === id)?.name ?? `Device ${id}`;
21202
+ const nameOf = (id) => candidates.find((c) => c.deviceId === id)?.name ?? row.sources.find((s) => s.deviceId === id)?.name ?? implied.find((s) => s.deviceId === id)?.name ?? `Device ${id}`;
21203
+ const removePick = (id) => {
21204
+ setDraft(togglePick(draft, id, descriptor.cardinality));
21205
+ setDraftTracked(untrackUnpicked(draftTracked, id, impliedIds));
21206
+ };
21079
21207
  const startEditing = () => {
21080
21208
  setDraft(saved);
21209
+ setDraftTracked(savedTracked ?? []);
21081
21210
  setRefusal(null);
21082
21211
  setEditing(true);
21083
21212
  };
@@ -21087,13 +21216,9 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21087
21216
  await setSlot.mutateAsync({
21088
21217
  deviceId,
21089
21218
  slotRef: row.slotRef,
21090
- value: {
21091
- slot: row.value.slot,
21092
- deviceIds: [...draft]
21093
- }
21219
+ value: slotWriteValue(row.value, draft, savedTracked === void 0 ? void 0 : draftTracked)
21094
21220
  });
21095
21221
  setEditing(false);
21096
- await invalidateExtensionSurfaces(queryClient);
21097
21222
  onSaved();
21098
21223
  } catch (err) {
21099
21224
  setRefusal(err instanceof Error ? err.message : String(err));
@@ -21130,7 +21255,14 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21130
21255
  })]
21131
21256
  }),
21132
21257
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ActivationLine, { row }),
21133
- !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotSourceList, { sources: row.sources }),
21258
+ !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotSourceList, {
21259
+ sources: row.sources,
21260
+ tracked: savedTracked
21261
+ }),
21262
+ !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ImpliedSourceList, {
21263
+ sources: implied,
21264
+ tracked: savedTracked
21265
+ }),
21134
21266
  editing && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21135
21267
  className: "flex flex-col gap-2",
21136
21268
  children: [
@@ -21140,7 +21272,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21140
21272
  children: draft.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
21141
21273
  type: "button",
21142
21274
  "aria-label": `Remove ${nameOf(id)}`,
21143
- onClick: () => setDraft(togglePick(draft, id, descriptor.cardinality)),
21275
+ onClick: () => removePick(id),
21144
21276
  className: "inline-flex items-center gap-1 rounded-full bg-primary/15 px-2 py-0.5 text-[11px] text-foreground",
21145
21277
  children: [nameOf(id), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(X, { className: "h-3 w-3" })]
21146
21278
  }) }, id))
@@ -21210,6 +21342,17 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21210
21342
  ]
21211
21343
  }) }, c.deviceId))
21212
21344
  }),
21345
+ savedTracked !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrackedToggles, {
21346
+ options: trackedOptions({
21347
+ picks: draft,
21348
+ invalidPicks,
21349
+ implied: impliedIds,
21350
+ tracked: draftTracked
21351
+ }),
21352
+ tracked: draftTracked,
21353
+ nameOf,
21354
+ onToggle: (id) => setDraftTracked(toggleTracked(draftTracked, id))
21355
+ }),
21213
21356
  refusal !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
21214
21357
  role: "alert",
21215
21358
  className: "text-[11px] text-danger break-words",
@@ -21224,7 +21367,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21224
21367
  children: "Cancel"
21225
21368
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
21226
21369
  size: "sm",
21227
- disabled: !isDirty(saved, draft) || setSlot.isPending,
21370
+ disabled: !(isDirty(saved, draft) || savedTracked !== void 0 && isTrackedDirty(savedTracked, draftTracked)) || setSlot.isPending,
21228
21371
  onClick: () => void save(),
21229
21372
  children: "Save"
21230
21373
  })]
@@ -21246,11 +21389,11 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21246
21389
  * section (D14). The panel STORES NOTHING: every card is one row of
21247
21390
  * `device-extension.listSlots`, read by the slot's owner from the store it
21248
21391
  * already has, and every save is `setSlot`, written by that owner through its
21249
- * existing path. The hand-written "Linked devices" and "Virtual doorbell"
21250
- * sections stay beside it until the live measurement says the two surfaces
21251
- * agree for every camera (slice 1 of the design); both write the same store.
21392
+ * existing path. It is the only editor of what it shows: the hand-written
21393
+ * "Linked devices" and "Virtual doorbell" sections it replaced were retired
21394
+ * once the live read matched them on every measured camera (D655).
21252
21395
  *
21253
- * Slice 1 renders ASSOCIATION cards only (a device multiselect). A `graft`
21396
+ * It renders ASSOCIATION cards only (a device multiselect). A `graft`
21254
21397
  * slot (slice 2) gets a read-only card here until its editor exists.
21255
21398
  *
21256
21399
  * Absence is claimed only from an answer (D315): pending, failed and empty
@@ -56493,7 +56636,6 @@ exports.CoverInlineControl = CoverInlineControl;
56493
56636
  exports.CoverPanel = CoverPanel;
56494
56637
  exports.CustomFieldRenderersProvider = CustomFieldRenderersProvider;
56495
56638
  exports.DEFAULT_COLOR = DEFAULT_COLOR;
56496
- exports.DEVICE_AGGREGATE_QUERY_KEY = DEVICE_AGGREGATE_QUERY_KEY;
56497
56639
  exports.DEVICE_COLUMNS = DEVICE_COLUMNS;
56498
56640
  exports.DEVICE_LIST_PAGE_SIZE_KEY = DEVICE_LIST_PAGE_SIZE_KEY;
56499
56641
  exports.DEVICE_LIST_PAGE_SIZE_OPTIONS = DEVICE_LIST_PAGE_SIZE_OPTIONS;
@@ -56537,7 +56679,6 @@ exports.DummyHeroCard = DummyHeroCard;
56537
56679
  exports.DummyInline = DummyInline;
56538
56680
  exports.EMPTY_DATA_TABLE_FILTER = EMPTY_DATA_TABLE_FILTER;
56539
56681
  exports.EVENT_KIND_ICONS = EVENT_KIND_ICONS;
56540
- exports.EXTENSION_SLOTS_QUERY_KEY = EXTENSION_SLOTS_QUERY_KEY;
56541
56682
  exports.EmptyState = EmptyState;
56542
56683
  exports.ErrorBox = ErrorBox;
56543
56684
  exports.EventKindGlyph = EventKindGlyph;
@@ -56780,7 +56921,6 @@ exports.hubWsUrl = hubWsUrl;
56780
56921
  exports.humanDuration = humanDuration;
56781
56922
  exports.humidifierTint = humidifierTint;
56782
56923
  exports.initialScrubState = initialScrubState;
56783
- exports.invalidateExtensionSurfaces = invalidateExtensionSurfaces;
56784
56924
  exports.isAbsentProvider = isAbsentProvider;
56785
56925
  exports.isAbsentProvider$1 = isAbsentProvider;
56786
56926
  exports.isDataTableFilterActive = isDataTableFilterActive;
@@ -57002,13 +57142,18 @@ exports.useControlGetStatus = useControlGetStatus;
57002
57142
  exports.useControlSetValue = useControlSetValue;
57003
57143
  exports.useCoreBlocksCompile = useCoreBlocksCompile;
57004
57144
  exports.useCoreBlocksCreate = useCoreBlocksCreate;
57145
+ exports.useCoreBlocksCreateComposition = useCoreBlocksCreateComposition;
57005
57146
  exports.useCoreBlocksDelete = useCoreBlocksDelete;
57006
57147
  exports.useCoreBlocksGet = useCoreBlocksGet;
57148
+ exports.useCoreBlocksGetComposition = useCoreBlocksGetComposition;
57007
57149
  exports.useCoreBlocksGetTypeDefs = useCoreBlocksGetTypeDefs;
57008
57150
  exports.useCoreBlocksList = useCoreBlocksList;
57151
+ exports.useCoreBlocksListCompositions = useCoreBlocksListCompositions;
57009
57152
  exports.useCoreBlocksRestart = useCoreBlocksRestart;
57010
57153
  exports.useCoreBlocksSetEnabled = useCoreBlocksSetEnabled;
57011
57154
  exports.useCoreBlocksUpdate = useCoreBlocksUpdate;
57155
+ exports.useCoreBlocksUpdateComposition = useCoreBlocksUpdateComposition;
57156
+ exports.useCoreBlocksValidateComposition = useCoreBlocksValidateComposition;
57012
57157
  exports.useCoverClose = useCoverClose;
57013
57158
  exports.useCoverGetStatus = useCoverGetStatus;
57014
57159
  exports.useCoverOpen = useCoverOpen;
@@ -57086,7 +57231,6 @@ exports.useDeviceManagerAdoptionRelease = useDeviceManagerAdoptionRelease;
57086
57231
  exports.useDeviceManagerAdoptionResync = useDeviceManagerAdoptionResync;
57087
57232
  exports.useDeviceManagerAdoptionStartJob = useDeviceManagerAdoptionStartJob;
57088
57233
  exports.useDeviceManagerAllocateDeviceId = useDeviceManagerAllocateDeviceId;
57089
- exports.useDeviceManagerApplyDeviceSettingsPatch = useDeviceManagerApplyDeviceSettingsPatch;
57090
57234
  exports.useDeviceManagerApplyInitialMeta = useDeviceManagerApplyInitialMeta;
57091
57235
  exports.useDeviceManagerCreateDevice = useDeviceManagerCreateDevice;
57092
57236
  exports.useDeviceManagerDisable = useDeviceManagerDisable;
@@ -57104,10 +57248,8 @@ exports.useDeviceManagerGetConfigSchema = useDeviceManagerGetConfigSchema;
57104
57248
  exports.useDeviceManagerGetCreationSchema = useDeviceManagerGetCreationSchema;
57105
57249
  exports.useDeviceManagerGetDevice = useDeviceManagerGetDevice;
57106
57250
  exports.useDeviceManagerGetDeviceAggregate = useDeviceManagerGetDeviceAggregate;
57107
- exports.useDeviceManagerGetDeviceLiveContribution = useDeviceManagerGetDeviceLiveContribution;
57108
57251
  exports.useDeviceManagerGetDeviceLiveInfoAggregate = useDeviceManagerGetDeviceLiveInfoAggregate;
57109
57252
  exports.useDeviceManagerGetDeviceSettingsAggregate = useDeviceManagerGetDeviceSettingsAggregate;
57110
- exports.useDeviceManagerGetDeviceSettingsContribution = useDeviceManagerGetDeviceSettingsContribution;
57111
57253
  exports.useDeviceManagerGetDeviceStatusAggregate = useDeviceManagerGetDeviceStatusAggregate;
57112
57254
  exports.useDeviceManagerGetDeviceStatusAggregateBatch = useDeviceManagerGetDeviceStatusAggregateBatch;
57113
57255
  exports.useDeviceManagerGetLinkedDevices = useDeviceManagerGetLinkedDevices;
@@ -57203,10 +57345,7 @@ exports.useDeviceStateSlice$1 = useDeviceStateSlice;
57203
57345
  exports.useDeviceStatusGetStatus = useDeviceStatusGetStatus;
57204
57346
  exports.useDeviceWebrtc = useDeviceWebrtc;
57205
57347
  exports.useDevices = useDevices;
57206
- exports.useDoorbellApplyDeviceSettingsPatch = useDoorbellApplyDeviceSettingsPatch;
57207
57348
  exports.useDoorbellEvents = useDoorbellEvents;
57208
- exports.useDoorbellGetDeviceLiveContribution = useDoorbellGetDeviceLiveContribution;
57209
- exports.useDoorbellGetDeviceSettingsContribution = useDoorbellGetDeviceSettingsContribution;
57210
57349
  exports.useDoorbellGetStatus = useDoorbellGetStatus;
57211
57350
  exports.useEnumSensorGetStatus = useEnumSensorGetStatus;
57212
57351
  exports.useEventEmitterGetStatus = useEventEmitterGetStatus;
package/dist/index.js CHANGED
@@ -6822,6 +6822,16 @@ var useCoreBlocksRestart = trpc.coreBlocks.restart.useMutation;
6822
6822
  var useCoreBlocksCompile = trpc.coreBlocks.compile.useMutation;
6823
6823
  /** Generated alias around `trpc.coreBlocks.getTypeDefs.useQuery`. */
6824
6824
  var useCoreBlocksGetTypeDefs = trpc.coreBlocks.getTypeDefs.useQuery;
6825
+ /** Generated alias around `trpc.coreBlocks.createComposition.useMutation`. */
6826
+ var useCoreBlocksCreateComposition = trpc.coreBlocks.createComposition.useMutation;
6827
+ /** Generated alias around `trpc.coreBlocks.updateComposition.useMutation`. */
6828
+ var useCoreBlocksUpdateComposition = trpc.coreBlocks.updateComposition.useMutation;
6829
+ /** Generated alias around `trpc.coreBlocks.getComposition.useQuery`. */
6830
+ var useCoreBlocksGetComposition = trpc.coreBlocks.getComposition.useQuery;
6831
+ /** Generated alias around `trpc.coreBlocks.listCompositions.useQuery`. */
6832
+ var useCoreBlocksListCompositions = trpc.coreBlocks.listCompositions.useQuery;
6833
+ /** Generated alias around `trpc.coreBlocks.validateComposition.useMutation`. */
6834
+ var useCoreBlocksValidateComposition = trpc.coreBlocks.validateComposition.useMutation;
6825
6835
  /** Generated alias around `trpc.cover.open.useMutation`. */
6826
6836
  var useCoverOpen = trpc.cover.open.useMutation;
6827
6837
  /** Generated alias around `trpc.cover.close.useMutation`. */
@@ -7104,12 +7114,6 @@ var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
7104
7114
  var useDeviceManagerGetDeviceStatusAggregate = trpc.deviceManager.getDeviceStatusAggregate.useQuery;
7105
7115
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
7106
7116
  var useDeviceManagerGetDeviceStatusAggregateBatch = trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery;
7107
- /** Generated alias around `trpc.deviceManager.getDeviceSettingsContribution.useQuery`. */
7108
- var useDeviceManagerGetDeviceSettingsContribution = trpc.deviceManager.getDeviceSettingsContribution.useQuery;
7109
- /** Generated alias around `trpc.deviceManager.getDeviceLiveContribution.useQuery`. */
7110
- var useDeviceManagerGetDeviceLiveContribution = trpc.deviceManager.getDeviceLiveContribution.useQuery;
7111
- /** Generated alias around `trpc.deviceManager.applyDeviceSettingsPatch.useMutation`. */
7112
- var useDeviceManagerApplyDeviceSettingsPatch = trpc.deviceManager.applyDeviceSettingsPatch.useMutation;
7113
7117
  /** Generated alias around `trpc.deviceOps.getStreamSources.useQuery`. */
7114
7118
  var useDeviceOpsGetStreamSources = trpc.deviceOps.getStreamSources.useQuery;
7115
7119
  /** Generated alias around `trpc.deviceOps.getConfigEntries.useQuery`. */
@@ -7164,12 +7168,6 @@ var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
7164
7168
  var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
7165
7169
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
7166
7170
  var useDoorbellGetStatus = trpc.doorbell.getStatus.useQuery;
7167
- /** Generated alias around `trpc.doorbell.getDeviceSettingsContribution.useQuery`. */
7168
- var useDoorbellGetDeviceSettingsContribution = trpc.doorbell.getDeviceSettingsContribution.useQuery;
7169
- /** Generated alias around `trpc.doorbell.getDeviceLiveContribution.useQuery`. */
7170
- var useDoorbellGetDeviceLiveContribution = trpc.doorbell.getDeviceLiveContribution.useQuery;
7171
- /** Generated alias around `trpc.doorbell.applyDeviceSettingsPatch.useMutation`. */
7172
- var useDoorbellApplyDeviceSettingsPatch = trpc.doorbell.applyDeviceSettingsPatch.useMutation;
7173
7171
  /** Generated alias around `trpc.enumSensor.getStatus.useQuery`. */
7174
7172
  var useEnumSensorGetStatus = trpc.enumSensor.getStatus.useQuery;
7175
7173
  /** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
@@ -12303,8 +12301,8 @@ function selectedDeviceOptions(options, selected) {
12303
12301
  * `device-select-filter.ts`). No server-computed option list is involved —
12304
12302
  * the form field carries only the filter. Value(s) are device ids as strings.
12305
12303
  *
12306
- * The multi variant mirrors the "Linked devices" searchable combobox UX
12307
- * (removable chips + typeahead dropdown); the single variant is a native
12304
+ * The multi variant is a searchable combobox (removable chips + typeahead
12305
+ * dropdown); the single variant is a native
12308
12306
  * select. Both are inline in ui-library (like `node-select`) so any host that
12309
12307
  * renders the shared form field gets them without extra registration.
12310
12308
  */
@@ -20892,16 +20890,6 @@ function ClipsSection({ deviceId }) {
20892
20890
  });
20893
20891
  }
20894
20892
  //#endregion
20895
- //#region src/composites/extensions/extension-invalidation.ts
20896
- /** tRPC v11 query-key prefix of `deviceManager.getDeviceAggregate`. */
20897
- var DEVICE_AGGREGATE_QUERY_KEY = [["deviceManager", "getDeviceAggregate"]];
20898
- /** tRPC v11 query-key prefix of `deviceExtension.listSlots`. */
20899
- var EXTENSION_SLOTS_QUERY_KEY = [["deviceExtension", "listSlots"]];
20900
- /** Re-read both surfaces over the linked-devices / doorbell stores. */
20901
- async function invalidateExtensionSurfaces(client) {
20902
- await Promise.all([client.invalidateQueries({ queryKey: DEVICE_AGGREGATE_QUERY_KEY }), client.invalidateQueries({ queryKey: EXTENSION_SLOTS_QUERY_KEY })]);
20903
- }
20904
- //#endregion
20905
20893
  //#region src/composites/extensions/extensions-view-state.ts
20906
20894
  /**
20907
20895
  * What the Extensions section may CLAIM, from what `listSlots` answered
@@ -20966,6 +20954,70 @@ function searchCandidates(candidates, draft, query) {
20966
20954
  function isDirty(saved, draft) {
20967
20955
  return saved.length !== draft.length || saved.some((id, i) => draft[i] !== id);
20968
20956
  }
20957
+ /**
20958
+ * The tracked-event opt-in a slot's value carries, or `undefined` when it
20959
+ * carries none — every slot but `linked-devices`, and a `linked-devices` row
20960
+ * from a server older than D655. `undefined` is "this owner offers no
20961
+ * opt-in", never "nothing is opted in": the card then shows no toggle rather
20962
+ * than a row of unticked ones it could not save.
20963
+ */
20964
+ function trackedOptInOf(value) {
20965
+ return value.slot === "linked-devices" ? value.trackedDeviceIds : void 0;
20966
+ }
20967
+ /** Flip one device's tracked-event opt-in. */
20968
+ function toggleTracked(tracked, deviceId) {
20969
+ return tracked.includes(deviceId) ? tracked.filter((id) => id !== deviceId) : [...tracked, deviceId];
20970
+ }
20971
+ /** Whether two opt-ins differ as SETS — the order carries no meaning. */
20972
+ function isTrackedDirty(saved, draft) {
20973
+ return saved.length !== draft.length || saved.some((id) => !draft.includes(id));
20974
+ }
20975
+ /**
20976
+ * One toggle per device the camera links — the old section's set (D655):
20977
+ * the valid picks, then what the owner links by structure (tree children, a
20978
+ * picked container's child — never the container itself, D356), then every
20979
+ * opted-in device that is linked no more, so a stored opt-in is always
20980
+ * visible and can always be removed.
20981
+ */
20982
+ function trackedOptions(input) {
20983
+ const out = [];
20984
+ const seen = /* @__PURE__ */ new Set();
20985
+ const add = (deviceId, origin) => {
20986
+ if (seen.has(deviceId)) return;
20987
+ seen.add(deviceId);
20988
+ out.push({
20989
+ deviceId,
20990
+ origin
20991
+ });
20992
+ };
20993
+ for (const id of input.picks) if (!input.invalidPicks.includes(id)) add(id, "pick");
20994
+ for (const id of input.implied) add(id, "implied");
20995
+ for (const id of input.tracked) add(id, "not-linked");
20996
+ return out;
20997
+ }
20998
+ /**
20999
+ * The opt-in after one device is removed from the draft picks: its toggle
21000
+ * goes with it, unless the camera still links it by structure.
21001
+ */
21002
+ function untrackUnpicked(tracked, deviceId, implied) {
21003
+ return implied.includes(deviceId) ? tracked : tracked.filter((id) => id !== deviceId);
21004
+ }
21005
+ /**
21006
+ * The value a Save sends. The opt-in travels only when the owner offered one,
21007
+ * and then WHOLE: it replaces the stored one, and the owner accepts any id it
21008
+ * already stored, so what was read can be sent back unchanged (D655).
21009
+ */
21010
+ function slotWriteValue(saved, deviceIds, tracked) {
21011
+ if (saved.slot === "linked-devices" && tracked !== void 0) return {
21012
+ slot: "linked-devices",
21013
+ deviceIds: [...deviceIds],
21014
+ trackedDeviceIds: [...tracked]
21015
+ };
21016
+ return {
21017
+ slot: saved.slot,
21018
+ deviceIds: [...deviceIds]
21019
+ };
21020
+ }
20969
21021
  //#endregion
20970
21022
  //#region src/composites/extensions/AssociationSlotCard.tsx
20971
21023
  /**
@@ -20982,6 +21034,11 @@ function isDirty(saved, draft) {
20982
21034
  * shown with its reason and never silently dropped from the draft.
20983
21035
  * - A gate owned by ANOTHER authority (the doorbell wrapper's binding) is
20984
21036
  * shown read-only, naming that authority (D62).
21037
+ * - A slot whose value carries a tracked-event opt-in (`linked-devices`,
21038
+ * D655) gets one toggle per LINKED device — the picks, what the owner links
21039
+ * by structure (`impliedSources`: tree children, never a container, D356)
21040
+ * and any stored opt-in no longer linked, so each can be removed — saved
21041
+ * with the picks, whole.
20985
21042
  */
20986
21043
  var HEALTH_LABEL = {
20987
21044
  ok: "OK",
@@ -20996,7 +21053,7 @@ var HEALTH_VARIANT = {
20996
21053
  unavailable: "warning"
20997
21054
  };
20998
21055
  /** The saved sources, each with its health — a bad one is shown, never hidden. */
20999
- function SlotSourceList({ sources }) {
21056
+ function SlotSourceList({ sources, tracked }) {
21000
21057
  if (sources.length === 0) return /* @__PURE__ */ jsx("p", {
21001
21058
  className: "text-[11px] text-foreground-subtle italic",
21002
21059
  children: "No devices picked."
@@ -21014,6 +21071,10 @@ function SlotSourceList({ sources }) {
21014
21071
  variant: HEALTH_VARIANT[s.health],
21015
21072
  children: HEALTH_LABEL[s.health]
21016
21073
  }),
21074
+ tracked?.includes(s.deviceId) === true && /* @__PURE__ */ jsx(Badge, {
21075
+ variant: "info",
21076
+ children: "Tracked events"
21077
+ }),
21017
21078
  s.detail !== void 0 && /* @__PURE__ */ jsx("span", {
21018
21079
  className: "text-[10px] text-foreground-subtle",
21019
21080
  children: s.detail
@@ -21037,11 +21098,75 @@ function ActivationLine({ row }) {
21037
21098
  ]
21038
21099
  });
21039
21100
  }
21101
+ /**
21102
+ * What the owner links by structure — tree children, a picked container's
21103
+ * child (D356). Shown, never editable as a pick: removing one is not the
21104
+ * editor's to do.
21105
+ */
21106
+ function ImpliedSourceList({ sources, tracked }) {
21107
+ if (sources.length === 0) return null;
21108
+ return /* @__PURE__ */ jsxs("div", {
21109
+ className: "flex flex-col gap-1",
21110
+ children: [/* @__PURE__ */ jsx("span", {
21111
+ className: "text-[10px] text-foreground-subtle",
21112
+ children: "Always linked (device tree):"
21113
+ }), /* @__PURE__ */ jsx("ul", {
21114
+ "aria-label": "Always linked",
21115
+ className: "flex flex-col gap-1",
21116
+ children: sources.map((s) => /* @__PURE__ */ jsxs("li", {
21117
+ className: "flex flex-wrap items-center gap-2 text-[11px]",
21118
+ children: [/* @__PURE__ */ jsx("span", {
21119
+ className: "text-foreground",
21120
+ children: s.name ?? `Device ${s.deviceId}`
21121
+ }), tracked?.includes(s.deviceId) === true && /* @__PURE__ */ jsx(Badge, {
21122
+ variant: "info",
21123
+ children: "Tracked events"
21124
+ })]
21125
+ }, s.deviceId))
21126
+ })]
21127
+ });
21128
+ }
21129
+ var ORIGIN_NOTE = {
21130
+ pick: null,
21131
+ implied: "always linked",
21132
+ "not-linked": "not linked any more — untick to remove"
21133
+ };
21134
+ /** One opt-in toggle per linked device: does it produce tracked events here? */
21135
+ function TrackedToggles({ options, tracked, nameOf, onToggle }) {
21136
+ if (options.length === 0) return null;
21137
+ return /* @__PURE__ */ jsxs("fieldset", {
21138
+ className: "flex flex-col gap-1",
21139
+ children: [/* @__PURE__ */ jsx("legend", {
21140
+ className: "text-[10px] text-foreground-subtle",
21141
+ children: "Produce tracked events on this camera (opt-in):"
21142
+ }), options.map(({ deviceId: id, origin }) => /* @__PURE__ */ jsxs("label", {
21143
+ className: "flex items-center gap-2 text-[11px] text-foreground",
21144
+ children: [
21145
+ /* @__PURE__ */ jsx("input", {
21146
+ type: "checkbox",
21147
+ "aria-label": `Tracked events from ${nameOf(id)}`,
21148
+ checked: tracked.includes(id),
21149
+ onChange: () => onToggle(id)
21150
+ }),
21151
+ nameOf(id),
21152
+ ORIGIN_NOTE[origin] !== null && /* @__PURE__ */ jsxs("span", {
21153
+ className: "text-[10px] text-foreground-subtle",
21154
+ children: ["· ", ORIGIN_NOTE[origin]]
21155
+ })
21156
+ ]
21157
+ }, id))]
21158
+ });
21159
+ }
21040
21160
  function AssociationSlotCard({ deviceId, row, onSaved }) {
21041
21161
  const descriptor = EXTENSION_SLOTS[row.slot].descriptor;
21042
21162
  const saved = row.value.deviceIds;
21163
+ const savedTracked = trackedOptInOf(row.value);
21164
+ const implied = row.impliedSources ?? [];
21165
+ const impliedIds = implied.map((s) => s.deviceId);
21166
+ const invalidPicks = row.sources.filter((s) => s.health === "unavailable").map((s) => s.deviceId);
21043
21167
  const [editing, setEditing] = useState(false);
21044
21168
  const [draft, setDraft] = useState(saved);
21169
+ const [draftTracked, setDraftTracked] = useState(savedTracked ?? []);
21045
21170
  const [search, setSearch] = useState("");
21046
21171
  const [refusal, setRefusal] = useState(null);
21047
21172
  const candidatesQuery = useDeviceExtensionListCandidates({
@@ -21049,11 +21174,15 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21049
21174
  slotRef: row.slotRef
21050
21175
  }, { enabled: editing });
21051
21176
  const setSlot = useDeviceExtensionSetSlot();
21052
- const queryClient = useQueryClient();
21053
21177
  const candidates = candidatesQuery.data?.candidates ?? [];
21054
- const nameOf = (id) => candidates.find((c) => c.deviceId === id)?.name ?? row.sources.find((s) => s.deviceId === id)?.name ?? `Device ${id}`;
21178
+ const nameOf = (id) => candidates.find((c) => c.deviceId === id)?.name ?? row.sources.find((s) => s.deviceId === id)?.name ?? implied.find((s) => s.deviceId === id)?.name ?? `Device ${id}`;
21179
+ const removePick = (id) => {
21180
+ setDraft(togglePick(draft, id, descriptor.cardinality));
21181
+ setDraftTracked(untrackUnpicked(draftTracked, id, impliedIds));
21182
+ };
21055
21183
  const startEditing = () => {
21056
21184
  setDraft(saved);
21185
+ setDraftTracked(savedTracked ?? []);
21057
21186
  setRefusal(null);
21058
21187
  setEditing(true);
21059
21188
  };
@@ -21063,13 +21192,9 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21063
21192
  await setSlot.mutateAsync({
21064
21193
  deviceId,
21065
21194
  slotRef: row.slotRef,
21066
- value: {
21067
- slot: row.value.slot,
21068
- deviceIds: [...draft]
21069
- }
21195
+ value: slotWriteValue(row.value, draft, savedTracked === void 0 ? void 0 : draftTracked)
21070
21196
  });
21071
21197
  setEditing(false);
21072
- await invalidateExtensionSurfaces(queryClient);
21073
21198
  onSaved();
21074
21199
  } catch (err) {
21075
21200
  setRefusal(err instanceof Error ? err.message : String(err));
@@ -21106,7 +21231,14 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21106
21231
  })]
21107
21232
  }),
21108
21233
  /* @__PURE__ */ jsx(ActivationLine, { row }),
21109
- !editing && /* @__PURE__ */ jsx(SlotSourceList, { sources: row.sources }),
21234
+ !editing && /* @__PURE__ */ jsx(SlotSourceList, {
21235
+ sources: row.sources,
21236
+ tracked: savedTracked
21237
+ }),
21238
+ !editing && /* @__PURE__ */ jsx(ImpliedSourceList, {
21239
+ sources: implied,
21240
+ tracked: savedTracked
21241
+ }),
21110
21242
  editing && /* @__PURE__ */ jsxs("div", {
21111
21243
  className: "flex flex-col gap-2",
21112
21244
  children: [
@@ -21116,7 +21248,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21116
21248
  children: draft.map((id) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
21117
21249
  type: "button",
21118
21250
  "aria-label": `Remove ${nameOf(id)}`,
21119
- onClick: () => setDraft(togglePick(draft, id, descriptor.cardinality)),
21251
+ onClick: () => removePick(id),
21120
21252
  className: "inline-flex items-center gap-1 rounded-full bg-primary/15 px-2 py-0.5 text-[11px] text-foreground",
21121
21253
  children: [nameOf(id), /* @__PURE__ */ jsx(X, { className: "h-3 w-3" })]
21122
21254
  }) }, id))
@@ -21186,6 +21318,17 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21186
21318
  ]
21187
21319
  }) }, c.deviceId))
21188
21320
  }),
21321
+ savedTracked !== void 0 && /* @__PURE__ */ jsx(TrackedToggles, {
21322
+ options: trackedOptions({
21323
+ picks: draft,
21324
+ invalidPicks,
21325
+ implied: impliedIds,
21326
+ tracked: draftTracked
21327
+ }),
21328
+ tracked: draftTracked,
21329
+ nameOf,
21330
+ onToggle: (id) => setDraftTracked(toggleTracked(draftTracked, id))
21331
+ }),
21189
21332
  refusal !== null && /* @__PURE__ */ jsxs("p", {
21190
21333
  role: "alert",
21191
21334
  className: "text-[11px] text-danger break-words",
@@ -21200,7 +21343,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21200
21343
  children: "Cancel"
21201
21344
  }), /* @__PURE__ */ jsx(Button, {
21202
21345
  size: "sm",
21203
- disabled: !isDirty(saved, draft) || setSlot.isPending,
21346
+ disabled: !(isDirty(saved, draft) || savedTracked !== void 0 && isTrackedDirty(savedTracked, draftTracked)) || setSlot.isPending,
21204
21347
  onClick: () => void save(),
21205
21348
  children: "Save"
21206
21349
  })]
@@ -21222,11 +21365,11 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21222
21365
  * section (D14). The panel STORES NOTHING: every card is one row of
21223
21366
  * `device-extension.listSlots`, read by the slot's owner from the store it
21224
21367
  * already has, and every save is `setSlot`, written by that owner through its
21225
- * existing path. The hand-written "Linked devices" and "Virtual doorbell"
21226
- * sections stay beside it until the live measurement says the two surfaces
21227
- * agree for every camera (slice 1 of the design); both write the same store.
21368
+ * existing path. It is the only editor of what it shows: the hand-written
21369
+ * "Linked devices" and "Virtual doorbell" sections it replaced were retired
21370
+ * once the live read matched them on every measured camera (D655).
21228
21371
  *
21229
- * Slice 1 renders ASSOCIATION cards only (a device multiselect). A `graft`
21372
+ * It renders ASSOCIATION cards only (a device multiselect). A `graft`
21230
21373
  * slot (slice 2) gets a read-only card here until its editor exists.
21231
21374
  *
21232
21375
  * Absence is claimed only from an answer (D315): pending, failed and empty
@@ -56406,4 +56549,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-vfWTm6qv.js").t
56406
56549
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
56407
56550
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-DMkchqO1.js").then((m) => ({ default: m.PrivacyMaskSettings })));
56408
56551
  //#endregion
56409
- 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_AGGREGATE_QUERY_KEY, 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, EXTENSION_SLOTS_QUERY_KEY, 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, invalidateExtensionSurfaces, 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, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, 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, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, 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, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, 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 };
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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.2.207",
3
+ "version": "1.2.209",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",
@@ -1,9 +0,0 @@
1
- import { QueryClient } from '@tanstack/react-query';
2
- /** tRPC v11 query-key prefix of `deviceManager.getDeviceAggregate`. */
3
- export declare const DEVICE_AGGREGATE_QUERY_KEY: readonly [readonly ["deviceManager", "getDeviceAggregate"]];
4
- /** tRPC v11 query-key prefix of `deviceExtension.listSlots`. */
5
- export declare const EXTENSION_SLOTS_QUERY_KEY: readonly [readonly ["deviceExtension", "listSlots"]];
6
- /** The one method of a query client these helpers use. */
7
- export type QueryInvalidator = Pick<QueryClient, 'invalidateQueries'>;
8
- /** Re-read both surfaces over the linked-devices / doorbell stores. */
9
- export declare function invalidateExtensionSurfaces(client: QueryInvalidator): Promise<void>;