@camstack/ui-library 1.1.16 → 1.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { ThemeProvider, createTheme, darkColors, defaultTheme, lightColors, themeToCss, useThemeMode } from "./theme/index.js";
2
2
  import * as __mfHostReact from "react";
3
- import React, { Fragment, Suspense, createContext, createElement, forwardRef, lazy, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
3
+ import React, { Fragment, Suspense, createContext, createElement, forwardRef, lazy, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
4
4
  import * as __mfHostReactJsxRuntime from "react/jsx-runtime";
5
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
6
  import * as __mfHostReactDOM from "react-dom";
@@ -7686,6 +7686,240 @@ function ensureMfHostInit() {
7686
7686
  });
7687
7687
  }
7688
7688
  //#endregion
7689
+ //#region src/lib/recorded-control-protocol.ts
7690
+ /** Serialize a command for `RTCDataChannel.send` (matches the server schema). */
7691
+ function serializeRecordedCommand(cmd) {
7692
+ return JSON.stringify(cmd);
7693
+ }
7694
+ /**
7695
+ * Playback mode reported by the server session. `live` = the shared live feed
7696
+ * owns the track; every other value describes the recorded feeder.
7697
+ */
7698
+ var RECORDED_PLAYBACK_MODES = [
7699
+ "live",
7700
+ "loading",
7701
+ "playing",
7702
+ "paused",
7703
+ "gap",
7704
+ "ended",
7705
+ "error"
7706
+ ];
7707
+ function isRecordedPlaybackMode(value) {
7708
+ return typeof value === "string" && RECORDED_PLAYBACK_MODES.includes(value);
7709
+ }
7710
+ /**
7711
+ * Parse a raw server→client control frame. Returns `null` on any malformed
7712
+ * payload (bad JSON, unknown discriminator, wrong field types).
7713
+ */
7714
+ function parseRecordedServerMessage(raw) {
7715
+ let parsed;
7716
+ try {
7717
+ parsed = JSON.parse(raw);
7718
+ } catch {
7719
+ return null;
7720
+ }
7721
+ if (typeof parsed !== "object" || parsed === null) return null;
7722
+ const obj = { ...parsed };
7723
+ if (obj.t === "state" && isRecordedPlaybackMode(obj.state)) return {
7724
+ kind: "state",
7725
+ state: obj.state
7726
+ };
7727
+ if (obj.t === "position" && typeof obj.epochMs === "number") return {
7728
+ kind: "position",
7729
+ epochMs: obj.epochMs
7730
+ };
7731
+ return null;
7732
+ }
7733
+ //#endregion
7734
+ //#region src/lib/scrub-controller.ts
7735
+ /**
7736
+ * scrub-controller — shared scrub-position state for timeline surfaces (R9).
7737
+ *
7738
+ * Ported from the proven srcV2 viewer implementation
7739
+ * (camstack/srcV2/recording/scrub-controller.ts): the same throttle,
7740
+ * commit-dedupe, and live→recorded-bypass semantics, now driving the
7741
+ * admin-ui `RecordingTimeline` through the `camstack-control` datachannel.
7742
+ *
7743
+ * Two layers:
7744
+ * 1. Pure reducer + helpers (unit-tested, no React deps):
7745
+ * scrubReducer, shouldEmit, shouldCommit, cursorFractionFor,
7746
+ * makeScrubBridge
7747
+ * 2. useScrubController hook: thin React glue that bridges the reducer
7748
+ * to a PlaybackControlSink (e.g. the recorded-playback datachannel).
7749
+ */
7750
+ var initialScrubState = {
7751
+ scrubbing: false,
7752
+ scrubEpoch: null,
7753
+ playheadEpoch: null,
7754
+ lastSource: null
7755
+ };
7756
+ function scrubReducer(state, action) {
7757
+ switch (action.type) {
7758
+ case "begin": return {
7759
+ ...state,
7760
+ scrubbing: true,
7761
+ scrubEpoch: null,
7762
+ lastSource: action.source
7763
+ };
7764
+ case "update": return {
7765
+ ...state,
7766
+ scrubbing: true,
7767
+ scrubEpoch: action.epoch,
7768
+ lastSource: action.source
7769
+ };
7770
+ case "end": return {
7771
+ ...state,
7772
+ scrubbing: false,
7773
+ scrubEpoch: null,
7774
+ playheadEpoch: action.epoch,
7775
+ lastSource: action.source
7776
+ };
7777
+ case "seek": return {
7778
+ ...state,
7779
+ scrubbing: false,
7780
+ scrubEpoch: null,
7781
+ playheadEpoch: action.epoch,
7782
+ lastSource: action.source
7783
+ };
7784
+ case "playhead":
7785
+ if (state.scrubbing) return state;
7786
+ return {
7787
+ ...state,
7788
+ playheadEpoch: action.epoch
7789
+ };
7790
+ case "reset": return initialScrubState;
7791
+ default: return state;
7792
+ }
7793
+ }
7794
+ /**
7795
+ * Throttle decision for continuous `update` emits (default ~70 ms).
7796
+ * Returns true when enough time has elapsed since the last emit.
7797
+ */
7798
+ function shouldEmit(lastEmitMs, now, throttleMs = 70) {
7799
+ return now - lastEmitMs >= throttleMs;
7800
+ }
7801
+ /** Epochs within this many ms of the last commit count as the SAME target. */
7802
+ var COMMIT_DEDUPE_TOLERANCE_MS = 750;
7803
+ /** Only dedupe against a commit made within this recent window. */
7804
+ var COMMIT_DEDUPE_WINDOW_MS = 2e3;
7805
+ /**
7806
+ * Decide whether a `seek`/`scrubCommit` should actually hit the playback sink.
7807
+ * Each commit reloads the server feeder (loading→playing) and visibly stutters
7808
+ * playback; firing the same (or a near-identical) target twice in quick
7809
+ * succession produces a redundant reload. Drop a commit only when it targets
7810
+ * essentially the SAME epoch as the last commit AND that commit was recent — a
7811
+ * genuinely different target, or a re-seek to the same spot after the window,
7812
+ * always commits.
7813
+ */
7814
+ function shouldCommit(last, epoch, now, toleranceMs = 750, windowMs = COMMIT_DEDUPE_WINDOW_MS) {
7815
+ if (last === null) return true;
7816
+ const sameTarget = Math.abs(epoch - last.epoch) <= toleranceMs;
7817
+ const recent = now - last.at <= windowMs;
7818
+ return !(sameTarget && recent);
7819
+ }
7820
+ /**
7821
+ * The active cursor position (scrub target while scrubbing, else playhead)
7822
+ * expressed as a 0..1 fraction across the day window.
7823
+ * Returns null when no position is known or the day window is degenerate.
7824
+ */
7825
+ function cursorFractionFor(state, day) {
7826
+ const epoch = state.scrubbing ? state.scrubEpoch : state.playheadEpoch;
7827
+ if (epoch === null) return null;
7828
+ const span = day.to - day.from;
7829
+ if (span <= 0) return null;
7830
+ return Math.min(1, Math.max(0, (epoch - day.from) / span));
7831
+ }
7832
+ /**
7833
+ * Builds the always-active bridge callbacks from a sink, a dispatch, and the
7834
+ * throttle ref. Pure (no React) so it can be unit-tested directly: the hook
7835
+ * just wraps the result in `useMemo`.
7836
+ *
7837
+ * Every gesture drives the sink immediately — there is no VOD-active gate.
7838
+ */
7839
+ function makeScrubBridge(sink, dispatch, lastEmitRef, lastCommitRef = { current: null }, isPlayerLive = () => false) {
7840
+ const commit = (epoch, fire) => {
7841
+ const now = Date.now();
7842
+ if (isPlayerLive()) {
7843
+ lastCommitRef.current = {
7844
+ epoch,
7845
+ at: now
7846
+ };
7847
+ fire(epoch);
7848
+ return;
7849
+ }
7850
+ if (!shouldCommit(lastCommitRef.current, epoch, now)) return;
7851
+ lastCommitRef.current = {
7852
+ epoch,
7853
+ at: now
7854
+ };
7855
+ fire(epoch);
7856
+ };
7857
+ return {
7858
+ beginScrub: (source) => {
7859
+ dispatch({
7860
+ type: "begin",
7861
+ source
7862
+ });
7863
+ sink.scrubStart();
7864
+ },
7865
+ updateScrub: (epoch, source) => {
7866
+ dispatch({
7867
+ type: "update",
7868
+ epoch,
7869
+ source
7870
+ });
7871
+ const now = Date.now();
7872
+ if (!shouldEmit(lastEmitRef.current, now)) return;
7873
+ lastEmitRef.current = now;
7874
+ sink.scrubTo(epoch);
7875
+ },
7876
+ endScrub: (epoch, source) => {
7877
+ dispatch({
7878
+ type: "end",
7879
+ epoch,
7880
+ source
7881
+ });
7882
+ commit(epoch, sink.scrubCommit);
7883
+ },
7884
+ seek: (epoch, source) => {
7885
+ dispatch({
7886
+ type: "seek",
7887
+ epoch,
7888
+ source
7889
+ });
7890
+ commit(epoch, sink.seek);
7891
+ },
7892
+ setPlayhead: (epoch) => dispatch({
7893
+ type: "playhead",
7894
+ epoch
7895
+ }),
7896
+ reset: () => dispatch({ type: "reset" })
7897
+ };
7898
+ }
7899
+ /**
7900
+ * Owns the shared scrub position and bridges it to a playback control sink.
7901
+ *
7902
+ * The bridge is always active: any gesture (drag or tap) drives the sink
7903
+ * immediately. There is no VOD-active gate — the timeline always drives
7904
+ * playback while frame-push mode is on.
7905
+ *
7906
+ * @param sink Always-active playback control surface (e.g. the datachannel)
7907
+ * @param isPlayerLive Synchronous getter for "is the player on the live
7908
+ * edge?" — lets a live→recorded commit bypass dedupe so the seek always
7909
+ * reaches the server.
7910
+ */
7911
+ function useScrubController(sink, isPlayerLive = () => false) {
7912
+ const [state, dispatch] = useReducer(scrubReducer, initialScrubState);
7913
+ const lastEmitRef = useRef(0);
7914
+ const lastCommitRef = useRef(null);
7915
+ const isPlayerLiveRef = useRef(isPlayerLive);
7916
+ isPlayerLiveRef.current = isPlayerLive;
7917
+ return {
7918
+ state,
7919
+ ...useMemo(() => makeScrubBridge(sink, dispatch, lastEmitRef, lastCommitRef, () => isPlayerLiveRef.current()), [sink])
7920
+ };
7921
+ }
7922
+ //#endregion
7689
7923
  //#region node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
