@camstack/ui-library 1.1.23 → 1.1.25

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.
@@ -12,11 +12,13 @@ interface TimelineControlsProps {
12
12
  readonly onViewChange: (w: DayWindow) => void;
13
13
  }
14
14
  /**
15
- * Date selector + zoom-in / zoom-out buttons for the recording timeline.
16
- * Zoom cycles through ZOOM_LEVELS (widest → narrowest), anchored on the view's
17
- * RIGHT edge — so on today's timeline "now" stays pinned to the right instead
18
- * of drifting to a midday range. Horizontal pan (wheel) then moves the window
19
- * back/forward in time. Pan is wired via wheel events in RecordingTimeline.
15
+ * Date selector + prev/next pan + zoom-in / zoom-out buttons for the recording
16
+ * timeline. Zoom cycles through ZOOM_LEVELS (widest → narrowest), anchored on
17
+ * the view's RIGHT edge — so on today's timeline "now" stays pinned to the right
18
+ * instead of drifting to a midday range. The / buttons step the visible
19
+ * window earlier/later within the day (the discoverable equivalent of the
20
+ * horizontal wheel-pan wired in RecordingTimeline), so a zoomed-in day can be
21
+ * navigated back and forth without a mouse wheel.
20
22
  */
21
23
  export declare function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange, }: TimelineControlsProps): import("react").JSX.Element;
22
24
  export {};
@@ -293,6 +293,12 @@ export declare const useCoverSetPosition: typeof trpc.cover.setPosition.useMutat
293
293
  export declare const useCoverSetTiltPosition: typeof trpc.cover.setTiltPosition.useMutation;
294
294
  /** Generated alias around `trpc.cover.getStatus.useQuery`. */
295
295
  export declare const useCoverGetStatus: typeof trpc.cover.getStatus.useQuery;
296
+ /** Generated alias around `trpc.dayNight.getOptions.useQuery`. */
297
+ export declare const useDayNightGetOptions: typeof trpc.dayNight.getOptions.useQuery;
298
+ /** Generated alias around `trpc.dayNight.setSettings.useMutation`. */
299
+ export declare const useDayNightSetSettings: typeof trpc.dayNight.setSettings.useMutation;
300
+ /** Generated alias around `trpc.dayNight.getStatus.useQuery`. */
301
+ export declare const useDayNightGetStatus: typeof trpc.dayNight.getStatus.useQuery;
296
302
  /** Generated alias around `trpc.decoder.supportsCodec.useQuery`. */
297
303
  export declare const useDecoderSupportsCodec: typeof trpc.decoder.supportsCodec.useQuery;
298
304
  /** Generated alias around `trpc.decoder.getInfo.useQuery`. */
@@ -629,6 +635,12 @@ export declare const useHumidifierGetStatus: typeof trpc.humidifier.getStatus.us
629
635
  export declare const useHumiditySensorGetStatus: typeof trpc.humiditySensor.getStatus.useQuery;
630
636
  /** Generated alias around `trpc.image.getStatus.useQuery`. */
631
637
  export declare const useImageGetStatus: typeof trpc.image.getStatus.useQuery;
638
+ /** Generated alias around `trpc.imageSettings.getOptions.useQuery`. */
639
+ export declare const useImageSettingsGetOptions: typeof trpc.imageSettings.getOptions.useQuery;
640
+ /** Generated alias around `trpc.imageSettings.setSettings.useMutation`. */
641
+ export declare const useImageSettingsSetSettings: typeof trpc.imageSettings.setSettings.useMutation;
642
+ /** Generated alias around `trpc.imageSettings.getStatus.useQuery`. */
643
+ export declare const useImageSettingsGetStatus: typeof trpc.imageSettings.getStatus.useQuery;
632
644
  /** Generated alias around `trpc.integrations.list.useQuery`. */
633
645
  export declare const useIntegrationsList: typeof trpc.integrations.list.useQuery;
634
646
  /** Generated alias around `trpc.integrations.get.useQuery`. */
package/dist/index.cjs CHANGED
@@ -13842,6 +13842,17 @@ function AgentStepEditor(props) {
13842
13842
  }
13843
13843
  //#endregion
13844
13844
  //#region src/composites/pipeline-tree-matrix.tsx
13845
+ /**
13846
+ * Fixed column geometry (rem). The matrix uses a CSS grid with STATIC track
13847
+ * widths so a cell's content (a status chip, a long model id) can never resize
13848
+ * a column or shift its neighbours — cell content is truncated WITHIN the fixed
13849
+ * track instead. This kills the "table dances when the last column's status
13850
+ * changes" jitter. See `min-w-0` on every grid child, which lets the child
13851
+ * shrink to the track (a grid item's automatic minimum is its content size, so
13852
+ * without this a non-wrapping model id would blow the track wider than its max).
13853
+ */
13854
+ var STEP_COL_REM = 18;
13855
+ var AGENT_COL_REM = 13;
13845
13856
  function flattenTree(nodes) {
13846
13857
  const out = [];
13847
13858
  const walk = (list, depth) => {
@@ -13921,40 +13932,58 @@ function QuickToggle({ enabled, onChange, disabled }) {
13921
13932
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: cn("inline-block h-3 w-3 rounded-full bg-white shadow transition-transform", enabled ? "translate-x-3.5" : "translate-x-0.5") })
13922
13933
  });
13923
13934
  }
13935
+ /**
13936
+ * Cell content. Kept width-stable: the status dot is `shrink-0` (reserved
13937
+ * space) and the model id truncates inside a `min-w-0` flex row, so a longer
13938
+ * model id never widens the cell — it ellipsises instead.
13939
+ */
13924
13940
  function renderCellContent(state) {
13925
13941
  if (state.kind === "enabled") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
13926
- className: "inline-flex items-center gap-1",
13942
+ className: "flex min-w-0 items-center gap-1",
13927
13943
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full bg-emerald-500 shrink-0" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13928
- className: "font-mono text-foreground",
13944
+ className: "font-mono text-foreground truncate",
13929
13945
  children: state.modelId
13930
13946
  })]
13931
13947
  });
13932
13948
  if (state.kind === "disabled") return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
13933
- className: "inline-flex items-center gap-1 text-foreground-subtle",
13934
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full border border-foreground-subtle/60 shrink-0" }), "off"]
13949
+ className: "flex min-w-0 items-center gap-1 text-foreground-subtle",
13950
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full border border-foreground-subtle/60 shrink-0" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13951
+ className: "truncate",
13952
+ children: "off"
13953
+ })]
13935
13954
  });
13936
13955
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
13937
- className: "inline-flex items-center gap-1 text-foreground-subtle/70",
13938
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full bg-muted shrink-0" }), "n/a"]
13956
+ className: "flex min-w-0 items-center gap-1 text-foreground-subtle/70",
13957
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: "h-1.5 w-1.5 rounded-full bg-muted shrink-0" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13958
+ className: "truncate",
13959
+ children: "n/a"
13960
+ })]
13939
13961
  });
13940
13962
  }
13941
- function Row({ node, depth, agents, getCellState, onCellClick, selectedCell, toggleProps }) {
13963
+ function cellButtonClass(state, isSelected, extra) {
13964
+ return cn("text-left text-xs hover:bg-muted/40", state.kind === "enabled" && "bg-emerald-500/5", state.kind === "na" && "bg-muted/30", isSelected && "ring-2 ring-primary ring-inset", extra);
13965
+ }
13966
+ /** Step label (slot heading + addon name + class chips), shared by both views. */
13967
+ function StepLabel({ node }) {
13968
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13969
+ className: "flex flex-col gap-1 min-w-0 flex-1",
13970
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotHeading, { slot: node.slot }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13971
+ className: "flex items-center gap-2 flex-wrap",
13972
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13973
+ className: "font-semibold truncate",
13974
+ children: node.addonName
13975
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ClassChips, {
13976
+ inputs: node.inputClasses,
13977
+ outputs: node.outputClasses
13978
+ })]
13979
+ })]
13980
+ });
13981
+ }
13982
+ function GridRow({ node, depth, agents, getCellState, onCellClick, selectedCell, toggleProps }) {
13942
13983
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13943
- className: "sticky left-0 z-10 bg-surface px-3 py-2 border-b border-border text-xs flex items-start gap-2",
13984
+ className: "sticky left-0 z-10 bg-surface px-3 py-2 border-b border-border text-xs flex items-start gap-2 min-w-0",
13944
13985
  style: { paddingLeft: `${12 + depth * 14}px` },
13945
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13946
- className: "flex flex-col gap-1 min-w-0 flex-1",
13947
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SlotHeading, { slot: node.slot }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13948
- className: "flex items-center gap-2 flex-wrap",
13949
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13950
- className: "font-semibold truncate",
13951
- children: node.addonName
13952
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ClassChips, {
13953
- inputs: node.inputClasses,
13954
- outputs: node.outputClasses
13955
- })]
13956
- })]
13957
- }), toggleProps && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13986
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StepLabel, { node }), toggleProps && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
13958
13987
  className: "pl-2 pt-0.5 shrink-0",
13959
13988
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QuickToggle, {
13960
13989
  enabled: toggleProps.enabled,
@@ -13964,24 +13993,28 @@ function Row({ node, depth, agents, getCellState, onCellClick, selectedCell, tog
13964
13993
  })]
13965
13994
  }), agents.map((a) => {
13966
13995
  const state = getCellState(node.addonId, a.agentNodeId);
13967
- const isSelected = selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId;
13968
13996
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
13969
13997
  type: "button",
13970
13998
  onClick: () => onCellClick(node.addonId, a.agentNodeId),
13971
- className: cn("text-left px-3 py-1.5 border-b border-l border-border text-xs hover:bg-muted/40", state.kind === "enabled" && "bg-emerald-500/5", state.kind === "na" && "bg-muted/30", isSelected && "ring-2 ring-primary ring-inset"),
13999
+ className: cellButtonClass(state, selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId, "min-w-0 overflow-hidden px-3 py-1.5 border-b border-l border-border"),
13972
14000
  children: renderCellContent(state)
13973
14001
  }, a.agentNodeId);
13974
14002
  })] });
13975
14003
  }
13976
- function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
13977
- const rows = (0, react$1.useMemo)(() => flattenTree(tree), [tree]);
13978
- const gridTemplate = `minmax(320px, 1fr) repeat(${agents.length}, minmax(160px, 220px))`;
14004
+ /**
14005
+ * Wide layout: horizontally self-scrolling matrix. The scroll lives INSIDE
14006
+ * this `overflow-auto` box (sticky first column + sticky header row) so the
14007
+ * page body never scrolls sideways. Column tracks are fixed px widths — see
14008
+ * STEP_COL_REM / AGENT_COL_REM — so the grid is static regardless of content.
14009
+ */
14010
+ function MatrixGrid({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
14011
+ const gridTemplate = `${STEP_COL_REM}rem repeat(${agents.length}, ${AGENT_COL_REM}rem)`;
13979
14012
  const showToggle = onToggleEnabled !== void 0 && agents.length === 1;
13980
14013
  const onlyAgent = agents[0]?.agentNodeId;
13981
14014
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13982
14015
  className: "overflow-auto border border-border rounded",
13983
14016
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13984
- className: "grid",
14017
+ className: "grid w-max",
13985
14018
  style: { gridTemplateColumns: gridTemplate },
13986
14019
  children: [
13987
14020
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
@@ -13989,9 +14022,9 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
13989
14022
  children: "Step"
13990
14023
  }),
13991
14024
  agents.map((a) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
13992
- className: "sticky top-0 z-10 bg-muted/60 px-3 py-2 border-b border-l border-border",
14025
+ className: "sticky top-0 z-10 min-w-0 bg-muted/60 px-3 py-2 border-b border-l border-border",
13993
14026
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13994
- className: "text-xs font-semibold text-foreground",
14027
+ className: "text-xs font-semibold text-foreground truncate",
13995
14028
  children: a.agentNodeId
13996
14029
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
13997
14030
  className: "text-[10px] text-foreground-subtle truncate",
@@ -14000,7 +14033,7 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
14000
14033
  }, a.agentNodeId)),
14001
14034
  rows.map(({ node, depth }) => {
14002
14035
  const cellState = showToggle && onlyAgent !== void 0 ? getCellState(node.addonId, onlyAgent) : null;
14003
- return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Row, {
14036
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GridRow, {
14004
14037
  node,
14005
14038
  depth,
14006
14039
  agents,
@@ -14018,6 +14051,90 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
14018
14051
  })
14019
14052
  });
14020
14053
  }
14054
+ /**
14055
+ * Narrow layout: one card per agent column, each listing every step stacked
14056
+ * vertically. A wide fixed matrix is unusable on a phone; here the same cells
14057
+ * (click-to-edit, status, toggle) reflow into full-width rows so nothing scrolls
14058
+ * horizontally. Feature-parity with the matrix — same `onCellClick`, same
14059
+ * `renderCellContent`, same single-agent `onToggleEnabled`.
14060
+ */
14061
+ function StackedCards({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
14062
+ const showToggle = onToggleEnabled !== void 0 && agents.length === 1;
14063
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14064
+ className: "space-y-3",
14065
+ children: agents.map((a) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
14066
+ className: "border border-border rounded overflow-hidden",
14067
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
14068
+ className: "bg-muted/60 px-3 py-2 border-b border-border",
14069
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14070
+ className: "text-xs font-semibold text-foreground truncate",
14071
+ children: a.agentNodeId
14072
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14073
+ className: "text-[10px] text-foreground-subtle truncate",
14074
+ children: a.engineLabel
14075
+ })]
14076
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", { children: rows.map(({ node, depth }) => {
14077
+ const state = getCellState(node.addonId, a.agentNodeId);
14078
+ const isSelected = selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId;
14079
+ const toggleProps = showToggle && state !== null ? {
14080
+ enabled: state.kind === "enabled",
14081
+ onChange: (next) => onToggleEnabled?.(node.addonId, next),
14082
+ disabled: state.kind === "na"
14083
+ } : void 0;
14084
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
14085
+ className: "border-b border-border last:border-b-0",
14086
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
14087
+ className: "flex items-center gap-2",
14088
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
14089
+ type: "button",
14090
+ onClick: () => onCellClick(node.addonId, a.agentNodeId),
14091
+ className: cellButtonClass(state, isSelected, "flex flex-1 min-w-0 items-start justify-between gap-3 px-3 py-2"),
14092
+ style: { paddingLeft: `${12 + depth * 14}px` },
14093
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(StepLabel, { node }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
14094
+ className: "shrink-0 max-w-[45%] pt-0.5",
14095
+ children: renderCellContent(state)
14096
+ })]
14097
+ }), toggleProps && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
14098
+ className: "pr-3 shrink-0",
14099
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(QuickToggle, {
14100
+ enabled: toggleProps.enabled,
14101
+ onChange: toggleProps.onChange,
14102
+ disabled: toggleProps.disabled
14103
+ })
14104
+ })]
14105
+ })
14106
+ }, node.addonId);
14107
+ }) })]
14108
+ }, a.agentNodeId))
14109
+ });
14110
+ }
14111
+ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
14112
+ const rows = (0, react$1.useMemo)(() => flattenTree(tree), [tree]);
14113
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
14114
+ className: "@container/matrix w-full",
14115
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14116
+ className: "@2xl/matrix:hidden",
14117
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(StackedCards, {
14118
+ rows,
14119
+ agents,
14120
+ getCellState,
14121
+ onCellClick,
14122
+ selectedCell,
14123
+ onToggleEnabled
14124
+ })
14125
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
14126
+ className: "hidden @2xl/matrix:block",
14127
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(MatrixGrid, {
14128
+ rows,
14129
+ agents,
14130
+ getCellState,
14131
+ onCellClick,
14132
+ selectedCell,
14133
+ onToggleEnabled
14134
+ })
14135
+ })]
14136
+ });
14137
+ }
14021
14138
  //#endregion
14022
14139
  //#region src/trpc-react.ts
14023
14140
  /**
@@ -16925,6 +17042,12 @@ var useCoverSetPosition = trpc.cover.setPosition.useMutation;
16925
17042
  var useCoverSetTiltPosition = trpc.cover.setTiltPosition.useMutation;
16926
17043
  /** Generated alias around `trpc.cover.getStatus.useQuery`. */
16927
17044
  var useCoverGetStatus = trpc.cover.getStatus.useQuery;
17045
+ /** Generated alias around `trpc.dayNight.getOptions.useQuery`. */
17046
+ var useDayNightGetOptions = trpc.dayNight.getOptions.useQuery;
17047
+ /** Generated alias around `trpc.dayNight.setSettings.useMutation`. */
17048
+ var useDayNightSetSettings = trpc.dayNight.setSettings.useMutation;
17049
+ /** Generated alias around `trpc.dayNight.getStatus.useQuery`. */
17050
+ var useDayNightGetStatus = trpc.dayNight.getStatus.useQuery;
16928
17051
  /** Generated alias around `trpc.decoder.supportsCodec.useQuery`. */
16929
17052
  var useDecoderSupportsCodec = trpc.decoder.supportsCodec.useQuery;
16930
17053
  /** Generated alias around `trpc.decoder.getInfo.useQuery`. */
@@ -17261,6 +17384,12 @@ var useHumidifierGetStatus = trpc.humidifier.getStatus.useQuery;
17261
17384
  var useHumiditySensorGetStatus = trpc.humiditySensor.getStatus.useQuery;
17262
17385
  /** Generated alias around `trpc.image.getStatus.useQuery`. */
17263
17386
  var useImageGetStatus = trpc.image.getStatus.useQuery;
17387
+ /** Generated alias around `trpc.imageSettings.getOptions.useQuery`. */
17388
+ var useImageSettingsGetOptions = trpc.imageSettings.getOptions.useQuery;
17389
+ /** Generated alias around `trpc.imageSettings.setSettings.useMutation`. */
17390
+ var useImageSettingsSetSettings = trpc.imageSettings.setSettings.useMutation;
17391
+ /** Generated alias around `trpc.imageSettings.getStatus.useQuery`. */
17392
+ var useImageSettingsGetStatus = trpc.imageSettings.getStatus.useQuery;
17264
17393
  /** Generated alias around `trpc.integrations.list.useQuery`. */
17265
17394
  var useIntegrationsList = trpc.integrations.list.useQuery;
17266
17395
  /** Generated alias around `trpc.integrations.get.useQuery`. */
@@ -34197,11 +34326,13 @@ function parseDateInput(value) {
34197
34326
  return new Date(y, m - 1, d);
34198
34327
  }
34199
34328
  /**
34200
- * Date selector + zoom-in / zoom-out buttons for the recording timeline.
34201
- * Zoom cycles through ZOOM_LEVELS (widest → narrowest), anchored on the view's
34202
- * RIGHT edge — so on today's timeline "now" stays pinned to the right instead
34203
- * of drifting to a midday range. Horizontal pan (wheel) then moves the window
34204
- * back/forward in time. Pan is wired via wheel events in RecordingTimeline.
34329
+ * Date selector + prev/next pan + zoom-in / zoom-out buttons for the recording
34330
+ * timeline. Zoom cycles through ZOOM_LEVELS (widest → narrowest), anchored on
34331
+ * the view's RIGHT edge — so on today's timeline "now" stays pinned to the right
34332
+ * instead of drifting to a midday range. The / buttons step the visible
34333
+ * window earlier/later within the day (the discoverable equivalent of the
34334
+ * horizontal wheel-pan wired in RecordingTimeline), so a zoomed-in day can be
34335
+ * navigated back and forth without a mouse wheel.
34205
34336
  */
34206
34337
  function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange }) {
34207
34338
  const handleDateChange = (e) => {
@@ -34236,6 +34367,15 @@ function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange }) {
34236
34367
  };
34237
34368
  const canZoomIn = currentLevelIdx < ZOOM_LEVELS.length - 1;
34238
34369
  const canZoomOut = currentLevelIdx > 0;
34370
+ const panStepMs = Math.max(1, Math.round(viewSpan * .9));
34371
+ const canPanPrev = view.fromMs > dayBounds.fromMs;
34372
+ const canPanNext = view.toMs < dayBounds.toMs;
34373
+ const handlePanPrev = () => {
34374
+ onViewChange(panWindow(view, dayBounds, -panStepMs));
34375
+ };
34376
+ const handlePanNext = () => {
34377
+ onViewChange(panWindow(view, dayBounds, panStepMs));
34378
+ };
34239
34379
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
34240
34380
  className: "flex items-center gap-2",
34241
34381
  children: [
@@ -34249,23 +34389,48 @@ function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange }) {
34249
34389
  }),
34250
34390
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
34251
34391
  className: "ml-auto flex items-center gap-1",
34252
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
34253
- type: "button",
34254
- onClick: handleZoomOut,
34255
- disabled: !canZoomOut,
34256
- title: "Zoom out",
34257
- "aria-label": "Zoom out",
34258
- className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34259
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ZoomOut, { size: 13 })
34260
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
34261
- type: "button",
34262
- onClick: handleZoomIn,
34263
- disabled: !canZoomIn,
34264
- title: "Zoom in",
34265
- "aria-label": "Zoom in",
34266
- className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34267
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ZoomIn, { size: 13 })
34268
- })]
34392
+ children: [
34393
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
34394
+ type: "button",
34395
+ onClick: handlePanPrev,
34396
+ disabled: !canPanPrev,
34397
+ title: "Earlier (pan back)",
34398
+ "aria-label": "Pan earlier",
34399
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34400
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronLeft, { size: 14 })
34401
+ }),
34402
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
34403
+ type: "button",
34404
+ onClick: handlePanNext,
34405
+ disabled: !canPanNext,
34406
+ title: "Later (pan forward)",
34407
+ "aria-label": "Pan later",
34408
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34409
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChevronRight, { size: 14 })
34410
+ }),
34411
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
34412
+ className: "mx-0.5 h-3 w-px bg-border",
34413
+ "aria-hidden": "true"
34414
+ }),
34415
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
34416
+ type: "button",
34417
+ onClick: handleZoomOut,
34418
+ disabled: !canZoomOut,
34419
+ title: "Zoom out",
34420
+ "aria-label": "Zoom out",
34421
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34422
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ZoomOut, { size: 13 })
34423
+ }),
34424
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
34425
+ type: "button",
34426
+ onClick: handleZoomIn,
34427
+ disabled: !canZoomIn,
34428
+ title: "Zoom in",
34429
+ "aria-label": "Zoom in",
34430
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34431
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ZoomIn, { size: 13 })
34432
+ })
34433
+ ]
34269
34434
  }),
34270
34435
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
34271
34436
  className: "text-[9px] text-foreground-subtle",
@@ -41192,7 +41357,6 @@ var LEVEL_SEVERITY = {
41192
41357
  error: 3
41193
41358
  };
41194
41359
  var LEVEL_OPTIONS = [
41195
- "all",
41196
41360
  "debug",
41197
41361
  "info",
41198
41362
  "warn",
@@ -41207,7 +41371,7 @@ function passesLevel(logLevel, filterLevel) {
41207
41371
  function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: propsDeviceId, containerDeviceId: propsContainerDeviceId, integrationId: propsIntegrationId, requestId: propsRequestId, level: initialLevel, maxHeight = "max-h-96", showScope = false, showFilters = true, limit = 100, liveBuffer: externalBuffer, onClose, className }) {
41208
41372
  const [localAddonId, setLocalAddonId] = (0, react$1.useState)("");
41209
41373
  const [localDeviceId, setLocalDeviceId] = (0, react$1.useState)("");
41210
- const [levelFilter, setLevelFilter] = (0, react$1.useState)(initialLevel);
41374
+ const [levelFilter, setLevelFilter] = (0, react$1.useState)(initialLevel ?? "info");
41211
41375
  const agentId = propsAgentId;
41212
41376
  const addonId = propsAddonId ?? (localAddonId || void 0);
41213
41377
  const deviceId = propsDeviceId ?? (localDeviceId ? Number(localDeviceId) : void 0);
@@ -41408,11 +41572,11 @@ function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: pro
41408
41572
  }),
41409
41573
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41410
41574
  className: "flex rounded border border-border overflow-hidden text-[9px]",
41411
- children: LEVEL_OPTIONS.map((l) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
41575
+ children: LEVEL_OPTIONS.map((l, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
41412
41576
  type: "button",
41413
- onClick: () => setLevelFilter(l === "all" ? void 0 : l),
41414
- className: cn("px-1.5 py-0.5 capitalize transition-colors", l === "all" && !levelFilter || levelFilter === l ? "bg-primary/10 text-primary" : "text-foreground-subtle hover:bg-surface-hover", l !== "all" && "border-l border-border"),
41415
- children: [l, l !== "all" ? "+" : ""]
41577
+ onClick: () => setLevelFilter(l),
41578
+ className: cn("px-1.5 py-0.5 capitalize transition-colors", levelFilter === l ? "bg-primary/10 text-primary" : "text-foreground-subtle hover:bg-surface-hover", i > 0 && "border-l border-border"),
41579
+ children: [l, "+"]
41416
41580
  }, l))
41417
41581
  }),
41418
41582
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ToolbarButton, {
@@ -45337,6 +45501,9 @@ exports.useCoverSetPosition = useCoverSetPosition;
45337
45501
  exports.useCoverSetTiltPosition = useCoverSetTiltPosition;
45338
45502
  exports.useCoverStop = useCoverStop;
45339
45503
  exports.useCustomFieldRenderer = useCustomFieldRenderer;
45504
+ exports.useDayNightGetOptions = useDayNightGetOptions;
45505
+ exports.useDayNightGetStatus = useDayNightGetStatus;
45506
+ exports.useDayNightSetSettings = useDayNightSetSettings;
45340
45507
  exports.useDebouncedString = useDebouncedString;
45341
45508
  exports.useDecoderCreateSession = useDecoderCreateSession;
45342
45509
  exports.useDecoderDestroySession = useDecoderDestroySession;
@@ -45527,6 +45694,9 @@ exports.useHumidifierSetOn = useHumidifierSetOn;
45527
45694
  exports.useHumidifierSetTargetHumidity = useHumidifierSetTargetHumidity;
45528
45695
  exports.useHumiditySensorGetStatus = useHumiditySensorGetStatus;
45529
45696
  exports.useImageGetStatus = useImageGetStatus;
45697
+ exports.useImageSettingsGetOptions = useImageSettingsGetOptions;
45698
+ exports.useImageSettingsGetStatus = useImageSettingsGetStatus;
45699
+ exports.useImageSettingsSetSettings = useImageSettingsSetSettings;
45530
45700
  exports.useIntegrationsCreate = useIntegrationsCreate;
45531
45701
  exports.useIntegrationsDelete = useIntegrationsDelete;
45532
45702
  exports.useIntegrationsGet = useIntegrationsGet;
package/dist/index.js CHANGED
@@ -13818,6 +13818,17 @@ function AgentStepEditor(props) {
13818
13818
  }
13819
13819
  //#endregion
13820
13820
  //#region src/composites/pipeline-tree-matrix.tsx
13821
+ /**
13822
+ * Fixed column geometry (rem). The matrix uses a CSS grid with STATIC track
13823
+ * widths so a cell's content (a status chip, a long model id) can never resize
13824
+ * a column or shift its neighbours — cell content is truncated WITHIN the fixed
13825
+ * track instead. This kills the "table dances when the last column's status
13826
+ * changes" jitter. See `min-w-0` on every grid child, which lets the child
13827
+ * shrink to the track (a grid item's automatic minimum is its content size, so
13828
+ * without this a non-wrapping model id would blow the track wider than its max).
13829
+ */
13830
+ var STEP_COL_REM = 18;
13831
+ var AGENT_COL_REM = 13;
13821
13832
  function flattenTree(nodes) {
13822
13833
  const out = [];
13823
13834
  const walk = (list, depth) => {
@@ -13897,40 +13908,58 @@ function QuickToggle({ enabled, onChange, disabled }) {
13897
13908
  children: /* @__PURE__ */ jsx("span", { className: cn("inline-block h-3 w-3 rounded-full bg-white shadow transition-transform", enabled ? "translate-x-3.5" : "translate-x-0.5") })
13898
13909
  });
13899
13910
  }
13911
+ /**
13912
+ * Cell content. Kept width-stable: the status dot is `shrink-0` (reserved
13913
+ * space) and the model id truncates inside a `min-w-0` flex row, so a longer
13914
+ * model id never widens the cell — it ellipsises instead.
13915
+ */
13900
13916
  function renderCellContent(state) {
13901
13917
  if (state.kind === "enabled") return /* @__PURE__ */ jsxs("span", {
13902
- className: "inline-flex items-center gap-1",
13918
+ className: "flex min-w-0 items-center gap-1",
13903
13919
  children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-emerald-500 shrink-0" }), /* @__PURE__ */ jsx("span", {
13904
- className: "font-mono text-foreground",
13920
+ className: "font-mono text-foreground truncate",
13905
13921
  children: state.modelId
13906
13922
  })]
13907
13923
  });
13908
13924
  if (state.kind === "disabled") return /* @__PURE__ */ jsxs("span", {
13909
- className: "inline-flex items-center gap-1 text-foreground-subtle",
13910
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full border border-foreground-subtle/60 shrink-0" }), "off"]
13925
+ className: "flex min-w-0 items-center gap-1 text-foreground-subtle",
13926
+ children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full border border-foreground-subtle/60 shrink-0" }), /* @__PURE__ */ jsx("span", {
13927
+ className: "truncate",
13928
+ children: "off"
13929
+ })]
13911
13930
  });
13912
13931
  return /* @__PURE__ */ jsxs("span", {
13913
- className: "inline-flex items-center gap-1 text-foreground-subtle/70",
13914
- children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-muted shrink-0" }), "n/a"]
13932
+ className: "flex min-w-0 items-center gap-1 text-foreground-subtle/70",
13933
+ children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-muted shrink-0" }), /* @__PURE__ */ jsx("span", {
13934
+ className: "truncate",
13935
+ children: "n/a"
13936
+ })]
13915
13937
  });
13916
13938
  }
13917
- function Row({ node, depth, agents, getCellState, onCellClick, selectedCell, toggleProps }) {
13939
+ function cellButtonClass(state, isSelected, extra) {
13940
+ return cn("text-left text-xs hover:bg-muted/40", state.kind === "enabled" && "bg-emerald-500/5", state.kind === "na" && "bg-muted/30", isSelected && "ring-2 ring-primary ring-inset", extra);
13941
+ }
13942
+ /** Step label (slot heading + addon name + class chips), shared by both views. */
13943
+ function StepLabel({ node }) {
13944
+ return /* @__PURE__ */ jsxs("div", {
13945
+ className: "flex flex-col gap-1 min-w-0 flex-1",
13946
+ children: [/* @__PURE__ */ jsx(SlotHeading, { slot: node.slot }), /* @__PURE__ */ jsxs("div", {
13947
+ className: "flex items-center gap-2 flex-wrap",
13948
+ children: [/* @__PURE__ */ jsx("span", {
13949
+ className: "font-semibold truncate",
13950
+ children: node.addonName
13951
+ }), /* @__PURE__ */ jsx(ClassChips, {
13952
+ inputs: node.inputClasses,
13953
+ outputs: node.outputClasses
13954
+ })]
13955
+ })]
13956
+ });
13957
+ }
13958
+ function GridRow({ node, depth, agents, getCellState, onCellClick, selectedCell, toggleProps }) {
13918
13959
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
13919
- className: "sticky left-0 z-10 bg-surface px-3 py-2 border-b border-border text-xs flex items-start gap-2",
13960
+ className: "sticky left-0 z-10 bg-surface px-3 py-2 border-b border-border text-xs flex items-start gap-2 min-w-0",
13920
13961
  style: { paddingLeft: `${12 + depth * 14}px` },
13921
- children: [/* @__PURE__ */ jsxs("div", {
13922
- className: "flex flex-col gap-1 min-w-0 flex-1",
13923
- children: [/* @__PURE__ */ jsx(SlotHeading, { slot: node.slot }), /* @__PURE__ */ jsxs("div", {
13924
- className: "flex items-center gap-2 flex-wrap",
13925
- children: [/* @__PURE__ */ jsx("span", {
13926
- className: "font-semibold truncate",
13927
- children: node.addonName
13928
- }), /* @__PURE__ */ jsx(ClassChips, {
13929
- inputs: node.inputClasses,
13930
- outputs: node.outputClasses
13931
- })]
13932
- })]
13933
- }), toggleProps && /* @__PURE__ */ jsx("span", {
13962
+ children: [/* @__PURE__ */ jsx(StepLabel, { node }), toggleProps && /* @__PURE__ */ jsx("span", {
13934
13963
  className: "pl-2 pt-0.5 shrink-0",
13935
13964
  children: /* @__PURE__ */ jsx(QuickToggle, {
13936
13965
  enabled: toggleProps.enabled,
@@ -13940,24 +13969,28 @@ function Row({ node, depth, agents, getCellState, onCellClick, selectedCell, tog
13940
13969
  })]
13941
13970
  }), agents.map((a) => {
13942
13971
  const state = getCellState(node.addonId, a.agentNodeId);
13943
- const isSelected = selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId;
13944
13972
  return /* @__PURE__ */ jsx("button", {
13945
13973
  type: "button",
13946
13974
  onClick: () => onCellClick(node.addonId, a.agentNodeId),
13947
- className: cn("text-left px-3 py-1.5 border-b border-l border-border text-xs hover:bg-muted/40", state.kind === "enabled" && "bg-emerald-500/5", state.kind === "na" && "bg-muted/30", isSelected && "ring-2 ring-primary ring-inset"),
13975
+ className: cellButtonClass(state, selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId, "min-w-0 overflow-hidden px-3 py-1.5 border-b border-l border-border"),
13948
13976
  children: renderCellContent(state)
13949
13977
  }, a.agentNodeId);
13950
13978
  })] });
13951
13979
  }
13952
- function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
13953
- const rows = useMemo(() => flattenTree(tree), [tree]);
13954
- const gridTemplate = `minmax(320px, 1fr) repeat(${agents.length}, minmax(160px, 220px))`;
13980
+ /**
13981
+ * Wide layout: horizontally self-scrolling matrix. The scroll lives INSIDE
13982
+ * this `overflow-auto` box (sticky first column + sticky header row) so the
13983
+ * page body never scrolls sideways. Column tracks are fixed px widths — see
13984
+ * STEP_COL_REM / AGENT_COL_REM — so the grid is static regardless of content.
13985
+ */
13986
+ function MatrixGrid({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
13987
+ const gridTemplate = `${STEP_COL_REM}rem repeat(${agents.length}, ${AGENT_COL_REM}rem)`;
13955
13988
  const showToggle = onToggleEnabled !== void 0 && agents.length === 1;
13956
13989
  const onlyAgent = agents[0]?.agentNodeId;
13957
13990
  return /* @__PURE__ */ jsx("div", {
13958
13991
  className: "overflow-auto border border-border rounded",
13959
13992
  children: /* @__PURE__ */ jsxs("div", {
13960
- className: "grid",
13993
+ className: "grid w-max",
13961
13994
  style: { gridTemplateColumns: gridTemplate },
13962
13995
  children: [
13963
13996
  /* @__PURE__ */ jsx("div", {
@@ -13965,9 +13998,9 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
13965
13998
  children: "Step"
13966
13999
  }),
13967
14000
  agents.map((a) => /* @__PURE__ */ jsxs("div", {
13968
- className: "sticky top-0 z-10 bg-muted/60 px-3 py-2 border-b border-l border-border",
14001
+ className: "sticky top-0 z-10 min-w-0 bg-muted/60 px-3 py-2 border-b border-l border-border",
13969
14002
  children: [/* @__PURE__ */ jsx("div", {
13970
- className: "text-xs font-semibold text-foreground",
14003
+ className: "text-xs font-semibold text-foreground truncate",
13971
14004
  children: a.agentNodeId
13972
14005
  }), /* @__PURE__ */ jsx("div", {
13973
14006
  className: "text-[10px] text-foreground-subtle truncate",
@@ -13976,7 +14009,7 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
13976
14009
  }, a.agentNodeId)),
13977
14010
  rows.map(({ node, depth }) => {
13978
14011
  const cellState = showToggle && onlyAgent !== void 0 ? getCellState(node.addonId, onlyAgent) : null;
13979
- return /* @__PURE__ */ jsx(Row, {
14012
+ return /* @__PURE__ */ jsx(GridRow, {
13980
14013
  node,
13981
14014
  depth,
13982
14015
  agents,
@@ -13994,6 +14027,90 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
13994
14027
  })
13995
14028
  });
13996
14029
  }
14030
+ /**
14031
+ * Narrow layout: one card per agent column, each listing every step stacked
14032
+ * vertically. A wide fixed matrix is unusable on a phone; here the same cells
14033
+ * (click-to-edit, status, toggle) reflow into full-width rows so nothing scrolls
14034
+ * horizontally. Feature-parity with the matrix — same `onCellClick`, same
14035
+ * `renderCellContent`, same single-agent `onToggleEnabled`.
14036
+ */
14037
+ function StackedCards({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
14038
+ const showToggle = onToggleEnabled !== void 0 && agents.length === 1;
14039
+ return /* @__PURE__ */ jsx("div", {
14040
+ className: "space-y-3",
14041
+ children: agents.map((a) => /* @__PURE__ */ jsxs("div", {
14042
+ className: "border border-border rounded overflow-hidden",
14043
+ children: [/* @__PURE__ */ jsxs("div", {
14044
+ className: "bg-muted/60 px-3 py-2 border-b border-border",
14045
+ children: [/* @__PURE__ */ jsx("div", {
14046
+ className: "text-xs font-semibold text-foreground truncate",
14047
+ children: a.agentNodeId
14048
+ }), /* @__PURE__ */ jsx("div", {
14049
+ className: "text-[10px] text-foreground-subtle truncate",
14050
+ children: a.engineLabel
14051
+ })]
14052
+ }), /* @__PURE__ */ jsx("ul", { children: rows.map(({ node, depth }) => {
14053
+ const state = getCellState(node.addonId, a.agentNodeId);
14054
+ const isSelected = selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId;
14055
+ const toggleProps = showToggle && state !== null ? {
14056
+ enabled: state.kind === "enabled",
14057
+ onChange: (next) => onToggleEnabled?.(node.addonId, next),
14058
+ disabled: state.kind === "na"
14059
+ } : void 0;
14060
+ return /* @__PURE__ */ jsx("li", {
14061
+ className: "border-b border-border last:border-b-0",
14062
+ children: /* @__PURE__ */ jsxs("div", {
14063
+ className: "flex items-center gap-2",
14064
+ children: [/* @__PURE__ */ jsxs("button", {
14065
+ type: "button",
14066
+ onClick: () => onCellClick(node.addonId, a.agentNodeId),
14067
+ className: cellButtonClass(state, isSelected, "flex flex-1 min-w-0 items-start justify-between gap-3 px-3 py-2"),
14068
+ style: { paddingLeft: `${12 + depth * 14}px` },
14069
+ children: [/* @__PURE__ */ jsx(StepLabel, { node }), /* @__PURE__ */ jsx("span", {
14070
+ className: "shrink-0 max-w-[45%] pt-0.5",
14071
+ children: renderCellContent(state)
14072
+ })]
14073
+ }), toggleProps && /* @__PURE__ */ jsx("span", {
14074
+ className: "pr-3 shrink-0",
14075
+ children: /* @__PURE__ */ jsx(QuickToggle, {
14076
+ enabled: toggleProps.enabled,
14077
+ onChange: toggleProps.onChange,
14078
+ disabled: toggleProps.disabled
14079
+ })
14080
+ })]
14081
+ })
14082
+ }, node.addonId);
14083
+ }) })]
14084
+ }, a.agentNodeId))
14085
+ });
14086
+ }
14087
+ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
14088
+ const rows = useMemo(() => flattenTree(tree), [tree]);
14089
+ return /* @__PURE__ */ jsxs("div", {
14090
+ className: "@container/matrix w-full",
14091
+ children: [/* @__PURE__ */ jsx("div", {
14092
+ className: "@2xl/matrix:hidden",
14093
+ children: /* @__PURE__ */ jsx(StackedCards, {
14094
+ rows,
14095
+ agents,
14096
+ getCellState,
14097
+ onCellClick,
14098
+ selectedCell,
14099
+ onToggleEnabled
14100
+ })
14101
+ }), /* @__PURE__ */ jsx("div", {
14102
+ className: "hidden @2xl/matrix:block",
14103
+ children: /* @__PURE__ */ jsx(MatrixGrid, {
14104
+ rows,
14105
+ agents,
14106
+ getCellState,
14107
+ onCellClick,
14108
+ selectedCell,
14109
+ onToggleEnabled
14110
+ })
14111
+ })]
14112
+ });
14113
+ }
13997
14114
  //#endregion
13998
14115
  //#region src/trpc-react.ts
13999
14116
  /**
@@ -16901,6 +17018,12 @@ var useCoverSetPosition = trpc.cover.setPosition.useMutation;
16901
17018
  var useCoverSetTiltPosition = trpc.cover.setTiltPosition.useMutation;
16902
17019
  /** Generated alias around `trpc.cover.getStatus.useQuery`. */
16903
17020
  var useCoverGetStatus = trpc.cover.getStatus.useQuery;
17021
+ /** Generated alias around `trpc.dayNight.getOptions.useQuery`. */
17022
+ var useDayNightGetOptions = trpc.dayNight.getOptions.useQuery;
17023
+ /** Generated alias around `trpc.dayNight.setSettings.useMutation`. */
17024
+ var useDayNightSetSettings = trpc.dayNight.setSettings.useMutation;
17025
+ /** Generated alias around `trpc.dayNight.getStatus.useQuery`. */
17026
+ var useDayNightGetStatus = trpc.dayNight.getStatus.useQuery;
16904
17027
  /** Generated alias around `trpc.decoder.supportsCodec.useQuery`. */
16905
17028
  var useDecoderSupportsCodec = trpc.decoder.supportsCodec.useQuery;
16906
17029
  /** Generated alias around `trpc.decoder.getInfo.useQuery`. */
@@ -17237,6 +17360,12 @@ var useHumidifierGetStatus = trpc.humidifier.getStatus.useQuery;
17237
17360
  var useHumiditySensorGetStatus = trpc.humiditySensor.getStatus.useQuery;
17238
17361
  /** Generated alias around `trpc.image.getStatus.useQuery`. */
17239
17362
  var useImageGetStatus = trpc.image.getStatus.useQuery;
17363
+ /** Generated alias around `trpc.imageSettings.getOptions.useQuery`. */
17364
+ var useImageSettingsGetOptions = trpc.imageSettings.getOptions.useQuery;
17365
+ /** Generated alias around `trpc.imageSettings.setSettings.useMutation`. */
17366
+ var useImageSettingsSetSettings = trpc.imageSettings.setSettings.useMutation;
17367
+ /** Generated alias around `trpc.imageSettings.getStatus.useQuery`. */
17368
+ var useImageSettingsGetStatus = trpc.imageSettings.getStatus.useQuery;
17240
17369
  /** Generated alias around `trpc.integrations.list.useQuery`. */
17241
17370
  var useIntegrationsList = trpc.integrations.list.useQuery;
17242
17371
  /** Generated alias around `trpc.integrations.get.useQuery`. */
@@ -34173,11 +34302,13 @@ function parseDateInput(value) {
34173
34302
  return new Date(y, m - 1, d);
34174
34303
  }
34175
34304
  /**
34176
- * Date selector + zoom-in / zoom-out buttons for the recording timeline.
34177
- * Zoom cycles through ZOOM_LEVELS (widest → narrowest), anchored on the view's
34178
- * RIGHT edge — so on today's timeline "now" stays pinned to the right instead
34179
- * of drifting to a midday range. Horizontal pan (wheel) then moves the window
34180
- * back/forward in time. Pan is wired via wheel events in RecordingTimeline.
34305
+ * Date selector + prev/next pan + zoom-in / zoom-out buttons for the recording
34306
+ * timeline. Zoom cycles through ZOOM_LEVELS (widest → narrowest), anchored on
34307
+ * the view's RIGHT edge — so on today's timeline "now" stays pinned to the right
34308
+ * instead of drifting to a midday range. The / buttons step the visible
34309
+ * window earlier/later within the day (the discoverable equivalent of the
34310
+ * horizontal wheel-pan wired in RecordingTimeline), so a zoomed-in day can be
34311
+ * navigated back and forth without a mouse wheel.
34181
34312
  */
34182
34313
  function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange }) {
34183
34314
  const handleDateChange = (e) => {
@@ -34212,6 +34343,15 @@ function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange }) {
34212
34343
  };
34213
34344
  const canZoomIn = currentLevelIdx < ZOOM_LEVELS.length - 1;
34214
34345
  const canZoomOut = currentLevelIdx > 0;
34346
+ const panStepMs = Math.max(1, Math.round(viewSpan * .9));
34347
+ const canPanPrev = view.fromMs > dayBounds.fromMs;
34348
+ const canPanNext = view.toMs < dayBounds.toMs;
34349
+ const handlePanPrev = () => {
34350
+ onViewChange(panWindow(view, dayBounds, -panStepMs));
34351
+ };
34352
+ const handlePanNext = () => {
34353
+ onViewChange(panWindow(view, dayBounds, panStepMs));
34354
+ };
34215
34355
  return /* @__PURE__ */ jsxs("div", {
34216
34356
  className: "flex items-center gap-2",
34217
34357
  children: [
@@ -34225,23 +34365,48 @@ function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange }) {
34225
34365
  }),
34226
34366
  /* @__PURE__ */ jsxs("div", {
34227
34367
  className: "ml-auto flex items-center gap-1",
34228
- children: [/* @__PURE__ */ jsx("button", {
34229
- type: "button",
34230
- onClick: handleZoomOut,
34231
- disabled: !canZoomOut,
34232
- title: "Zoom out",
34233
- "aria-label": "Zoom out",
34234
- className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34235
- children: /* @__PURE__ */ jsx(ZoomOut, { size: 13 })
34236
- }), /* @__PURE__ */ jsx("button", {
34237
- type: "button",
34238
- onClick: handleZoomIn,
34239
- disabled: !canZoomIn,
34240
- title: "Zoom in",
34241
- "aria-label": "Zoom in",
34242
- className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34243
- children: /* @__PURE__ */ jsx(ZoomIn, { size: 13 })
34244
- })]
34368
+ children: [
34369
+ /* @__PURE__ */ jsx("button", {
34370
+ type: "button",
34371
+ onClick: handlePanPrev,
34372
+ disabled: !canPanPrev,
34373
+ title: "Earlier (pan back)",
34374
+ "aria-label": "Pan earlier",
34375
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34376
+ children: /* @__PURE__ */ jsx(ChevronLeft, { size: 14 })
34377
+ }),
34378
+ /* @__PURE__ */ jsx("button", {
34379
+ type: "button",
34380
+ onClick: handlePanNext,
34381
+ disabled: !canPanNext,
34382
+ title: "Later (pan forward)",
34383
+ "aria-label": "Pan later",
34384
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34385
+ children: /* @__PURE__ */ jsx(ChevronRight, { size: 14 })
34386
+ }),
34387
+ /* @__PURE__ */ jsx("span", {
34388
+ className: "mx-0.5 h-3 w-px bg-border",
34389
+ "aria-hidden": "true"
34390
+ }),
34391
+ /* @__PURE__ */ jsx("button", {
34392
+ type: "button",
34393
+ onClick: handleZoomOut,
34394
+ disabled: !canZoomOut,
34395
+ title: "Zoom out",
34396
+ "aria-label": "Zoom out",
34397
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34398
+ children: /* @__PURE__ */ jsx(ZoomOut, { size: 13 })
34399
+ }),
34400
+ /* @__PURE__ */ jsx("button", {
34401
+ type: "button",
34402
+ onClick: handleZoomIn,
34403
+ disabled: !canZoomIn,
34404
+ title: "Zoom in",
34405
+ "aria-label": "Zoom in",
34406
+ className: "rounded p-1 text-foreground-subtle transition-colors hover:bg-background/60 hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40",
34407
+ children: /* @__PURE__ */ jsx(ZoomIn, { size: 13 })
34408
+ })
34409
+ ]
34245
34410
  }),
34246
34411
  /* @__PURE__ */ jsx("span", {
34247
34412
  className: "text-[9px] text-foreground-subtle",
@@ -41168,7 +41333,6 @@ var LEVEL_SEVERITY = {
41168
41333
  error: 3
41169
41334
  };
41170
41335
  var LEVEL_OPTIONS = [
41171
- "all",
41172
41336
  "debug",
41173
41337
  "info",
41174
41338
  "warn",
@@ -41183,7 +41347,7 @@ function passesLevel(logLevel, filterLevel) {
41183
41347
  function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: propsDeviceId, containerDeviceId: propsContainerDeviceId, integrationId: propsIntegrationId, requestId: propsRequestId, level: initialLevel, maxHeight = "max-h-96", showScope = false, showFilters = true, limit = 100, liveBuffer: externalBuffer, onClose, className }) {
41184
41348
  const [localAddonId, setLocalAddonId] = useState("");
41185
41349
  const [localDeviceId, setLocalDeviceId] = useState("");
41186
- const [levelFilter, setLevelFilter] = useState(initialLevel);
41350
+ const [levelFilter, setLevelFilter] = useState(initialLevel ?? "info");
41187
41351
  const agentId = propsAgentId;
41188
41352
  const addonId = propsAddonId ?? (localAddonId || void 0);
41189
41353
  const deviceId = propsDeviceId ?? (localDeviceId ? Number(localDeviceId) : void 0);
@@ -41384,11 +41548,11 @@ function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: pro
41384
41548
  }),
41385
41549
  /* @__PURE__ */ jsx("div", {
41386
41550
  className: "flex rounded border border-border overflow-hidden text-[9px]",
41387
- children: LEVEL_OPTIONS.map((l) => /* @__PURE__ */ jsxs("button", {
41551
+ children: LEVEL_OPTIONS.map((l, i) => /* @__PURE__ */ jsxs("button", {
41388
41552
  type: "button",
41389
- onClick: () => setLevelFilter(l === "all" ? void 0 : l),
41390
- className: cn("px-1.5 py-0.5 capitalize transition-colors", l === "all" && !levelFilter || levelFilter === l ? "bg-primary/10 text-primary" : "text-foreground-subtle hover:bg-surface-hover", l !== "all" && "border-l border-border"),
41391
- children: [l, l !== "all" ? "+" : ""]
41553
+ onClick: () => setLevelFilter(l),
41554
+ className: cn("px-1.5 py-0.5 capitalize transition-colors", levelFilter === l ? "bg-primary/10 text-primary" : "text-foreground-subtle hover:bg-surface-hover", i > 0 && "border-l border-border"),
41555
+ children: [l, "+"]
41392
41556
  }, l))
41393
41557
  }),
41394
41558
  /* @__PURE__ */ jsx(ToolbarButton, {
@@ -44854,4 +45018,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
44854
45018
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
44855
45019
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
44856
45020
  //#endregion
44857
- 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, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EmptyState, ErrorBox, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, 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, 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, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, 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, resolvePrimaryChild, resolveSensorDisplay, scrubReducer, serializeRecordedCommand, shouldCommit, shouldEmit, 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, useAddonsUpdateFrameworkPackage, 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, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, 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, 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, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, 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, useDoorbellEvents, 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, 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, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, 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, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDetect, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignDecoder, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDecoderAssignment, usePipelineOrchestratorGetDecoderAssignments, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignDecoder, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerReportMotion, usePlateGalleryCorrectPlateText, usePlateGalleryDeletePlate, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, 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, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetStatus, useSnapshotInvalidateCache, useSnapshotProviderGetSnapshot, useSnapshotProviderSupportsDevice, 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, 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, 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 };
45021
+ 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, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EmptyState, ErrorBox, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, 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, 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, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, 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, resolvePrimaryChild, resolveSensorDisplay, scrubReducer, serializeRecordedCommand, shouldCommit, shouldEmit, 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, useAddonsUpdateFrameworkPackage, 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, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, 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, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, 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, useDoorbellEvents, 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, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, 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, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDetect, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignDecoder, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDecoderAssignment, usePipelineOrchestratorGetDecoderAssignments, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignDecoder, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerReportMotion, usePlateGalleryCorrectPlateText, usePlateGalleryDeletePlate, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, 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, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetStatus, useSnapshotInvalidateCache, useSnapshotProviderGetSnapshot, useSnapshotProviderSupportsDevice, 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, 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, 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 };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/ui-library",
3
- "version": "1.1.23",
3
+ "version": "1.1.25",
4
4
  "type": "module",
5
5
  "main": "dist/index.cjs",
6
6
  "module": "dist/index.js",