@camstack/ui-library 1.2.16 → 1.2.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -3656,6 +3656,34 @@ var GRID_PAIRED = "grid grid-cols-1 lg:grid-cols-2";
3656
3656
  var SPLIT_PANEL_OUTER = "flex flex-col-reverse md:flex-row";
3657
3657
  /** Sidebar narrow lane in a SPLIT_PANEL_OUTER layout. */
3658
3658
  var SPLIT_PANEL_SIDE = "w-full md:w-44 lg:w-52 md:flex-shrink-0 border-b md:border-b-0 md:border-l border-border";
3659
+ /**
3660
+ * The tier boundary at which a settings label/value row stops stacking.
3661
+ *
3662
+ * Below it (L1 — compact) the row is ONE column: label on its own line, value
3663
+ * on the next at full width. Above it the row is label-left / value-right as
3664
+ * before. The two-column form needs `SETTING_ROW_LABEL`'s lane plus a readable
3665
+ * value beside it; a phone has neither, and the failure mode is not "cramped"
3666
+ * but "the value is the part that gets cut" — the one thing the operator
3667
+ * opened the page to read.
3668
+ */
3669
+ var SETTING_ROW_STACK_BREAKPOINT = "sm";
3670
+ /** Outer row: single column at L1, label/value columns from `sm` up. */
3671
+ var SETTING_ROW = "flex min-w-0 flex-col gap-0.5 py-1.5 sm:flex-row sm:items-center";
3672
+ /** Label lane. Full width (and free to wrap) at L1; a fixed lane from `sm` up. */
3673
+ var SETTING_ROW_LABEL = "min-w-0 text-[11px] leading-tight text-foreground-subtle sm:w-32 sm:shrink-0 sm:pr-2";
3674
+ /**
3675
+ * Value lane — the value text plus its trailing affordances (copy / reveal).
3676
+ * `w-full` at L1 so the value owns the whole row once the label is above it;
3677
+ * `sm:flex-1` makes it share the row again from `sm` up.
3678
+ */
3679
+ var SETTING_ROW_VALUE = "flex w-full min-w-0 items-center gap-1 sm:flex-1";
3680
+ /**
3681
+ * The value text itself. `break-all` lets an opaque token (a key, a URL) wrap
3682
+ * at L1 instead of being cut mid-word; `sm:truncate` restores the single-line
3683
+ * desktop form, where the row is wide enough for truncation to be a choice
3684
+ * rather than data loss.
3685
+ */
3686
+ var SETTING_ROW_VALUE_TEXT = "min-w-0 break-all text-xs text-foreground sm:truncate";
3659
3687
  /** Section header label (uppercase tracking-wider). */
3660
3688
  var TEXT_SECTION_LABEL = "text-[10px] sm:text-[11px] font-semibold text-foreground uppercase tracking-wider";
3661
3689
  /** Field label inside a row. */
@@ -13201,15 +13229,27 @@ var MOBILE_QUERY = "(max-width: 767px)";
13201
13229
  * so sidebar fans out at the same point grids switch to multi-column.
13202
13230
  */
13203
13231
  var MID_QUERY = "(min-width: 768px) and (max-width: 1023px)";
13232
+ /**
13233
+ * `matchMedia` is universal in browsers but absent in bare DOM environments.
13234
+ * These hooks are called from shared primitives (`DataTable` picks its narrow
13235
+ * layout with one), so throwing here takes down the whole page that merely
13236
+ * rendered a table. Where the capability is missing, report the desktop
13237
+ * layout — a widescreen rendering is wrong-looking; a crashed page is gone.
13238
+ */
13239
+ function matchQuery(query) {
13240
+ if (typeof window.matchMedia !== "function") return null;
13241
+ return window.matchMedia(query);
13242
+ }
13204
13243
  function subscribeQuery(query) {
13205
13244
  return (callback) => {
13206
- const mql = window.matchMedia(query);
13245
+ const mql = matchQuery(query);
13246
+ if (mql === null) return () => {};
13207
13247
  mql.addEventListener("change", callback);
13208
13248
  return () => mql.removeEventListener("change", callback);
13209
13249
  };
13210
13250
  }
13211
13251
  function getSnapshot(query) {
13212
- return () => window.matchMedia(query).matches;
13252
+ return () => matchQuery(query)?.matches ?? false;
13213
13253
  }
13214
13254
  function getServerSnapshot() {
13215
13255
  return false;
@@ -13627,18 +13667,75 @@ function Breadcrumb({ items, className }) {
13627
13667
  });
13628
13668
  }
13629
13669
  //#endregion
13670
+ //#region src/composites/data-table-layout.ts
13671
+ /**
13672
+ * At this many columns and above, `auto` switches a narrow viewport to cards.
13673
+ * Three columns still fit a phone at a readable size; four do not.
13674
+ */
13675
+ var CARD_MODE_MIN_COLUMNS = 4;
13676
+ function resolveTableLayout({ mode, columnCount, isNarrow }) {
13677
+ if (!isNarrow) return "table";
13678
+ if (mode === "scroll") return "table";
13679
+ if (mode === "cards") return "cards";
13680
+ if (columnCount === 0) return "table";
13681
+ return columnCount >= 4 ? "cards" : "table";
13682
+ }
13683
+ //#endregion
13684
+ //#region src/composites/setting-row.tsx
13685
+ function SettingRow({ label, children, actions, elements = "plain", className, valueClassName }) {
13686
+ const LabelTag = elements === "description" ? "dt" : "span";
13687
+ const ValueTag = elements === "description" ? "dd" : "div";
13688
+ return /* @__PURE__ */ jsxs("div", {
13689
+ "data-setting-row": "",
13690
+ className: cn(SETTING_ROW, className),
13691
+ children: [/* @__PURE__ */ jsx(LabelTag, {
13692
+ "data-setting-row-label": "",
13693
+ className: SETTING_ROW_LABEL,
13694
+ children: label
13695
+ }), /* @__PURE__ */ jsxs(ValueTag, {
13696
+ "data-setting-row-value": "",
13697
+ className: SETTING_ROW_VALUE,
13698
+ children: [/* @__PURE__ */ jsx("span", {
13699
+ "data-setting-row-value-text": "",
13700
+ className: cn(SETTING_ROW_VALUE_TEXT, valueClassName),
13701
+ children
13702
+ }), actions !== void 0 && /* @__PURE__ */ jsx("span", {
13703
+ className: "flex shrink-0 items-center gap-0.5",
13704
+ children: actions
13705
+ })]
13706
+ })]
13707
+ });
13708
+ }
13709
+ //#endregion
13630
13710
  //#region src/composites/data-table.tsx
