@camstack/ui-library 1.2.207 → 1.2.208

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';
@@ -609,12 +609,6 @@ export declare const useDeviceManagerTestField: typeof trpc.deviceManager.testFi
609
609
  export declare const useDeviceManagerGetDeviceStatusAggregate: typeof trpc.deviceManager.getDeviceStatusAggregate.useQuery;
610
610
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
611
611
  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
612
  /** Generated alias around `trpc.deviceOps.getStreamSources.useQuery`. */
619
613
  export declare const useDeviceOpsGetStreamSources: typeof trpc.deviceOps.getStreamSources.useQuery;
620
614
  /** Generated alias around `trpc.deviceOps.getConfigEntries.useQuery`. */
@@ -669,12 +663,6 @@ export declare const useDeviceStateSetCapSlice: typeof trpc.deviceState.setCapSl
669
663
  export declare const useDeviceStatusGetStatus: typeof trpc.deviceStatus.getStatus.useQuery;
670
664
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
671
665
  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
666
  /** Generated alias around `trpc.enumSensor.getStatus.useQuery`. */
679
667
  export declare const useEnumSensorGetStatus: typeof trpc.enumSensor.getStatus.useQuery;
680
668
  /** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
package/dist/index.cjs CHANGED
@@ -7128,12 +7128,6 @@ var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
7128
7128
  var useDeviceManagerGetDeviceStatusAggregate = trpc.deviceManager.getDeviceStatusAggregate.useQuery;
7129
7129
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
7130
7130
  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
7131
  /** Generated alias around `trpc.deviceOps.getStreamSources.useQuery`. */
7138
7132
  var useDeviceOpsGetStreamSources = trpc.deviceOps.getStreamSources.useQuery;
7139
7133
  /** Generated alias around `trpc.deviceOps.getConfigEntries.useQuery`. */
@@ -7188,12 +7182,6 @@ var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
7188
7182
  var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
7189
7183
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
7190
7184
  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
7185
  /** Generated alias around `trpc.enumSensor.getStatus.useQuery`. */
7198
7186
  var useEnumSensorGetStatus = trpc.enumSensor.getStatus.useQuery;
7199
7187
  /** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
@@ -12327,8 +12315,8 @@ function selectedDeviceOptions(options, selected) {
12327
12315
  * `device-select-filter.ts`). No server-computed option list is involved —
12328
12316
  * the form field carries only the filter. Value(s) are device ids as strings.
12329
12317
  *
12330
- * The multi variant mirrors the "Linked devices" searchable combobox UX
12331
- * (removable chips + typeahead dropdown); the single variant is a native
12318
+ * The multi variant is a searchable combobox (removable chips + typeahead
12319
+ * dropdown); the single variant is a native
12332
12320
  * select. Both are inline in ui-library (like `node-select`) so any host that
12333
12321
  * renders the shared form field gets them without extra registration.
12334
12322
  */
@@ -20916,16 +20904,6 @@ function ClipsSection({ deviceId }) {
20916
20904
  });
20917
20905
  }
20918
20906
  //#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
20907
  //#region src/composites/extensions/extensions-view-state.ts
20930
20908
  /**
20931
20909
  * What the Extensions section may CLAIM, from what `listSlots` answered
@@ -20990,6 +20968,70 @@ function searchCandidates(candidates, draft, query) {
20990
20968
  function isDirty(saved, draft) {
20991
20969
  return saved.length !== draft.length || saved.some((id, i) => draft[i] !== id);
20992
20970
  }
20971
+ /**
20972
+ * The tracked-event opt-in a slot's value carries, or `undefined` when it
20973
+ * carries none — every slot but `linked-devices`, and a `linked-devices` row
20974
+ * from a server older than D655. `undefined` is "this owner offers no
20975
+ * opt-in", never "nothing is opted in": the card then shows no toggle rather
20976
+ * than a row of unticked ones it could not save.
20977
+ */
20978
+ function trackedOptInOf(value) {
20979
+ return value.slot === "linked-devices" ? value.trackedDeviceIds : void 0;
20980
+ }
20981
+ /** Flip one device's tracked-event opt-in. */
20982
+ function toggleTracked(tracked, deviceId) {
20983
+ return tracked.includes(deviceId) ? tracked.filter((id) => id !== deviceId) : [...tracked, deviceId];
20984
+ }
20985
+ /** Whether two opt-ins differ as SETS — the order carries no meaning. */
20986
+ function isTrackedDirty(saved, draft) {
20987
+ return saved.length !== draft.length || saved.some((id) => !draft.includes(id));
20988
+ }
20989
+ /**
20990
+ * One toggle per device the camera links — the old section's set (D655):
20991
+ * the valid picks, then what the owner links by structure (tree children, a
20992
+ * picked container's child — never the container itself, D356), then every
20993
+ * opted-in device that is linked no more, so a stored opt-in is always
20994
+ * visible and can always be removed.
20995
+ */
20996
+ function trackedOptions(input) {
20997
+ const out = [];
20998
+ const seen = /* @__PURE__ */ new Set();
20999
+ const add = (deviceId, origin) => {
21000
+ if (seen.has(deviceId)) return;
21001
+ seen.add(deviceId);
21002
+ out.push({
21003
+ deviceId,
21004
+ origin
21005
+ });
21006
+ };
21007
+ for (const id of input.picks) if (!input.invalidPicks.includes(id)) add(id, "pick");
21008
+ for (const id of input.implied) add(id, "implied");
21009
+ for (const id of input.tracked) add(id, "not-linked");
21010
+ return out;
21011
+ }
21012
+ /**
21013
+ * The opt-in after one device is removed from the draft picks: its toggle
21014
+ * goes with it, unless the camera still links it by structure.
21015
+ */
21016
+ function untrackUnpicked(tracked, deviceId, implied) {
21017
+ return implied.includes(deviceId) ? tracked : tracked.filter((id) => id !== deviceId);
21018
+ }
21019
+ /**
21020
+ * The value a Save sends. The opt-in travels only when the owner offered one,
21021
+ * and then WHOLE: it replaces the stored one, and the owner accepts any id it
21022
+ * already stored, so what was read can be sent back unchanged (D655).
21023
+ */
21024
+ function slotWriteValue(saved, deviceIds, tracked) {
21025
+ if (saved.slot === "linked-devices" && tracked !== void 0) return {
21026
+ slot: "linked-devices",
21027
+ deviceIds: [...deviceIds],
21028
+ trackedDeviceIds: [...tracked]
21029
+ };
21030
+ return {
21031
+ slot: saved.slot,
21032
+ deviceIds: [...deviceIds]
21033
+ };
21034
+ }
20993
21035
  //#endregion
20994
21036
  //#region src/composites/extensions/AssociationSlotCard.tsx
20995
21037
  /**
@@ -21006,6 +21048,11 @@ function isDirty(saved, draft) {
21006
21048
  * shown with its reason and never silently dropped from the draft.
21007
21049
  * - A gate owned by ANOTHER authority (the doorbell wrapper's binding) is
21008
21050
  * shown read-only, naming that authority (D62).
21051
+ * - A slot whose value carries a tracked-event opt-in (`linked-devices`,
21052
+ * D655) gets one toggle per LINKED device — the picks, what the owner links
21053
+ * by structure (`impliedSources`: tree children, never a container, D356)
21054
+ * and any stored opt-in no longer linked, so each can be removed — saved
21055
+ * with the picks, whole.
21009
21056
  */
21010
21057
  var HEALTH_LABEL = {
21011
21058
  ok: "OK",
@@ -21020,7 +21067,7 @@ var HEALTH_VARIANT = {
21020
21067
  unavailable: "warning"
21021
21068
  };
21022
21069
  /** The saved sources, each with its health — a bad one is shown, never hidden. */
21023
- function SlotSourceList({ sources }) {
21070
+ function SlotSourceList({ sources, tracked }) {
21024
21071
  if (sources.length === 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
21025
21072
  className: "text-[11px] text-foreground-subtle italic",
21026
21073
  children: "No devices picked."
@@ -21038,6 +21085,10 @@ function SlotSourceList({ sources }) {
21038
21085
  variant: HEALTH_VARIANT[s.health],
21039
21086
  children: HEALTH_LABEL[s.health]
21040
21087
  }),
21088
+ tracked?.includes(s.deviceId) === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
21089
+ variant: "info",
21090
+ children: "Tracked events"
21091
+ }),
21041
21092
  s.detail !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21042
21093
  className: "text-[10px] text-foreground-subtle",
21043
21094
  children: s.detail
@@ -21061,11 +21112,75 @@ function ActivationLine({ row }) {
21061
21112
  ]
21062
21113
  });
21063
21114
  }