7690
7924
  /**
7691
7925
  * @license lucide-react v0.576.0 - ISC
@@ -32524,6 +32758,100 @@ function useVodPlayback() {
32524
32758
  return useContext(VodPlaybackContext);
32525
32759
  }
32526
32760
  //#endregion
32761
+ //#region src/contexts/recorded-playback.tsx
32762
+ /**
32763
+ * RecordedPlayback — shared context wiring the hero player's
32764
+ * `camstack-control` RTCDataChannel to the Recording timeline (R9).
32765
+ *
32766
+ * The hero `StreamPanel` (host side) BINDS the channel that
32767
+ * `CameraStreamPlayer` opens on the live WebRTC session; the Recording
32768
+ * widget's `RecordingTimeline` (controller side) SENDS frame-push playback
32769
+ * commands over it (seek / scrubCommit / setRate / goLive — the broker's
32770
+ * `TimelineSession` drives the `RecordedFeeder` on the SAME session, so
32771
+ * recorded frames arrive on the same `<video>` element) and OBSERVES the
32772
+ * server's playback state + ~1 Hz position reports.
32773
+ *
32774
+ * This is the admin-ui port of the shipped viewer's default recorded path
32775
+ * (srcV2 → embed → `camstack-control`), replacing "manifest-window HLS only".
32776
+ * The HLS VOD path (VodPlayback context) remains available as a fallback.
32777
+ *
32778
+ * Built on `createSharedContext` (NOT a plain `createContext`) so it crosses
32779
+ * the Module-Federation boundary — same mechanism as `vod-playback`.
32780
+ * Consumers outside a provider get the inert default: `bindControlChannel`
32781
+ * is null (StreamPanel then opens NO datachannel — plain live player) and
32782
+ * `channelOpen` is false (RecordingTimeline stays on the HLS path).
32783
+ */
32784
+ var RecordedPlaybackContext = createSharedContext("camstack:recorded-playback", {
32785
+ bindControlChannel: null,
32786
+ channelOpen: false,
32787
+ mode: "live",
32788
+ positionMs: null,
32789
+ send: () => false
32790
+ });
32791
+ function RecordedPlaybackProvider({ children }) {
32792
+ const channelRef = useRef(null);
32793
+ const [channelOpen, setChannelOpen] = useState(false);
32794
+ const [mode, setMode] = useState("live");
32795
+ const [positionMs, setPositionMs] = useState(null);
32796
+ const bindControlChannel = useCallback((channel) => {
32797
+ channelRef.current = channel;
32798
+ const markClosed = () => {
32799
+ if (channelRef.current !== channel) return;
32800
+ channelRef.current = null;
32801
+ setChannelOpen(false);
32802
+ setMode("live");
32803
+ setPositionMs(null);
32804
+ };
32805
+ channel.onopen = () => {
32806
+ if (channelRef.current === channel) setChannelOpen(true);
32807
+ };
32808
+ channel.onclose = markClosed;
32809
+ channel.onerror = markClosed;
32810
+ channel.onmessage = (e) => {
32811
+ if (channelRef.current !== channel) return;
32812
+ const data = e.data;
32813
+ if (typeof data !== "string") return;
32814
+ const msg = parseRecordedServerMessage(data);
32815
+ if (!msg) return;
32816
+ if (msg.kind === "position") setPositionMs(msg.epochMs);
32817
+ else {
32818
+ setMode(msg.state);
32819
+ if (msg.state === "live") setPositionMs(null);
32820
+ }
32821
+ };
32822
+ if (channel.readyState === "open") setChannelOpen(true);
32823
+ else if (channel.readyState === "closed" || channel.readyState === "closing") markClosed();
32824
+ else setChannelOpen(false);
32825
+ }, []);
32826
+ const send = useCallback((cmd) => {
32827
+ const channel = channelRef.current;
32828
+ if (!channel || channel.readyState !== "open") return false;
32829
+ channel.send(serializeRecordedCommand(cmd));
32830
+ return true;
32831
+ }, []);
32832
+ const value = useMemo(() => ({
32833
+ bindControlChannel,
32834
+ channelOpen,
32835
+ mode,
32836
+ positionMs,
32837
+ send
32838
+ }), [
32839
+ bindControlChannel,
32840
+ channelOpen,
32841
+ mode,
32842
+ positionMs,
32843
+ send
32844
+ ]);
32845
+ return /* @__PURE__ */ jsx(RecordedPlaybackContext.Provider, {
32846
+ value,
32847
+ children
32848
+ });
32849
+ }
32850
+ /** @returns the recorded-playback control surface (inert outside a provider). */
32851
+ function useRecordedPlayback() {
32852
+ return useContext(RecordedPlaybackContext);
32853
+ }
32854
+ //#endregion
32527
32855
  //#region src/composites/cap-settings/recording-spans.ts
32528
32856
  /**
32529
32857
  * Merge availability ranges (across every profile) into the union of distinct
@@ -32769,8 +33097,12 @@ function axisTicks(fromMs, toMs, count) {
32769
33097
  }
32770
33098
  //#endregion
32771
33099
  //#region src/composites/cap-settings/CoverageTrack.tsx
32772
- function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek }) {
33100
+ function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek, onScrubStart, onScrubMove, onScrubEnd }) {
32773
33101
  const [hoverInfo, setHoverInfo] = useState(null);
33102
+ const scrubEnabled = Boolean(onScrubEnd);
33103
+ const [dragging, setDragging] = useState(false);
33104
+ /** Last epoch reported during the drag — commit target on cancel/release. */
33105
+ const lastDragMsRef = useRef(null);
32774
33106
  const msFromEvent = (e) => {
32775
33107
  const rect = e.currentTarget.getBoundingClientRect();
32776
33108
  if (rect.width <= 0) return null;
@@ -32778,10 +33110,43 @@ function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek }) {
32778
33110
  return windowFrom + Math.min(1, Math.max(0, ratio)) * (windowTo - windowFrom);
32779
33111
  };
32780
33112
  const handleClick = (e) => {
33113
+ if (scrubEnabled) return;
32781
33114
  const ms = msFromEvent(e);
32782
33115
  if (ms === null) return;
32783
33116
  onSeek(ms);
32784
33117
  };
33118
+ const handlePointerDown = (e) => {
33119
+ if (!scrubEnabled) return;
33120
+ e.currentTarget.setPointerCapture(e.pointerId);
33121
+ setDragging(true);
33122
+ onScrubStart?.();
33123
+ const ms = msFromEvent(e);
33124
+ if (ms !== null) {
33125
+ lastDragMsRef.current = ms;
33126
+ onScrubMove?.(ms);
33127
+ }
33128
+ };
33129
+ const handlePointerMove = (e) => {
33130
+ if (!scrubEnabled || !dragging) return;
33131
+ const ms = msFromEvent(e);
33132
+ if (ms === null) return;
33133
+ lastDragMsRef.current = ms;
33134
+ onScrubMove?.(ms);
33135
+ };
33136
+ const handlePointerUp = (e) => {
33137
+ if (!scrubEnabled || !dragging) return;
33138
+ setDragging(false);
33139
+ const ms = msFromEvent(e) ?? lastDragMsRef.current;
33140
+ lastDragMsRef.current = null;
33141
+ if (ms !== null) onScrubEnd?.(ms);
33142
+ };
33143
+ const handlePointerCancel = () => {
33144
+ if (!dragging) return;
33145
+ setDragging(false);
33146
+ const ms = lastDragMsRef.current;
33147
+ lastDragMsRef.current = null;
33148
+ if (ms !== null) onScrubEnd?.(ms);
33149
+ };
32785
33150
  const handleMouseMove = (e) => {
32786
33151
  const ms = msFromEvent(e);
32787
33152
  if (ms === null) return;
@@ -32805,10 +33170,15 @@ function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek }) {
32805
33170
  className: "relative",
32806
33171
  children: [/* @__PURE__ */ jsxs("div", {
32807
33172
  "data-testid": "coverage-track",
33173
+ "data-scrubbing": dragging ? "true" : "false",
32808
33174
  onClick: handleClick,
33175
+ onPointerDown: handlePointerDown,
33176
+ onPointerMove: handlePointerMove,
33177
+ onPointerUp: handlePointerUp,
33178
+ onPointerCancel: handlePointerCancel,
32809
33179
  onMouseMove: handleMouseMove,
32810
33180
  onMouseLeave: handleMouseLeave,
32811
- className: "relative h-5 cursor-pointer overflow-hidden rounded bg-background/40",
33181
+ className: `relative h-5 overflow-hidden rounded bg-background/40 ${scrubEnabled ? "cursor-ew-resize touch-none select-none" : "cursor-pointer"}`,
32812
33182
  role: "group",
32813
33183
  "aria-label": "Recorded coverage timeline",
32814
33184
  children: [spans.map((s) => {
@@ -33107,6 +33477,15 @@ var PAN_MS_PER_PX = 18e3 / 100;
33107
33477
  var EVENT_PRE_MS = 5e3;
33108
33478
  var EVENT_POST_MS = 1e4;
33109
33479
  var EMPTY_RANGES = [];
33480
+ var MODE_LABELS = {
33481
+ live: "Live",
33482
+ loading: "Loading…",
33483
+ playing: "Playing",
33484
+ paused: "Paused",
33485
+ gap: "No footage",
33486
+ ended: "Ended",
33487
+ error: "Error"
33488
+ };
33110
33489
  function RecordingTimeline({ deviceId }) {
33111
33490
  const system = useSystem();
33112
33491
  const vod = useVodPlayback();
@@ -33114,6 +33493,51 @@ function RecordingTimeline({ deviceId }) {
33114
33493
  const [playheadMs, setPlayheadMs] = useState(null);
33115
33494
  const [busyKey, setBusyKey] = useState(null);
33116
33495
  const [playbackError, setPlaybackError] = useState(null);
33496
+ const recorded = useRecordedPlayback();
33497
+ const { send: sendControl, mode: recordedMode, positionMs: recordedPositionMs } = recorded;
33498
+ const [forceHls, setForceHls] = useState(false);
33499
+ const framePush = recorded.channelOpen && !forceHls;
33500
+ const framePushRef = useRef(framePush);
33501
+ framePushRef.current = framePush;
33502
+ const sink = useMemo(() => ({
33503
+ scrubStart: () => {},
33504
+ scrubTo: () => {},
33505
+ scrubCommit: (epochMs) => {
33506
+ sendControl({
33507
+ t: "scrubCommit",
33508
+ epoch: epochMs
33509
+ });
33510
+ },
33511
+ seek: (epochMs) => {
33512
+ sendControl({
33513
+ t: "seek",
33514
+ epoch: epochMs
33515
+ });
33516
+ }
33517
+ }), [sendControl]);
33518
+ const recordedModeRef = useRef(recordedMode);
33519
+ recordedModeRef.current = recordedMode;
33520
+ const { state: scrubState, beginScrub, updateScrub, endScrub, seek: scrubSeek, setPlayhead, reset: resetScrub } = useScrubController(sink, useCallback(() => recordedModeRef.current === "live", []));
33521
+ useEffect(() => {
33522
+ if (recordedPositionMs !== null) setPlayhead(recordedPositionMs);
33523
+ }, [recordedPositionMs, setPlayhead]);
33524
+ useEffect(() => {
33525
+ if (!recorded.channelOpen || recordedMode === "live") resetScrub();
33526
+ }, [
33527
+ recorded.channelOpen,
33528
+ recordedMode,
33529
+ resetScrub
33530
+ ]);
33531
+ const handleGoLive = useCallback(() => {
33532
+ sendControl({ t: "goLive" });
33533
+ resetScrub();
33534
+ }, [sendControl, resetScrub]);
33535
+ const handleRateToggle = useCallback(() => {
33536
+ sendControl({
33537
+ t: "setRate",
33538
+ rate: recordedModeRef.current === "paused" ? 1 : 0
33539
+ });
33540
+ }, [sendControl]);
33117
33541
  const [enabledKinds, setEnabledKinds] = useState(() => new Set(ALL_KINDS));
33118
33542
  const toggleKind = useCallback((kind) => {
33119
33543
  setEnabledKinds((current) => {
@@ -33267,6 +33691,10 @@ function RecordingTimeline({ deviceId }) {
33267
33691
  const handleSeek = useCallback((clickMs) => {
33268
33692
  const target = seekTargetForSpans(clickMs, spans);
33269
33693
  if (!target) return;
33694
+ if (framePushRef.current) {
33695
+ scrubSeek(target.fromMs, "timeline");
33696
+ return;
33697
+ }
33270
33698
  const label = `Recording · ${new Date(target.fromMs).toLocaleString(void 0, {
33271
33699
  month: "short",
33272
33700
  day: "numeric",
@@ -33274,14 +33702,31 @@ function RecordingTimeline({ deviceId }) {
33274
33702
  minute: "2-digit"
33275
33703
  })}`;
33276
33704
  playWindow(`seek:${target.fromMs}`, target.fromMs, target.toMs, label, target.fromMs);
33277
- }, [spans, playWindow]);
33705
+ }, [
33706
+ spans,
33707
+ playWindow,
33708
+ scrubSeek
33709
+ ]);
33710
+ const handleScrubStart = useCallback(() => {
33711
+ beginScrub("timeline");
33712
+ }, [beginScrub]);
33713
+ const handleScrubMove = useCallback((ms) => {
33714
+ updateScrub(ms, "timeline");
33715
+ }, [updateScrub]);
33716
+ const handleScrubEnd = useCallback((ms) => {
33717
+ endScrub(seekTargetForSpans(ms, spans)?.fromMs ?? ms, "timeline");
33718
+ }, [spans, endScrub]);
33278
33719
  const handlePlayClip = useCallback((clip) => {
33720
+ if (framePushRef.current) {
33721
+ scrubSeek(clip.timestamp - EVENT_PRE_MS, "timeline");
33722
+ return;
33723
+ }
33279
33724
  const label = `${clip.label} · ${new Date(clip.timestamp).toLocaleTimeString(void 0, {
33280
33725
  hour: "2-digit",
33281
33726
  minute: "2-digit"
33282
33727
  })}`;
33283
33728
  playWindow(`event:${clip.id}`, clip.timestamp - EVENT_PRE_MS, clip.timestamp + EVENT_POST_MS, label, clip.timestamp);
33284
- }, [playWindow]);
33729
+ }, [playWindow, scrubSeek]);
33285
33730
  const handleSelectBucket = useCallback((index) => {
33286
33731
  setSelectedBucket((cur) => cur === index ? null : index);
33287
33732
  }, []);
@@ -33289,6 +33734,8 @@ function RecordingTimeline({ deviceId }) {
33289
33734
  const densityLoading = eventDensityQuery.isLoading;
33290
33735
  const drillLoading = (objectDrill.isLoading || motionDrill.isLoading || audioDrill.isLoading) && drillEnabled;
33291
33736
  const ticks = useMemo(() => axisTicks(view.fromMs, view.toMs, 5), [view.fromMs, view.toMs]);
33737
+ const displayPlayheadMs = framePush ? scrubState.scrubbing ? scrubState.scrubEpoch : scrubState.playheadEpoch : playheadMs;
33738
+ const showRateToggle = framePush && (recordedMode === "playing" || recordedMode === "paused");
33292
33739
  return /* @__PURE__ */ jsxs("div", {
33293
33740
  className: "space-y-3",
33294
33741
  children: [
@@ -33307,6 +33754,45 @@ function RecordingTimeline({ deviceId }) {
33307
33754
  dayBounds: computedDayBounds,
33308
33755
  onViewChange: handleViewChange
33309
33756
  }),
33757
+ recorded.channelOpen ? /* @__PURE__ */ jsxs("div", {
33758
+ "data-testid": "frame-push-status-row",
33759
+ className: "flex flex-wrap items-center gap-2 text-[10px]",
33760
+ children: [
33761
+ /* @__PURE__ */ jsx("span", {
33762
+ "data-testid": "frame-push-mode-chip",
33763
+ className: `inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-semibold uppercase tracking-wider ${framePush && recordedMode !== "live" ? recordedMode === "error" ? "bg-rose-500/15 text-rose-400" : "bg-primary/15 text-primary" : "bg-background/40 text-foreground-subtle"}`,
33764
+ children: framePush ? MODE_LABELS[recordedMode] : "HLS mode"
33765
+ }),
33766
+ framePush && recordedPositionMs !== null && !scrubState.scrubbing ? /* @__PURE__ */ jsx("span", {
33767
+ className: "tabular-nums text-foreground-subtle",
33768
+ children: new Date(recordedPositionMs).toLocaleTimeString()
33769
+ }) : null,
33770
+ showRateToggle ? /* @__PURE__ */ jsxs("button", {
33771
+ type: "button",
33772
+ "data-testid": "frame-push-rate-toggle",
33773
+ onClick: handleRateToggle,
33774
+ className: "inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-medium text-foreground-subtle transition-colors hover:bg-surface-hover hover:text-foreground",
33775
+ title: recordedMode === "paused" ? "Resume playback" : "Pause playback",
33776
+ children: [recordedMode === "paused" ? /* @__PURE__ */ jsx(Play, { className: "h-3 w-3" }) : /* @__PURE__ */ jsx(Pause, { className: "h-3 w-3" }), recordedMode === "paused" ? "Resume" : "Pause"]
33777
+ }) : null,
33778
+ framePush && recordedMode !== "live" ? /* @__PURE__ */ jsxs("button", {
33779
+ type: "button",
33780
+ "data-testid": "frame-push-go-live",
33781
+ onClick: handleGoLive,
33782
+ className: "inline-flex items-center gap-1 rounded bg-danger/10 px-1.5 py-0.5 font-medium text-danger transition-colors hover:bg-danger/20",
33783
+ title: "Return to the live stream",
33784
+ children: [/* @__PURE__ */ jsx(Radio, { className: "h-3 w-3" }), "Go live"]
33785
+ }) : null,
33786
+ /* @__PURE__ */ jsx("button", {
33787
+ type: "button",
33788
+ "data-testid": "frame-push-hls-toggle",
33789
+ onClick: () => setForceHls((v) => !v),
33790
+ className: `ml-auto inline-flex items-center gap-1 rounded px-1.5 py-0.5 font-medium transition-colors ${forceHls ? "bg-primary/15 text-primary" : "text-foreground-subtle hover:bg-surface-hover hover:text-foreground"}`,
33791
+ title: "Play recordings through the HLS player instead of the live WebRTC session",
33792
+ children: "HLS"
33793
+ })
33794
+ ]
33795
+ }) : null,
33310
33796
  /* @__PURE__ */ jsxs("div", {
33311
33797
  ref: trackAreaRef,
33312
33798
  onWheel: handleWheel,
@@ -33324,8 +33810,13 @@ function RecordingTimeline({ deviceId }) {
33324
33810
  windowFrom: view.fromMs,
33325
33811
  windowTo: view.toMs,
33326
33812
  spans,
33327
- playheadMs,
33328
- onSeek: handleSeek
33813
+ playheadMs: displayPlayheadMs,
33814
+ onSeek: handleSeek,
33815
+ ...framePush ? {
33816
+ onScrubStart: handleScrubStart,
33817
+ onScrubMove: handleScrubMove,
33818
+ onScrubEnd: handleScrubEnd
33819
+ } : {}
33329
33820
  })]
33330
33821
  }),
33331
33822
  /* @__PURE__ */ jsxs("div", {
@@ -33362,7 +33853,7 @@ function RecordingTimeline({ deviceId }) {
33362
33853
  onLoadMore: handleLoadMore
33363
33854
  }) : /* @__PURE__ */ jsx("p", {
33364
33855
  className: "text-[11px] text-foreground-subtle",
33365
- children: "Click the coverage bar to play from any point, or a density bar to browse that window's events."
33856
+ children: framePush ? "Click or drag the coverage bar to play from any point (frames play in the main player above), or click a density bar to browse that windows events." : "Click the coverage bar to play from any point, or a density bar to browse that window’s events."
33366
33857
  })
33367
33858
  ]
33368
33859
  });
@@ -38650,6 +39141,7 @@ function ImageOffIcon({ className }) {
38650
39141
  }
38651
39142
  function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, playbackUrl, playbackAuthToken, onExitPlayback, posterUrl, streams, activeStreamId: controlledStreamId, onStreamChange, deviceName, phase, pipelineMetrics, detections, defaultShowDetections = true, defaultShowMotion = false, streamStats, autoPlay = false, showPlayStop = false, snapshotSrc, snapshotLoading = false, onRefreshSnapshot, showStreamStats = false, children, extraOverlay, ptzAvailable = false, ptzShown = false, ptzOverlay, onPtzToggle, intercomAvailable = false, intercomShown = false, onIntercomToggle, chromeless = false, className }) {
38652
39143
  const registeredButtons = usePlayerToolbarButtons();
39144
+ const recordedPlayback = useRecordedPlayback();
38653
39145
  const [isPlaying, setIsPlaying] = useState(autoPlay);
38654
39146
  const [showDetections, setShowDetections] = useState(defaultShowDetections);
38655
39147
  const [showMotion, setShowMotion] = useState(defaultShowMotion);
@@ -38955,6 +39447,7 @@ function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIce
38955
39447
  addIceCandidate,
38956
39448
  getIceCandidates,
38957
39449
  closeSession,
39450
+ ...recordedPlayback.bindControlChannel ? { onControlChannel: recordedPlayback.bindControlChannel } : {},
38958
39451
  ...posterUrl ? { posterUrl } : {},
38959
39452
  overlay: anyOverlay || extraOverlay || ptzOverlayVisible ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
38960
39453
  anyOverlay && /* @__PURE__ */ jsx(DetectionOverlay, {
@@ -43569,4 +44062,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
43569
44062
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
43570
44063
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
43571
44064
  //#endregion
43572
- 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, 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, 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, RIGHT, ROLE_DESCRIPTOR, RadialGauge, 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, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolvePrimaryChild, sortRows, statusIcons, 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, 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, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, 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, 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, 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, useRecordingApplyDeviceSettingsPatch, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, 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 };
44065
+ 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, 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, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, 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, resolvePrimaryChild, scrubReducer, serializeRecordedCommand, shouldCommit, shouldEmit, sortRows, statusIcons, 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, 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, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, 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, 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, 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 };