13631
13711
  var ALIGN_CLASS = {
13632
13712
  left: "text-left",
13633
13713
  right: "text-right",
13634
13714
  center: "text-center"
13635
13715
  };
13636
- function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyMessage, className, bordered = true, rowClassName }) {
13716
+ function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyMessage, className, bordered = true, rowClassName, mobileMode = "auto" }) {
13717
+ const isNarrow = useIsMobile();
13718
+ const layout = resolveTableLayout({
13719
+ mode: mobileMode,
13720
+ columnCount: columns.length,
13721
+ isNarrow
13722
+ });
13637
13723
  if (rows.length === 0 && emptyMessage) return /* @__PURE__ */ jsx("div", {
13638
13724
  className: `rounded-lg ${bordered ? "border border-border" : ""} bg-surface px-3 py-4 text-xs text-foreground-subtle text-center ${className ?? ""}`,
13639
13725
  children: emptyMessage
13640
13726
  });
13641
13727
  if (rows.length === 0) return null;
13728
+ if (layout === "cards") return /* @__PURE__ */ jsx("div", {
13729
+ className: `space-y-2 ${className ?? ""}`,
13730
+ children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx(DataTableCard, {
13731
+ row,
13732
+ rowIndex,
13733
+ columns,
13734
+ bordered,
13735
+ onRowClick,
13736
+ rowClassName
13737
+ }, rowKey ? rowKey(row, rowIndex) : rowIndex))
13738
+ });
13642
13739
  return /* @__PURE__ */ jsx("div", {
13643
13740
  className: `rounded-lg ${bordered ? "border border-border" : ""} bg-surface overflow-x-auto ${className ?? ""}`,
13644
13741
  children: /* @__PURE__ */ jsxs("table", {
@@ -13683,6 +13780,36 @@ function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyM
13683
13780
  })
13684
13781
  });
13685
13782
  }
13783
+ /**
13784
+ * One row as a card. Columns that carry a plain-text `header` become labelled
13785
+ * `SettingRow`s — the label is the column title and the value gets the full
13786
+ * card width. Columns with no text header (an actions column, a
13787
+ * `headerRender`-only column) have no label to show, so they render as a
13788
+ * full-width strip at the foot of the card.
13789
+ */
13790
+ function DataTableCard({ row, rowIndex, columns, bordered, onRowClick, rowClassName }) {
13791
+ const labelled = columns.filter((col) => col.header !== void 0 && col.header !== "");
13792
+ const unlabelled = columns.filter((col) => col.header === void 0 || col.header === "");
13793
+ const interactive = onRowClick !== void 0;
13794
+ const extra = rowClassName?.(row, rowIndex) ?? "";
13795
+ return /* @__PURE__ */ jsxs("div", {
13796
+ "data-data-table-card": "",
13797
+ onClick: interactive ? () => onRowClick(row, rowIndex) : void 0,
13798
+ className: [
13799
+ "rounded-lg bg-surface px-3 py-1.5 divide-y divide-border-subtle",
13800
+ bordered ? "border border-border" : "",
13801
+ interactive ? "cursor-pointer hover:bg-primary/5" : "",
13802
+ extra
13803
+ ].filter(Boolean).join(" "),
13804
+ children: [labelled.map((col) => /* @__PURE__ */ jsx(SettingRow, {
13805
+ label: col.header,
13806
+ children: col.render(row, rowIndex)
13807
+ }, col.key)), unlabelled.length > 0 && /* @__PURE__ */ jsx("div", {
13808
+ className: "flex flex-wrap items-center justify-end gap-2 py-1.5",
13809
+ children: unlabelled.map((col) => /* @__PURE__ */ jsx("div", { children: col.render(row, rowIndex) }, col.key))
13810
+ })]
13811
+ });
13812
+ }
13686
13813
  //#endregion
13687
13814
  //#region src/composites/slide-over-panel.tsx