21115
+ /**
21116
+ * What the owner links by structure — tree children, a picked container's
21117
+ * child (D356). Shown, never editable as a pick: removing one is not the
21118
+ * editor's to do.
21119
+ */
21120
+ function ImpliedSourceList({ sources, tracked }) {
21121
+ if (sources.length === 0) return null;
21122
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21123
+ className: "flex flex-col gap-1",
21124
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21125
+ className: "text-[10px] text-foreground-subtle",
21126
+ children: "Always linked (device tree):"
21127
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
21128
+ "aria-label": "Always linked",
21129
+ className: "flex flex-col gap-1",
21130
+ children: sources.map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
21131
+ className: "flex flex-wrap items-center gap-2 text-[11px]",
21132
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
21133
+ className: "text-foreground",
21134
+ children: s.name ?? `Device ${s.deviceId}`
21135
+ }), tracked?.includes(s.deviceId) === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Badge, {
21136
+ variant: "info",
21137
+ children: "Tracked events"
21138
+ })]
21139
+ }, s.deviceId))
21140
+ })]
21141
+ });
21142
+ }
21143
+ var ORIGIN_NOTE = {
21144
+ pick: null,
21145
+ implied: "always linked",
21146
+ "not-linked": "not linked any more — untick to remove"
21147
+ };
21148
+ /** One opt-in toggle per linked device: does it produce tracked events here? */
21149
+ function TrackedToggles({ options, tracked, nameOf, onToggle }) {
21150
+ if (options.length === 0) return null;
21151
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
21152
+ className: "flex flex-col gap-1",
21153
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", {
21154
+ className: "text-[10px] text-foreground-subtle",
21155
+ children: "Produce tracked events on this camera (opt-in):"
21156
+ }), options.map(({ deviceId: id, origin }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
21157
+ className: "flex items-center gap-2 text-[11px] text-foreground",
21158
+ children: [
21159
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
21160
+ type: "checkbox",
21161
+ "aria-label": `Tracked events from ${nameOf(id)}`,
21162
+ checked: tracked.includes(id),
21163
+ onChange: () => onToggle(id)
21164
+ }),
21165
+ nameOf(id),
21166
+ ORIGIN_NOTE[origin] !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
21167
+ className: "text-[10px] text-foreground-subtle",
21168
+ children: ["· ", ORIGIN_NOTE[origin]]
21169
+ })
21170
+ ]
21171
+ }, id))]
21172
+ });
21173
+ }
21064
21174
  function AssociationSlotCard({ deviceId, row, onSaved }) {
21065
21175
  const descriptor = _camstack_types.EXTENSION_SLOTS[row.slot].descriptor;
21066
21176
  const saved = row.value.deviceIds;
21177
+ const savedTracked = trackedOptInOf(row.value);
21178
+ const implied = row.impliedSources ?? [];
21179
+ const impliedIds = implied.map((s) => s.deviceId);
21180
+ const invalidPicks = row.sources.filter((s) => s.health === "unavailable").map((s) => s.deviceId);
21067
21181
  const [editing, setEditing] = (0, react$1.useState)(false);
21068
21182
  const [draft, setDraft] = (0, react$1.useState)(saved);
21183
+ const [draftTracked, setDraftTracked] = (0, react$1.useState)(savedTracked ?? []);
21069
21184
  const [search, setSearch] = (0, react$1.useState)("");
21070
21185
  const [refusal, setRefusal] = (0, react$1.useState)(null);
21071
21186
  const candidatesQuery = useDeviceExtensionListCandidates({
@@ -21073,11 +21188,15 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21073
21188
  slotRef: row.slotRef
21074
21189
  }, { enabled: editing });
21075
21190
  const setSlot = useDeviceExtensionSetSlot();
21076
- const queryClient = (0, _tanstack_react_query.useQueryClient)();
21077
21191
  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}`;
21192
+ 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}`;
21193
+ const removePick = (id) => {
21194
+ setDraft(togglePick(draft, id, descriptor.cardinality));
21195
+ setDraftTracked(untrackUnpicked(draftTracked, id, impliedIds));
21196
+ };
21079
21197
  const startEditing = () => {
21080
21198
  setDraft(saved);
21199
+ setDraftTracked(savedTracked ?? []);
21081
21200
  setRefusal(null);
21082
21201
  setEditing(true);
21083
21202
  };
@@ -21087,13 +21206,9 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21087
21206
  await setSlot.mutateAsync({
21088
21207
  deviceId,
21089
21208
  slotRef: row.slotRef,
21090
- value: {
21091
- slot: row.value.slot,
21092
- deviceIds: [...draft]
21093
- }
21209
+ value: slotWriteValue(row.value, draft, savedTracked === void 0 ? void 0 : draftTracked)
21094
21210
  });
21095
21211
  setEditing(false);
21096
- await invalidateExtensionSurfaces(queryClient);
21097
21212
  onSaved();
21098
21213
  } catch (err) {
21099
21214
  setRefusal(err instanceof Error ? err.message : String(err));
@@ -21130,7 +21245,14 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21130
21245
  })]
21131
21246
  }),
21132
21247
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ActivationLine, { row }),
21133
- !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotSourceList, { sources: row.sources }),
21248
+ !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotSourceList, {
21249
+ sources: row.sources,
21250
+ tracked: savedTracked
21251
+ }),
21252
+ !editing && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ImpliedSourceList, {
21253
+ sources: implied,
21254
+ tracked: savedTracked
21255
+ }),
21134
21256
  editing && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
21135
21257
  className: "flex flex-col gap-2",
21136
21258
  children: [
@@ -21140,7 +21262,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21140
21262
  children: draft.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
21141
21263
  type: "button",
21142
21264
  "aria-label": `Remove ${nameOf(id)}`,
21143
- onClick: () => setDraft(togglePick(draft, id, descriptor.cardinality)),
21265
+ onClick: () => removePick(id),
21144
21266
  className: "inline-flex items-center gap-1 rounded-full bg-primary/15 px-2 py-0.5 text-[11px] text-foreground",
21145
21267
  children: [nameOf(id), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(X, { className: "h-3 w-3" })]
21146
21268
  }) }, id))
@@ -21210,6 +21332,17 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21210
21332
  ]
21211
21333
  }) }, c.deviceId))
21212
21334
  }),
21335
+ savedTracked !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(TrackedToggles, {
21336
+ options: trackedOptions({
21337
+ picks: draft,
21338
+ invalidPicks,
21339
+ implied: impliedIds,
21340
+ tracked: draftTracked
21341
+ }),
21342
+ tracked: draftTracked,
21343
+ nameOf,
21344
+ onToggle: (id) => setDraftTracked(toggleTracked(draftTracked, id))
21345
+ }),
21213
21346
  refusal !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
21214
21347
  role: "alert",
21215
21348
  className: "text-[11px] text-danger break-words",
@@ -21224,7 +21357,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21224
21357
  children: "Cancel"
21225
21358
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Button, {
21226
21359
  size: "sm",
21227
- disabled: !isDirty(saved, draft) || setSlot.isPending,
21360
+ disabled: !(isDirty(saved, draft) || savedTracked !== void 0 && isTrackedDirty(savedTracked, draftTracked)) || setSlot.isPending,
21228
21361
  onClick: () => void save(),
21229
21362
  children: "Save"
21230
21363
  })]
@@ -21246,11 +21379,11 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21246
21379
  * section (D14). The panel STORES NOTHING: every card is one row of
21247
21380
  * `device-extension.listSlots`, read by the slot's owner from the store it
21248
21381
  * 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.
21382
+ * existing path. It is the only editor of what it shows: the hand-written
21383
+ * "Linked devices" and "Virtual doorbell" sections it replaced were retired
21384
+ * once the live read matched them on every measured camera (D655).
21252
21385
  *
21253
- * Slice 1 renders ASSOCIATION cards only (a device multiselect). A `graft`
21386
+ * It renders ASSOCIATION cards only (a device multiselect). A `graft`
21254
21387
  * slot (slice 2) gets a read-only card here until its editor exists.
21255
21388
  *
21256
21389
  * Absence is claimed only from an answer (D315): pending, failed and empty
@@ -56493,7 +56626,6 @@ exports.CoverInlineControl = CoverInlineControl;
56493
56626
  exports.CoverPanel = CoverPanel;
56494
56627
  exports.CustomFieldRenderersProvider = CustomFieldRenderersProvider;
56495
56628
  exports.DEFAULT_COLOR = DEFAULT_COLOR;
56496
- exports.DEVICE_AGGREGATE_QUERY_KEY = DEVICE_AGGREGATE_QUERY_KEY;
56497
56629
  exports.DEVICE_COLUMNS = DEVICE_COLUMNS;
56498
56630
  exports.DEVICE_LIST_PAGE_SIZE_KEY = DEVICE_LIST_PAGE_SIZE_KEY;
56499
56631
  exports.DEVICE_LIST_PAGE_SIZE_OPTIONS = DEVICE_LIST_PAGE_SIZE_OPTIONS;
@@ -56537,7 +56669,6 @@ exports.DummyHeroCard = DummyHeroCard;
56537
56669
  exports.DummyInline = DummyInline;
56538
56670
  exports.EMPTY_DATA_TABLE_FILTER = EMPTY_DATA_TABLE_FILTER;
56539
56671
  exports.EVENT_KIND_ICONS = EVENT_KIND_ICONS;
56540
- exports.EXTENSION_SLOTS_QUERY_KEY = EXTENSION_SLOTS_QUERY_KEY;
56541
56672
  exports.EmptyState = EmptyState;
56542
56673
  exports.ErrorBox = ErrorBox;
56543
56674
  exports.EventKindGlyph = EventKindGlyph;
@@ -56780,7 +56911,6 @@ exports.hubWsUrl = hubWsUrl;
56780
56911
  exports.humanDuration = humanDuration;
56781
56912
  exports.humidifierTint = humidifierTint;
56782
56913
  exports.initialScrubState = initialScrubState;
56783
- exports.invalidateExtensionSurfaces = invalidateExtensionSurfaces;
56784
56914
  exports.isAbsentProvider = isAbsentProvider;
56785
56915
  exports.isAbsentProvider$1 = isAbsentProvider;
56786
56916
  exports.isDataTableFilterActive = isDataTableFilterActive;
@@ -57086,7 +57216,6 @@ exports.useDeviceManagerAdoptionRelease = useDeviceManagerAdoptionRelease;
57086
57216
  exports.useDeviceManagerAdoptionResync = useDeviceManagerAdoptionResync;
57087
57217
  exports.useDeviceManagerAdoptionStartJob = useDeviceManagerAdoptionStartJob;
57088
57218
  exports.useDeviceManagerAllocateDeviceId = useDeviceManagerAllocateDeviceId;
57089
- exports.useDeviceManagerApplyDeviceSettingsPatch = useDeviceManagerApplyDeviceSettingsPatch;
57090
57219
  exports.useDeviceManagerApplyInitialMeta = useDeviceManagerApplyInitialMeta;
57091
57220
  exports.useDeviceManagerCreateDevice = useDeviceManagerCreateDevice;
57092
57221
  exports.useDeviceManagerDisable = useDeviceManagerDisable;
@@ -57104,10 +57233,8 @@ exports.useDeviceManagerGetConfigSchema = useDeviceManagerGetConfigSchema;
57104
57233
  exports.useDeviceManagerGetCreationSchema = useDeviceManagerGetCreationSchema;
57105
57234
  exports.useDeviceManagerGetDevice = useDeviceManagerGetDevice;
57106
57235
  exports.useDeviceManagerGetDeviceAggregate = useDeviceManagerGetDeviceAggregate;
57107
- exports.useDeviceManagerGetDeviceLiveContribution = useDeviceManagerGetDeviceLiveContribution;
57108
57236
  exports.useDeviceManagerGetDeviceLiveInfoAggregate = useDeviceManagerGetDeviceLiveInfoAggregate;
57109
57237
  exports.useDeviceManagerGetDeviceSettingsAggregate = useDeviceManagerGetDeviceSettingsAggregate;
57110
- exports.useDeviceManagerGetDeviceSettingsContribution = useDeviceManagerGetDeviceSettingsContribution;
57111
57238
  exports.useDeviceManagerGetDeviceStatusAggregate = useDeviceManagerGetDeviceStatusAggregate;
57112
57239
  exports.useDeviceManagerGetDeviceStatusAggregateBatch = useDeviceManagerGetDeviceStatusAggregateBatch;
57113
57240
  exports.useDeviceManagerGetLinkedDevices = useDeviceManagerGetLinkedDevices;
@@ -57203,10 +57330,7 @@ exports.useDeviceStateSlice$1 = useDeviceStateSlice;
57203
57330
  exports.useDeviceStatusGetStatus = useDeviceStatusGetStatus;
57204
57331
  exports.useDeviceWebrtc = useDeviceWebrtc;
57205
57332
  exports.useDevices = useDevices;
57206
- exports.useDoorbellApplyDeviceSettingsPatch = useDoorbellApplyDeviceSettingsPatch;
57207
57333
  exports.useDoorbellEvents = useDoorbellEvents;
57208
- exports.useDoorbellGetDeviceLiveContribution = useDoorbellGetDeviceLiveContribution;
57209
- exports.useDoorbellGetDeviceSettingsContribution = useDoorbellGetDeviceSettingsContribution;
57210
57334
  exports.useDoorbellGetStatus = useDoorbellGetStatus;
57211
57335
  exports.useEnumSensorGetStatus = useEnumSensorGetStatus;
57212
57336
  exports.useEventEmitterGetStatus = useEventEmitterGetStatus;
package/dist/index.js CHANGED
@@ -7104,12 +7104,6 @@ var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
7104
7104
  var useDeviceManagerGetDeviceStatusAggregate = trpc.deviceManager.getDeviceStatusAggregate.useQuery;
7105
7105
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
7106
7106
  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
7107
  /** Generated alias around `trpc.deviceOps.getStreamSources.useQuery`. */
7114
7108
  var useDeviceOpsGetStreamSources = trpc.deviceOps.getStreamSources.useQuery;
7115
7109
  /** Generated alias around `trpc.deviceOps.getConfigEntries.useQuery`. */
@@ -7164,12 +7158,6 @@ var useDeviceStateSetCapSlice = trpc.deviceState.setCapSlice.useMutation;
7164
7158
  var useDeviceStatusGetStatus = trpc.deviceStatus.getStatus.useQuery;
7165
7159
  /** Generated alias around `trpc.doorbell.getStatus.useQuery`. */
7166
7160
  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
7161
  /** Generated alias around `trpc.enumSensor.getStatus.useQuery`. */
7174
7162
  var useEnumSensorGetStatus = trpc.enumSensor.getStatus.useQuery;
7175
7163
  /** Generated alias around `trpc.eventEmitter.getStatus.useQuery`. */
@@ -12303,8 +12291,8 @@ function selectedDeviceOptions(options, selected) {
12303
12291
  * `device-select-filter.ts`). No server-computed option list is involved —
12304
12292
  * the form field carries only the filter. Value(s) are device ids as strings.
12305
12293
  *
12306
- * The multi variant mirrors the "Linked devices" searchable combobox UX
12307
- * (removable chips + typeahead dropdown); the single variant is a native
12294
+ * The multi variant is a searchable combobox (removable chips + typeahead
12295
+ * dropdown); the single variant is a native
12308
12296
  * select. Both are inline in ui-library (like `node-select`) so any host that
12309
12297
  * renders the shared form field gets them without extra registration.
12310
12298
  */
@@ -20892,16 +20880,6 @@ function ClipsSection({ deviceId }) {
20892
20880
  });
20893
20881
  }
20894
20882
  //#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
20883
  //#region src/composites/extensions/extensions-view-state.ts
20906
20884
  /**
20907
20885
  * What the Extensions section may CLAIM, from what `listSlots` answered
@@ -20966,6 +20944,70 @@ function searchCandidates(candidates, draft, query) {
20966
20944
  function isDirty(saved, draft) {
20967
20945
  return saved.length !== draft.length || saved.some((id, i) => draft[i] !== id);
20968
20946
  }
20947
+ /**
20948
+ * The tracked-event opt-in a slot's value carries, or `undefined` when it
20949
+ * carries none — every slot but `linked-devices`, and a `linked-devices` row
20950
+ * from a server older than D655. `undefined` is "this owner offers no
20951
+ * opt-in", never "nothing is opted in": the card then shows no toggle rather
20952
+ * than a row of unticked ones it could not save.
20953
+ */
20954
+ function trackedOptInOf(value) {
20955
+ return value.slot === "linked-devices" ? value.trackedDeviceIds : void 0;
20956
+ }
20957
+ /** Flip one device's tracked-event opt-in. */
20958
+ function toggleTracked(tracked, deviceId) {
20959
+ return tracked.includes(deviceId) ? tracked.filter((id) => id !== deviceId) : [...tracked, deviceId];
20960
+ }
20961
+ /** Whether two opt-ins differ as SETS — the order carries no meaning. */
20962
+ function isTrackedDirty(saved, draft) {
20963
+ return saved.length !== draft.length || saved.some((id) => !draft.includes(id));
20964
+ }
20965
+ /**
20966
+ * One toggle per device the camera links — the old section's set (D655):
20967
+ * the valid picks, then what the owner links by structure (tree children, a
20968
+ * picked container's child — never the container itself, D356), then every
20969
+ * opted-in device that is linked no more, so a stored opt-in is always
20970
+ * visible and can always be removed.
20971
+ */
20972
+ function trackedOptions(input) {
20973
+ const out = [];
20974
+ const seen = /* @__PURE__ */ new Set();
20975
+ const add = (deviceId, origin) => {
20976
+ if (seen.has(deviceId)) return;
20977
+ seen.add(deviceId);
20978
+ out.push({
20979
+ deviceId,
20980
+ origin
20981
+ });
20982
+ };
20983
+ for (const id of input.picks) if (!input.invalidPicks.includes(id)) add(id, "pick");
20984
+ for (const id of input.implied) add(id, "implied");
20985
+ for (const id of input.tracked) add(id, "not-linked");
20986
+ return out;
20987
+ }
20988
+ /**
20989
+ * The opt-in after one device is removed from the draft picks: its toggle
20990
+ * goes with it, unless the camera still links it by structure.
20991
+ */
20992
+ function untrackUnpicked(tracked, deviceId, implied) {
20993
+ return implied.includes(deviceId) ? tracked : tracked.filter((id) => id !== deviceId);
20994
+ }
20995
+ /**
20996
+ * The value a Save sends. The opt-in travels only when the owner offered one,
20997
+ * and then WHOLE: it replaces the stored one, and the owner accepts any id it
20998
+ * already stored, so what was read can be sent back unchanged (D655).
20999
+ */
21000
+ function slotWriteValue(saved, deviceIds, tracked) {
21001
+ if (saved.slot === "linked-devices" && tracked !== void 0) return {
21002
+ slot: "linked-devices",
21003
+ deviceIds: [...deviceIds],
21004
+ trackedDeviceIds: [...tracked]
21005
+ };
21006
+ return {
21007
+ slot: saved.slot,
21008
+ deviceIds: [...deviceIds]
21009
+ };
21010
+ }
20969
21011
  //#endregion
20970
21012
  //#region src/composites/extensions/AssociationSlotCard.tsx
20971
21013
  /**
@@ -20982,6 +21024,11 @@ function isDirty(saved, draft) {
20982
21024
  * shown with its reason and never silently dropped from the draft.
20983
21025
  * - A gate owned by ANOTHER authority (the doorbell wrapper's binding) is
20984
21026
  * shown read-only, naming that authority (D62).
21027
+ * - A slot whose value carries a tracked-event opt-in (`linked-devices`,
21028
+ * D655) gets one toggle per LINKED device — the picks, what the owner links
21029
+ * by structure (`impliedSources`: tree children, never a container, D356)
21030
+ * and any stored opt-in no longer linked, so each can be removed — saved
21031
+ * with the picks, whole.
20985
21032
  */
20986
21033
  var HEALTH_LABEL = {
20987
21034
  ok: "OK",
@@ -20996,7 +21043,7 @@ var HEALTH_VARIANT = {
20996
21043
  unavailable: "warning"
20997
21044
  };
20998
21045
  /** The saved sources, each with its health — a bad one is shown, never hidden. */
20999
- function SlotSourceList({ sources }) {
21046
+ function SlotSourceList({ sources, tracked }) {
21000
21047
  if (sources.length === 0) return /* @__PURE__ */ jsx("p", {
21001
21048
  className: "text-[11px] text-foreground-subtle italic",
21002
21049
  children: "No devices picked."
@@ -21014,6 +21061,10 @@ function SlotSourceList({ sources }) {
21014
21061
  variant: HEALTH_VARIANT[s.health],
21015
21062
  children: HEALTH_LABEL[s.health]
21016
21063
  }),
21064
+ tracked?.includes(s.deviceId) === true && /* @__PURE__ */ jsx(Badge, {
21065
+ variant: "info",
21066
+ children: "Tracked events"
21067
+ }),
21017
21068
  s.detail !== void 0 && /* @__PURE__ */ jsx("span", {
21018
21069
  className: "text-[10px] text-foreground-subtle",
21019
21070
  children: s.detail
@@ -21037,11 +21088,75 @@ function ActivationLine({ row }) {
21037
21088
  ]
21038
21089
  });
21039
21090
  }
21091
+ /**
21092
+ * What the owner links by structure — tree children, a picked container's
21093
+ * child (D356). Shown, never editable as a pick: removing one is not the
21094
+ * editor's to do.
21095
+ */
21096
+ function ImpliedSourceList({ sources, tracked }) {
21097
+ if (sources.length === 0) return null;
21098
+ return /* @__PURE__ */ jsxs("div", {
21099
+ className: "flex flex-col gap-1",
21100
+ children: [/* @__PURE__ */ jsx("span", {
21101
+ className: "text-[10px] text-foreground-subtle",
21102
+ children: "Always linked (device tree):"
21103
+ }), /* @__PURE__ */ jsx("ul", {
21104
+ "aria-label": "Always linked",
21105
+ className: "flex flex-col gap-1",
21106
+ children: sources.map((s) => /* @__PURE__ */ jsxs("li", {
21107
+ className: "flex flex-wrap items-center gap-2 text-[11px]",
21108
+ children: [/* @__PURE__ */ jsx("span", {
21109
+ className: "text-foreground",
21110
+ children: s.name ?? `Device ${s.deviceId}`
21111
+ }), tracked?.includes(s.deviceId) === true && /* @__PURE__ */ jsx(Badge, {
21112
+ variant: "info",
21113
+ children: "Tracked events"
21114
+ })]
21115
+ }, s.deviceId))
21116
+ })]
21117
+ });
21118
+ }
21119
+ var ORIGIN_NOTE = {
21120
+ pick: null,
21121
+ implied: "always linked",
21122
+ "not-linked": "not linked any more — untick to remove"
21123
+ };
21124
+ /** One opt-in toggle per linked device: does it produce tracked events here? */
21125
+ function TrackedToggles({ options, tracked, nameOf, onToggle }) {
21126
+ if (options.length === 0) return null;
21127
+ return /* @__PURE__ */ jsxs("fieldset", {
21128
+ className: "flex flex-col gap-1",
21129
+ children: [/* @__PURE__ */ jsx("legend", {
21130
+ className: "text-[10px] text-foreground-subtle",
21131
+ children: "Produce tracked events on this camera (opt-in):"
21132
+ }), options.map(({ deviceId: id, origin }) => /* @__PURE__ */ jsxs("label", {
21133
+ className: "flex items-center gap-2 text-[11px] text-foreground",
21134
+ children: [
21135
+ /* @__PURE__ */ jsx("input", {
21136
+ type: "checkbox",
21137
+ "aria-label": `Tracked events from ${nameOf(id)}`,
21138
+ checked: tracked.includes(id),
21139
+ onChange: () => onToggle(id)
21140
+ }),
21141
+ nameOf(id),
21142
+ ORIGIN_NOTE[origin] !== null && /* @__PURE__ */ jsxs("span", {
21143
+ className: "text-[10px] text-foreground-subtle",
21144
+ children: ["· ", ORIGIN_NOTE[origin]]
21145
+ })
21146
+ ]
21147
+ }, id))]
21148
+ });
21149
+ }
21040
21150
  function AssociationSlotCard({ deviceId, row, onSaved }) {
21041
21151
  const descriptor = EXTENSION_SLOTS[row.slot].descriptor;
21042
21152
  const saved = row.value.deviceIds;
21153
+ const savedTracked = trackedOptInOf(row.value);
21154
+ const implied = row.impliedSources ?? [];
21155
+ const impliedIds = implied.map((s) => s.deviceId);
21156
+ const invalidPicks = row.sources.filter((s) => s.health === "unavailable").map((s) => s.deviceId);
21043
21157
  const [editing, setEditing] = useState(false);
21044
21158
  const [draft, setDraft] = useState(saved);
21159
+ const [draftTracked, setDraftTracked] = useState(savedTracked ?? []);
21045
21160
  const [search, setSearch] = useState("");
21046
21161
  const [refusal, setRefusal] = useState(null);
21047
21162
  const candidatesQuery = useDeviceExtensionListCandidates({
@@ -21049,11 +21164,15 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21049
21164
  slotRef: row.slotRef
21050
21165
  }, { enabled: editing });
21051
21166
  const setSlot = useDeviceExtensionSetSlot();
21052
- const queryClient = useQueryClient();
21053
21167
  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}`;
21168
+ 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}`;
21169
+ const removePick = (id) => {
21170
+ setDraft(togglePick(draft, id, descriptor.cardinality));
21171
+ setDraftTracked(untrackUnpicked(draftTracked, id, impliedIds));
21172
+ };
21055
21173
  const startEditing = () => {
21056
21174
  setDraft(saved);
21175
+ setDraftTracked(savedTracked ?? []);
21057
21176
  setRefusal(null);
21058
21177
  setEditing(true);
21059
21178
  };
@@ -21063,13 +21182,9 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21063
21182
  await setSlot.mutateAsync({
21064
21183
  deviceId,
21065
21184
  slotRef: row.slotRef,
21066
- value: {
21067
- slot: row.value.slot,
21068
- deviceIds: [...draft]
21069
- }
21185
+ value: slotWriteValue(row.value, draft, savedTracked === void 0 ? void 0 : draftTracked)
21070
21186
  });
21071
21187
  setEditing(false);
21072
- await invalidateExtensionSurfaces(queryClient);
21073
21188
  onSaved();
21074
21189
  } catch (err) {
21075
21190
  setRefusal(err instanceof Error ? err.message : String(err));
@@ -21106,7 +21221,14 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21106
21221
  })]
21107
21222
  }),
21108
21223
  /* @__PURE__ */ jsx(ActivationLine, { row }),
21109
- !editing && /* @__PURE__ */ jsx(SlotSourceList, { sources: row.sources }),
21224
+ !editing && /* @__PURE__ */ jsx(SlotSourceList, {
21225
+ sources: row.sources,
21226
+ tracked: savedTracked
21227
+ }),
21228
+ !editing && /* @__PURE__ */ jsx(ImpliedSourceList, {
21229
+ sources: implied,
21230
+ tracked: savedTracked
21231
+ }),
21110
21232
  editing && /* @__PURE__ */ jsxs("div", {
21111
21233
  className: "flex flex-col gap-2",
21112
21234
  children: [
@@ -21116,7 +21238,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21116
21238
  children: draft.map((id) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
21117
21239
  type: "button",
21118
21240
  "aria-label": `Remove ${nameOf(id)}`,
21119
- onClick: () => setDraft(togglePick(draft, id, descriptor.cardinality)),
21241
+ onClick: () => removePick(id),
21120
21242
  className: "inline-flex items-center gap-1 rounded-full bg-primary/15 px-2 py-0.5 text-[11px] text-foreground",
21121
21243
  children: [nameOf(id), /* @__PURE__ */ jsx(X, { className: "h-3 w-3" })]
21122
21244
  }) }, id))
@@ -21186,6 +21308,17 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21186
21308
  ]
21187
21309
  }) }, c.deviceId))
21188
21310
  }),
21311
+ savedTracked !== void 0 && /* @__PURE__ */ jsx(TrackedToggles, {
21312
+ options: trackedOptions({
21313
+ picks: draft,
21314
+ invalidPicks,
21315
+ implied: impliedIds,
21316
+ tracked: draftTracked
21317
+ }),
21318
+ tracked: draftTracked,
21319
+ nameOf,
21320
+ onToggle: (id) => setDraftTracked(toggleTracked(draftTracked, id))
21321
+ }),
21189
21322
  refusal !== null && /* @__PURE__ */ jsxs("p", {
21190
21323
  role: "alert",
21191
21324
  className: "text-[11px] text-danger break-words",
@@ -21200,7 +21333,7 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21200
21333
  children: "Cancel"
21201
21334
  }), /* @__PURE__ */ jsx(Button, {
21202
21335
  size: "sm",
21203
- disabled: !isDirty(saved, draft) || setSlot.isPending,
21336
+ disabled: !(isDirty(saved, draft) || savedTracked !== void 0 && isTrackedDirty(savedTracked, draftTracked)) || setSlot.isPending,
21204
21337
  onClick: () => void save(),
21205
21338
  children: "Save"
21206
21339
  })]
@@ -21222,11 +21355,11 @@ function AssociationSlotCard({ deviceId, row, onSaved }) {
21222
21355
  * section (D14). The panel STORES NOTHING: every card is one row of
21223
21356
  * `device-extension.listSlots`, read by the slot's owner from the store it
21224
21357
  * 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.
21358
+ * existing path. It is the only editor of what it shows: the hand-written
21359
+ * "Linked devices" and "Virtual doorbell" sections it replaced were retired
21360
+ * once the live read matched them on every measured camera (D655).
21228
21361
  *
21229
- * Slice 1 renders ASSOCIATION cards only (a device multiselect). A `graft`
21362
+ * It renders ASSOCIATION cards only (a device multiselect). A `graft`
21230
21363
  * slot (slice 2) gets a read-only card here until its editor exists.
21231
21364
  *
21232
21365
  * Absence is claimed only from an answer (D315): pending, failed and empty
@@ -56406,4 +56539,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-vfWTm6qv.js").t
56406
56539
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
56407
56540
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-DMkchqO1.js").then((m) => ({ default: m.PrivacyMaskSettings })));
56408
56541
  //#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 };
56542
+ 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, 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, 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.208",
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>;