13688
13815
  /**
@@ -15815,18 +15942,21 @@ function StatCard({ value, label, trend, className }) {
15815
15942
  }
15816
15943
  //#endregion
15817
15944
  //#region src/composites/key-value-list.tsx
15945
+ /**
15946
+ * A `<dl>` of label/value rows. Layout (including the L1 stacking) is owned by
15947
+ * `SettingRow`; this composite only supplies the description-list semantics.
15948
+ *
15949
+ * The rows used to be `flex items-center h-7` with a `w-1/3` term, so a label
15950
+ * could neither wrap nor stack: on a phone it took a third of the width and
15951
+ * the value took whatever was left.
15952
+ */
15818
15953
  function KeyValueList({ items, className }) {
15819
15954
  return /* @__PURE__ */ jsx("dl", {
15820
15955
  className: cn("flex flex-col", className),
15821
- children: items.map((item) => /* @__PURE__ */ jsxs("div", {
15822
- className: "flex items-center h-7",
15823
- children: [/* @__PURE__ */ jsx("dt", {
15824
- className: "text-foreground-subtle text-xs w-1/3 shrink-0",
15825
- children: item.key
15826
- }), /* @__PURE__ */ jsx("dd", {
15827
- className: "text-foreground text-xs",
15828
- children: item.value
15829
- })]
15956
+ children: items.map((item) => /* @__PURE__ */ jsx(SettingRow, {
15957
+ elements: "description",
15958
+ label: item.key,
15959
+ children: item.value
15830
15960
  }, item.key))
15831
15961
  });
15832
15962
  }
@@ -16194,7 +16324,8 @@ function DeviceGrid({ children, minCardWidth = 220, gap = 3, className }) {
16194
16324
  * longest). So as the viewport shrinks the HIGHEST-priority-number column
16195
16325
  * drops first.
16196
16326
  *
16197
- * name (0) — never hidden; sticky left, always visible
16327
+ * name (0) — never hidden; pinned left from `md` up (see
16328
+ * `NAME_COLUMN_PIN_CLASS`), scrolls below it
16198
16329
  * previewActions (1) — never hidden; carries the live control + status dot
16199
16330
  * icon (2) — integration badge; rendered INSIDE the name cell,
16200
16331
  * not a standalone column, so it has no breakpoint
@@ -16246,7 +16377,7 @@ function columnsForContext(ctx) {
16246
16377
  }
16247
16378
  /**
16248
16379
  * Lower number = higher priority (kept longest as width shrinks). `name` = 0
16249
- * (sticky, never dropped); `previewActions` = 1 (always visible). The optional
16380
+ * (never dropped); `previewActions` = 1 (always visible). The optional
16250
16381
  * columns drop in REVERSE priority order as width shrinks — highest number
16251
16382
  * (`type`) hides first, then `features`. `icon` is a name-cell badge, not a
16252
16383
  * standalone column. See `COLUMN_BREAKPOINT_CLASS` for the derived classes.
@@ -16282,6 +16413,14 @@ var COLUMN_BREAKPOINT_CLASS = {
16282
16413
  type: "hidden lg:table-cell",
16283
16414
  manufacturer: "hidden xl:table-cell"
16284
16415
  };
16416
+ /** Pin classes for the NAME `<th>`/`<td>` — never unconditional. */
16417
+ var NAME_COLUMN_PIN_CLASS = "md:sticky md:left-0 md:z-[1]";
16418
+ /**
16419
+ * NAME column width. Narrower below the pin breakpoint so NAME + Preview fit a
16420
+ * phone viewport without a horizontal scroll at all; the roomier desktop width
16421
+ * returns with the pin.
16422
+ */
16423
+ var NAME_COLUMN_WIDTH_CLASS = "w-44 max-w-[11rem] md:w-64 md:max-w-[16rem]";
16285
16424
  //#endregion
16286
16425
  //#region src/composites/device-list/hardware.ts
16287
16426
  var MANUFACTURER_KEY = "manufacturer";
@@ -19358,6 +19497,10 @@ var useSettingsStoreInsert = trpc.settingsStore.insert.useMutation;
19358
19497
  var useSettingsStoreUpdate = trpc.settingsStore.update.useMutation;
19359
19498
  /** Generated alias around `trpc.settingsStore.delete.useMutation`. */
19360
19499
  var useSettingsStoreDelete = trpc.settingsStore.delete.useMutation;
19500
+ /** Generated alias around `trpc.settingsStore.deleteWhere.useMutation`. */
19501
+ var useSettingsStoreDeleteWhere = trpc.settingsStore.deleteWhere.useMutation;
19502
+ /** Generated alias around `trpc.settingsStore.updateWhere.useMutation`. */
19503
+ var useSettingsStoreUpdateWhere = trpc.settingsStore.updateWhere.useMutation;
19361
19504
  /** Generated alias around `trpc.settingsStore.count.useQuery`. */
19362
19505
  var useSettingsStoreCount = trpc.settingsStore.count.useQuery;
19363
19506
  /** Generated alias around `trpc.settingsStore.histogram.useQuery`. */
@@ -29409,7 +29552,7 @@ function DeviceItemTableRow(props) {
29409
29552
  className: cn("group cursor-pointer hover:bg-surface-hover transition-colors", !hasChildren && "border-b border-border-subtle/40", isAccessoryRow && "bg-foreground-subtle/[0.03]", rowSelected && "bg-primary/10", className),
29410
29553
  children: [
29411
29554
  /* @__PURE__ */ jsx("td", {
29412
- className: cn("sticky left-0 z-[1] py-1.5 align-middle pr-2 transition-colors", rowSelected ? "bg-primary/10 group-hover:bg-surface-hover" : isAccessoryRow ? "bg-surface-subtle group-hover:bg-surface-hover" : "bg-surface group-hover:bg-surface-hover", "w-64 max-w-[16rem] min-w-0 overflow-hidden", INDENT_CLASS[indentLevel]),
29555
+ className: cn(NAME_COLUMN_PIN_CLASS, "py-1.5 align-middle pr-2 transition-colors", rowSelected ? "bg-primary/10 group-hover:bg-surface-hover" : isAccessoryRow ? "bg-surface-subtle group-hover:bg-surface-hover" : "bg-surface group-hover:bg-surface-hover", NAME_COLUMN_WIDTH_CLASS, "min-w-0 overflow-hidden", INDENT_CLASS[indentLevel]),
29413
29556
  children: /* @__PURE__ */ jsxs("div", {
29414
29557
  className: "flex items-center gap-1.5",
29415
29558
  children: [selection && /* @__PURE__ */ jsx("input", {
@@ -30412,7 +30555,7 @@ function TableLayout({ rows, accessoriesByParent, autoExpandedParents, devices,
30412
30555
  children: [
30413
30556
  /* @__PURE__ */ jsx("th", {
30414
30557
  "aria-sort": ariaSortFor(sort, "name"),
30415
- className: "sticky left-0 z-[1] bg-surface text-left px-2 py-2 text-[9.5px] font-medium uppercase tracking-wider text-foreground-subtle w-64 max-w-[16rem]",
30558
+ className: cn(NAME_COLUMN_PIN_CLASS, NAME_COLUMN_WIDTH_CLASS, "bg-surface text-left px-2 py-2 text-[9.5px] font-medium uppercase tracking-wider text-foreground-subtle"),
30416
30559
  children: /* @__PURE__ */ jsx(SortableHeaderButton, {
30417
30560
  columnId: "name",
30418
30561
  label: "Name",
@@ -35062,15 +35205,14 @@ var MODES = [
35062
35205
  label: "Continuous"
35063
35206
  }
35064
35207
  ];
35065
- function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regeneratingStrips }) {
35208
+ function RecordingSettings({ initial, saving, onSave }) {
35066
35209
  const [tab, setTab] = useState(isAdvancedConfig(initial) ? "advanced" : "base");
35067
35210
  const [base, setBase] = useState(formStateFromConfig(initial));
35068
35211
  const [bands, setBands] = useState([...initial.bands]);
35069
35212
  const [common, setCommon] = useState({
35070
35213
  profiles: initial.profiles,
35071
35214
  segmentSeconds: initial.segmentSeconds,
35072
- retention: initial.retention,
35073
- stripsEnabled: initial.stripsEnabled
35215
+ retention: initial.retention
35074
35216
  });
35075
35217
  const ret = common.retention ?? {};
35076
35218
  const setRet = (patch) => setCommon({
@@ -35108,8 +35250,7 @@ function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regene
35108
35250
  const shared = {
35109
35251
  profiles: common.profiles ? [...common.profiles] : void 0,
35110
35252
  segmentSeconds: common.segmentSeconds,
35111
- retention: common.retention,
35112
- ...common.stripsEnabled === void 0 ? {} : { stripsEnabled: common.stripsEnabled }
35253
+ retention: common.retention
35113
35254
  };
35114
35255
  if (tab === "base") onSave({
35115
35256
  ...configFromFormState({
@@ -35261,65 +35402,37 @@ function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regene
35261
35402
  }),
35262
35403
  /* @__PURE__ */ jsxs("div", {
35263
35404
  className: "flex flex-wrap items-center gap-4 text-xs",
35264
- children: [
35265
- /* @__PURE__ */ jsxs("div", {
35266
- className: "flex items-center gap-2",
35267
- children: [/* @__PURE__ */ jsx("span", {
35268
- className: "text-foreground-subtle",
35269
- children: "Profiles:"
35270
- }), PROFILES.map((p) => {
35271
- return /* @__PURE__ */ jsx("button", {
35272
- type: "button",
35273
- onClick: () => toggleProfile(p),
35274
- className: `rounded px-2 py-1 ${common.profiles == null || common.profiles.includes(p) ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
35275
- children: p
35276
- }, p);
35277
- })]
35278
- }),
35279
- /* @__PURE__ */ jsxs("label", {
35280
- className: "flex items-center gap-1",
35281
- children: [
35282
- "Segment",
35283
- /* @__PURE__ */ jsx("input", {
35284
- type: "number",
35285
- min: 1,
35286
- value: common.segmentSeconds ?? "",
35287
- placeholder: "default",
35288
- onChange: (e) => setCommon({
35289
- ...common,
35290
- segmentSeconds: numOrUndef(e.target.value)
35291
- }),
35292
- className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
35293
- }),
35294
- "s"
35295
- ]
35296
- }),
35297
- /* @__PURE__ */ jsxs("label", {
35298
- className: "flex items-center gap-1",
35299
- children: [/* @__PURE__ */ jsx("input", {
35300
- type: "checkbox",
35301
- checked: common.stripsEnabled === true,
35405
+ children: [/* @__PURE__ */ jsxs("div", {
35406
+ className: "flex items-center gap-2",
35407
+ children: [/* @__PURE__ */ jsx("span", {
35408
+ className: "text-foreground-subtle",
35409
+ children: "Profiles:"
35410
+ }), PROFILES.map((p) => {
35411
+ return /* @__PURE__ */ jsx("button", {
35412
+ type: "button",
35413
+ onClick: () => toggleProfile(p),
35414
+ className: `rounded px-2 py-1 ${common.profiles == null || common.profiles.includes(p) ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
35415
+ children: p
35416
+ }, p);
35417
+ })]
35418
+ }), /* @__PURE__ */ jsxs("label", {
35419
+ className: "flex items-center gap-1",
35420
+ children: [
35421
+ "Segment",
35422
+ /* @__PURE__ */ jsx("input", {
35423
+ type: "number",
35424
+ min: 1,
35425
+ value: common.segmentSeconds ?? "",
35426
+ placeholder: "default",
35302
35427
  onChange: (e) => setCommon({
35303
35428
  ...common,
35304
- stripsEnabled: e.target.checked
35305
- })
35306
- }), /* @__PURE__ */ jsx("span", {
35307
- className: "text-foreground-subtle",
35308
- children: "Scrub thumbnail strips"
35309
- })]
35310
- }),
35311
- onRegenerateStrips ? /* @__PURE__ */ jsx("button", {
35312
- type: "button",
35313
- onClick: onRegenerateStrips,
35314
- disabled: regeneratingStrips === true,
35315
- className: "rounded-md border border-border bg-surface-hover px-2 py-1 text-xs text-foreground-subtle transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
35316
- children: regeneratingStrips === true ? "Regenerating…" : "Regenerate strips"
35317
- }) : null
35318
- ]
35319
- }),
35320
- /* @__PURE__ */ jsx("p", {
35321
- className: "text-[11px] text-foreground-subtle",
35322
- children: "OPT-IN: save every keyframe of the low recording as a JPEG strip for fluid fast scrubbing. Costs disk (a derived cache, reclaimed with the footage). Regenerate clears and rebuilds the recent days from the segments already on disk."
35429
+ segmentSeconds: numOrUndef(e.target.value)
35430
+ }),
35431
+ className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
35432
+ }),
35433
+ "s"
35434
+ ]
35435
+ })]
35323
35436
  }),
35324
35437
  /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
35325
35438
  className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
@@ -36568,14 +36681,6 @@ function RecordingPanel({ deviceId }) {
36568
36681
  const configQuery = useRecordingGetDeviceConfig({ deviceId });
36569
36682
  const setConfig = useRecordingSetDeviceConfig();
36570
36683
  const rescanStorage = useRecordingRescanStorage();
36571
- const customAction = useAddonsCustom();
36572
- const regenerateStrips = useCallback(() => {
36573
- customAction.mutate({
36574
- addonId: "recorder",
36575
- action: "regenerateStrips",
36576
- input: { deviceId }
36577
- });
36578
- }, [customAction, deviceId]);
36579
36684
  const saveConfig = (config) => {
36580
36685
  setConfig.mutate({
36581
36686
  deviceId,
@@ -36617,9 +36722,7 @@ function RecordingPanel({ deviceId }) {
36617
36722
  children: resolvedConfig ? /* @__PURE__ */ jsx(RecordingSettings, {
36618
36723
  initial: resolvedConfig,
36619
36724
  saving: setConfig.isPending,
36620
- onSave: saveConfig,
36621
- onRegenerateStrips: regenerateStrips,
36622
- regeneratingStrips: customAction.isPending
36725
+ onSave: saveConfig
36623
36726
  }, JSON.stringify(resolvedConfig)) : /* @__PURE__ */ jsx("div", {
36624
36727
  className: "px-1 py-2 text-xs text-foreground-subtle",
36625
36728
  children: "Loading settings…"
@@ -38955,9 +39058,9 @@ function ObjectArrayField({ field }) {
38955
39058
  className: "rounded-md border border-border bg-surface-subtle px-3 py-2 text-xs text-foreground-subtle",
38956
39059
  children: field.emptyMessage ?? "No entries"
38957
39060
  }) : /* @__PURE__ */ jsx("div", {
38958
- className: "rounded-md border border-border overflow-hidden",
39061
+ className: "rounded-md border border-border overflow-x-auto",
38959
39062
  children: /* @__PURE__ */ jsxs("table", {
38960
- className: "w-full text-xs",
39063
+ className: "w-full min-w-[28rem] text-xs",
38961
39064
  children: [/* @__PURE__ */ jsx("thead", {
38962
39065
  className: "bg-surface-subtle border-b border-border",
38963
39066
  children: /* @__PURE__ */ jsx("tr", { children: field.columns.map((col) => /* @__PURE__ */ jsx("th", {
@@ -40184,6 +40287,31 @@ function DetectionBoxes({ detections, frameWidth, frameHeight }) {
40184
40287
  }) });
40185
40288
  }
40186
40289
  //#endregion
40290
+ //#region src/composites/reconnect-schedule.ts
40291
+ /** Exponential backoff, ±20% jitter, bounded attempts. The bound exists so a
40292
+ * permanently-dead stream stops consuming signaling; the EXHAUSTED action is
40293
+ * the caller's cue to surface a hard error (never to go silent). */
40294
+ var RECONNECT_POLICY = {
40295
+ baseDelayMs: 1500,
40296
+ maxDelayMs: 15e3,
40297
+ maxAttempts: 40
40298
+ };
40299
+ /**
40300
+ * Decide what attempt number `attempt` (0-based) should do. `random` is the
40301
+ * jitter source (unit interval), injectable for tests.
40302
+ */
40303
+ function nextReconnectAction(attempt, random = Math.random) {
40304
+ if (attempt >= RECONNECT_POLICY.maxAttempts) return {
40305
+ kind: "exhausted",
40306
+ attempts: attempt
40307
+ };
40308
+ const base = Math.min(RECONNECT_POLICY.maxDelayMs, RECONNECT_POLICY.baseDelayMs * 2 ** attempt);
40309
+ return {
40310
+ kind: "retry",
40311
+ delayMs: Math.round(base * (.8 + random() * .4))
40312
+ };
40313
+ }
40314
+ //#endregion
40187
40315
  //#region src/composites/camera-stream-player.tsx
40188
40316
  /**
40189
40317
  * Silence (or restore) a live WebRTC stream FOR REAL.
@@ -40246,11 +40374,8 @@ function computeClientHints(container) {
40246
40374
  }
40247
40375
  return hints;
40248
40376
  }
40249
- var RECONNECT_BASE_DELAY_MS = 1500;
40250
- var RECONNECT_MAX_DELAY_MS = 15e3;
40251
- var MAX_RECONNECT_ATTEMPTS = 40;
40252
40377
  var FIRST_FRAME_TIMEOUT_MS = 8e3;
40253
- function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel }) {
40378
+ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, onVideoElement }) {
40254
40379
  const videoRef = useRef(null);
40255
40380
  const containerRef = useRef(null);
40256
40381
  const pcRef = useRef(null);
@@ -40266,6 +40391,14 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
40266
40391
  * consumer, without re-creating the connect callback on every render. */
40267
40392
  const onControlChannelRef = useRef(onControlChannel);
40268
40393
  onControlChannelRef.current = onControlChannel;
40394
+ /** Same pattern for the video-element handle: delivered once on mount, null
40395
+ * on unmount — the ref keeps the latest consumer without re-running. */
40396
+ const onVideoElementRef = useRef(onVideoElement);
40397
+ onVideoElementRef.current = onVideoElement;
40398
+ useEffect(() => {
40399
+ onVideoElementRef.current?.(videoRef.current);
40400
+ return () => onVideoElementRef.current?.(null);
40401
+ }, []);
40269
40402
  /** The live session being polled for `pendingRenegotiation` (client-offer). */
40270
40403
  const activeSessionIdRef = useRef(null);
40271
40404
  /** Timer for the session-state (renegotiation) poll loop. */
@@ -40654,6 +40787,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
40654
40787
  iceConnectedMs: timing.iceConnectedMs,
40655
40788
  firstTrackMs: timing.firstTrackMs
40656
40789
  });
40790
+ reportHardErrorRef.current("no decoded frame after connect");
40791
+ scheduleReconnect();
40657
40792
  }, FIRST_FRAME_TIMEOUT_MS);
40658
40793
  }
40659
40794
  }
@@ -40922,17 +41057,32 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
40922
41057
  ]);
40923
41058
  const connect = useClientOffer ? connectClientOffer : useServerOffer ? connectServerOffer : connectWhep;
40924
41059
  const connectRef = useRef(() => {});
41060
+ const onReconnectAttemptRef = useRef(onReconnectAttempt);
41061
+ onReconnectAttemptRef.current = onReconnectAttempt;
41062
+ const reportHardErrorRef = useRef(() => {});
41063
+ reportHardErrorRef.current = (msg) => {
41064
+ console.warn("[WebRTC] hard error", {
41065
+ streamKey,
41066
+ msg
41067
+ });
41068
+ setErrorMessage(msg);
41069
+ onError?.(msg);
41070
+ updateState("error");
41071
+ };
40925
41072
  connectRef.current = connect;
40926
41073
  const scheduleReconnect = useCallback(() => {
40927
41074
  if (!mountedRef.current) return;
40928
- if (reconnectAttemptsRef.current >= MAX_RECONNECT_ATTEMPTS) return;
40929
41075
  const attempt = reconnectAttemptsRef.current;
41076
+ const action = nextReconnectAction(attempt);
41077
+ onReconnectAttemptRef.current?.(action);
41078
+ if (action.kind === "exhausted") {
41079
+ reportHardErrorRef.current(`reconnect attempts exhausted (${action.attempts})`);
41080
+ return;
41081
+ }
40930
41082
  reconnectAttemptsRef.current += 1;
40931
- const base = Math.min(RECONNECT_MAX_DELAY_MS, RECONNECT_BASE_DELAY_MS * 2 ** attempt);
40932
- const delay = Math.round(base * (.8 + Math.random() * .4));
40933
41083
  reconnectTimerRef.current = setTimeout(() => {
40934
41084
  if (mountedRef.current) connectRef.current();
40935
- }, delay);
41085
+ }, action.delayMs);
40936
41086
  }, []);
40937
41087
  useEffect(() => {
40938
41088
  mountedRef.current = true;
@@ -41313,7 +41463,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
41313
41463
  children: statsText
41314
41464
  }),
41315
41465
  overlay,
41316
- !stillImg && state === "connecting" && /* @__PURE__ */ jsxs("div", {
41466
+ showControls && !stillImg && state === "connecting" && /* @__PURE__ */ jsxs("div", {
41317
41467
  className: "absolute inset-0 z-10 transform-gpu flex flex-col items-center justify-center bg-black/70 gap-2",
41318
41468
  children: [/* @__PURE__ */ jsx("svg", {
41319
41469
  className: "h-6 w-6 text-white/60 animate-spin",
@@ -41335,7 +41485,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
41335
41485
  children: "Connecting…"
41336
41486
  })]
41337
41487
  }),
41338
- !stillImg && (state === "error" || state === "disconnected") && /* @__PURE__ */ jsxs("div", {
41488
+ showControls && !stillImg && (state === "error" || state === "disconnected") && /* @__PURE__ */ jsxs("div", {
41339
41489
  className: "absolute inset-0 z-10 transform-gpu flex flex-col items-center justify-center bg-black/70 gap-2",
41340
41490
  children: [
41341
41491
  /* @__PURE__ */ jsx("svg", {
@@ -41360,7 +41510,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
41360
41510
  })
41361
41511
  ]
41362
41512
  }),
41363
- stillImg && (state === "connecting" || state === "disconnected") && /* @__PURE__ */ jsx("div", {
41513
+ showControls && stillImg && (state === "connecting" || state === "disconnected") && /* @__PURE__ */ jsx("div", {
41364
41514
  className: "absolute top-2 left-2 z-10 transform-gpu flex h-6 w-6 items-center justify-center rounded-full bg-black/55",
41365
41515
  children: /* @__PURE__ */ jsx("svg", {
41366
41516
  className: "h-3.5 w-3.5 text-white/90 animate-spin",
@@ -41379,7 +41529,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
41379
41529
  })
41380
41530
  })
41381
41531
  }),
41382
- stillImg && state === "error" && /* @__PURE__ */ jsx("button", {
41532
+ showControls && stillImg && state === "error" && /* @__PURE__ */ jsx("button", {
41383
41533
  onClick: handleReconnect,
41384
41534
  title: errorMessage || "Reconnect",
41385
41535
  className: "absolute top-2 left-2 z-10 transform-gpu flex h-6 w-6 items-center justify-center rounded-full bg-black/55 text-white/90 hover:bg-black/75 transition-colors",
@@ -42493,7 +42643,7 @@ function StreamBrokerSelector({ deviceId, value, onChange, disabled, label, clas
42493
42643
  * needs a one-click copy affordance (export setup panels, etc.).
42494
42644
  */
42495
42645
  var COPIED_RESET_MS = 2e3;
42496
- function CopyButton({ value, label, className, disabled }) {
42646
+ function CopyButton({ value, label, srLabel, className, disabled }) {
42497
42647
  const [copied, setCopied] = useState(false);
42498
42648
  const handleCopy = useCallback(() => {
42499
42649
  if (!value) return;
@@ -42509,7 +42659,7 @@ function CopyButton({ value, label, className, disabled }) {
42509
42659
  disabled: disabled || value.length === 0,
42510
42660
  onClick: handleCopy,
42511
42661
  className: cn(className),
42512
- "aria-label": copied ? "Copied" : `Copy ${label ?? "value"}`,
42662
+ "aria-label": copied ? "Copied" : `Copy ${srLabel ?? label ?? "value"}`,
42513
42663
  children: [copied ? /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 text-success" }) : /* @__PURE__ */ jsx(Copy, { className: "h-3.5 w-3.5" }), label ? /* @__PURE__ */ jsx("span", {
42514
42664
  className: "ml-1",
42515
42665
  children: copied ? "Copied" : label
@@ -42578,35 +42728,30 @@ function capitaliseLinkState(state) {
42578
42728
  /**
42579
42729
  * A single label/value row in the Setup section. `secret` rows mask the
42580
42730
  * value behind a reveal toggle; every row gets a copy button.
42731
+ *
42732
+ * Layout — including the L1 stack that keeps a long token readable on a phone
42733
+ * — is owned by the shared `<SettingRow>`; this component only decides what
42734
+ * the value and the affordances are.
42581
42735
  */
42582
42736
  function SetupFieldRow({ field }) {
42583
42737
  const [revealed, setRevealed] = useState(false);
42584
42738
  const isSecret = field.secret === true;
42585
42739
  const displayValue = isSecret && !revealed ? "•".repeat(Math.min(field.value.length, 24)) : field.value;
42586
- return /* @__PURE__ */ jsxs("div", {
42587
- className: "flex items-center gap-2 py-1.5",
42588
- children: [
42589
- /* @__PURE__ */ jsx("span", {
42590
- className: "text-[11px] text-foreground-subtle w-32 shrink-0",
42591
- children: field.label
42592
- }),
42593
- /* @__PURE__ */ jsx("span", {
42594
- className: "flex-1 min-w-0 truncate font-mono text-xs text-foreground",
42595
- children: displayValue || ""
42596
- }),
42597
- isSecret && /* @__PURE__ */ jsx(Button, {
42598
- size: "sm",
42599
- variant: "ghost",
42600
- type: "button",
42601
- "aria-label": revealed ? "Hide value" : "Reveal value",
42602
- onClick: () => setRevealed((v) => !v),
42603
- children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5" })
42604
- }),
42605
- /* @__PURE__ */ jsx(CopyButton, {
42606
- value: field.value,
42607
- label: field.label
42608
- })
42609
- ]
42740
+ return /* @__PURE__ */ jsx(SettingRow, {
42741
+ label: field.label,
42742
+ valueClassName: "font-mono",
42743
+ actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [isSecret && /* @__PURE__ */ jsx(Button, {
42744
+ size: "sm",
42745
+ variant: "ghost",
42746
+ type: "button",
42747
+ "aria-label": revealed ? "Hide value" : "Reveal value",
42748
+ onClick: () => setRevealed((v) => !v),
42749
+ children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5" })
42750
+ }), /* @__PURE__ */ jsx(CopyButton, {
42751
+ value: field.value,
42752
+ srLabel: field.label
42753
+ })] }),
42754
+ children: displayValue || ""
42610
42755
  });
42611
42756
  }
42612
42757
  /**
@@ -46712,6 +46857,112 @@ function useDeviceDetections(trpc, deviceId) {
46712
46857
  };
46713
46858
  }
46714
46859
  //#endregion
46860
+ //#region src/hooks/turn-server-cache.ts
46861
+ /** Short enough that rotated credentials are picked up promptly. */
46862
+ var DEFAULT_FRESH_TTL_MS = 5 * 6e4;
46863
+ /** Half of the shortest provider credential lifetime in the fleet (24 h). */
46864
+ var DEFAULT_STALE_CAP_MS = 720 * 6e4;
46865
+ var DEFAULT_STORAGE_KEY = "camstack:turn-servers:v1";
46866
+ function defaultStorage() {
46867
+ const g = globalThis;
46868
+ try {
46869
+ return g.localStorage ?? null;
46870
+ } catch {
46871
+ return null;
46872
+ }
46873
+ }
46874
+ /** Type guard for a persisted entry — storage content is external data. */
46875
+ function isCacheEntry(value) {
46876
+ if (typeof value !== "object" || value === null) return false;
46877
+ const v = value;
46878
+ if (typeof v.fetchedAt !== "number" || !Array.isArray(v.servers)) return false;
46879
+ return v.servers.every((s) => {
46880
+ if (typeof s !== "object" || s === null) return false;
46881
+ const srv = s;
46882
+ if (!(typeof srv.urls === "string" || Array.isArray(srv.urls) && srv.urls.every((u) => typeof u === "string"))) return false;
46883
+ if (srv.username !== void 0 && typeof srv.username !== "string") return false;
46884
+ if (srv.credential !== void 0 && typeof srv.credential !== "string") return false;
46885
+ return true;
46886
+ });
46887
+ }
46888
+ var TurnServerCache = class {
46889
+ freshTtlMs;
46890
+ staleCapMs;
46891
+ storage;
46892
+ now;
46893
+ storageKey;
46894
+ /** Keyed on the caller's tRPC client object (stable per connected system). */
46895
+ memory = /* @__PURE__ */ new WeakMap();
46896
+ /** In-flight fetch per key — concurrent callers share one round trip. */
46897
+ inflight = /* @__PURE__ */ new WeakMap();
46898
+ constructor(options = {}) {
46899
+ this.freshTtlMs = options.freshTtlMs ?? DEFAULT_FRESH_TTL_MS;
46900
+ this.staleCapMs = options.staleCapMs ?? DEFAULT_STALE_CAP_MS;
46901
+ this.storage = "storage" in options ? options.storage ?? null : defaultStorage();
46902
+ this.now = options.now ?? (() => Date.now());
46903
+ this.storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
46904
+ }
46905
+ /**
46906
+ * Resolve the ICE servers for `key`, fetching via `fetch` only when no
46907
+ * fresh-enough entry exists. Never rejects: a failed fetch resolves to the
46908
+ * stale entry when one exists, else `undefined`.
46909
+ */
46910
+ async getOrFetch(key, fetch) {
46911
+ const at = this.now();
46912
+ const entry = this.memory.get(key) ?? this.readStorage();
46913
+ if (entry) {
46914
+ const age = at - entry.fetchedAt;
46915
+ if (age < this.freshTtlMs) return entry.servers;
46916
+ if (age < this.staleCapMs) {
46917
+ this.startFetch(key, fetch, entry);
46918
+ return entry.servers;
46919
+ }
46920
+ }
46921
+ return this.startFetch(key, fetch, entry);
46922
+ }
46923
+ startFetch(key, fetch, stale) {
46924
+ const pending = this.inflight.get(key);
46925
+ if (pending) return pending;
46926
+ const run = (async () => {
46927
+ try {
46928
+ const servers = await fetch();
46929
+ if (servers.length > 0) {
46930
+ const entry = {
46931
+ servers,
46932
+ fetchedAt: this.now()
46933
+ };
46934
+ this.memory.set(key, entry);
46935
+ this.writeStorage(entry);
46936
+ }
46937
+ return servers;
46938
+ } catch {
46939
+ return stale?.servers;
46940
+ }
46941
+ })().finally(() => {
46942
+ this.inflight.delete(key);
46943
+ });
46944
+ this.inflight.set(key, run);
46945
+ return run;
46946
+ }
46947
+ readStorage() {
46948
+ if (!this.storage) return void 0;
46949
+ try {
46950
+ const raw = this.storage.getItem(this.storageKey);
46951
+ if (raw === null) return void 0;
46952
+ const parsed = JSON.parse(raw);
46953
+ return isCacheEntry(parsed) ? parsed : void 0;
46954
+ } catch {
46955
+ return;
46956
+ }
46957
+ }
46958
+ writeStorage(entry) {
46959
+ if (!this.storage) return;
46960
+ try {
46961
+ this.storage.setItem(this.storageKey, JSON.stringify(entry));
46962
+ } catch {}
46963
+ }
46964
+ };
46965
+ //#endregion
46715
46966
  //#region src/hooks/use-device-webrtc.ts
46716
46967
  /**
46717
46968
  * useDeviceWebrtc — WebRTC signaling hook for device-scoped streaming.
@@ -46729,15 +46980,16 @@ function useDeviceDetections(trpc, deviceId) {
46729
46980
  * @param deviceId - numeric device ID (null = disabled)
46730
46981
  * @param pollIntervalMs - how often to refresh profile slots (default: 5000)
46731
46982
  */
46732
- /** TTL for the TURN/STUN credential cache. Short enough that rotated creds
46733
- * are picked up promptly, long enough to cover a connect + several profile
46734
- * switches without re-paying the fetch. */
46735
- var TURN_CACHE_TTL_MS = 5 * 6e4;
46736
- /** Keyed on the caller's trpc client object (stable per connected system —
46737
- * NOT on `trpc.turnProvider`, which is a proxy minted fresh on every property
46738
- * access), so two admin tabs pointed at different hubs never cross-serve
46739
- * credentials. An unstable key degrades to a cache miss, never to wrong creds. */
46740
- var turnServersCache = /* @__PURE__ */ new WeakMap();
46983
+ /** Module-level TURN/STUN credential cache. Keyed on the caller's trpc client
46984
+ * object (stable per connected system NOT on `trpc.turnProvider`, which is
46985
+ * a proxy minted fresh on every property access), so two admin tabs pointed
46986
+ * at different hubs never cross-serve credentials from the memory layer; the
46987
+ * storage layer is per-origin, and the page's origin IS the hub. Coalesces
46988
+ * concurrent fetches (the mount prefetch and the connect's own call used to
46989
+ * race into TWO round trips) and persists across page loads so a fresh embed
46990
+ * page one per camera open on native finds warm credentials instead of
46991
+ * re-paying the measured 0.2–3.6 s serialized fetch. See turn-server-cache.ts. */
46992
+ var turnServersCache = new TurnServerCache();
46741
46993
  function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
46742
46994
  const [remoteStreams, setRemoteStreams] = useState([]);
46743
46995
  useEffect(() => {
@@ -46806,25 +47058,17 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
46806
47058
  };
46807
47059
  }, [deviceId, remoteStreams]);
46808
47060
  const getIceServers = useCallback(async () => {
46809
- if (!trpc.turnProvider) return void 0;
46810
- const cached = turnServersCache.get(trpc);
46811
- if (cached && Date.now() - cached.fetchedAt < TURN_CACHE_TTL_MS) return cached.servers;
46812
- try {
46813
- const mapped = (await trpc.turnProvider.getTurnServers.query()).map((s) => {
47061
+ const provider = trpc.turnProvider;
47062
+ if (!provider) return void 0;
47063
+ return turnServersCache.getOrFetch(trpc, async () => {
47064
+ return (await provider.getTurnServers.query()).map((s) => {
46814
47065
  return {
46815
47066
  urls: typeof s.urls === "string" ? s.urls : [...s.urls],
46816
47067
  ...s.username !== void 0 ? { username: s.username } : {},
46817
47068
  ...s.credential !== void 0 ? { credential: s.credential } : {}
46818
47069
  };
46819
47070
  });
46820
- turnServersCache.set(trpc, {
46821
- servers: mapped,
46822
- fetchedAt: Date.now()
46823
- });
46824
- return mapped;
46825
- } catch {
46826
- return cached?.servers;
46827
- }
47071
+ });
46828
47072
  }, [trpc]);
46829
47073
  useEffect(() => {
46830
47074
  getIceServers();
@@ -47198,4 +47442,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
47198
47442
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
47199
47443
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
47200
47444
  //#endregion
47201
- export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, 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, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, 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, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, 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, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, 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, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCreateRule, useNotificationRulesDeleteRule, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListRules, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelMediaRelocate, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMediaRelocateStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, 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, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocate, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetRelocateStatus, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionClose, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionResize, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
47445
+ export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, 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, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, 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, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, 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, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, 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, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, 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, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCreateRule, useNotificationRulesDeleteRule, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListRules, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelMediaRelocate, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMediaRelocateStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, 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, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocate, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetRelocateStatus, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionClose, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionResize, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };