@camstack/ui-library 1.1.15 → 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
@@ -17741,10 +17975,22 @@ var useNodesGetNodeAddons = trpc.nodes.getNodeAddons.useQuery;
17741
17975
  var useNodesSetProcessLogLevel = trpc.nodes.setProcessLogLevel.useMutation;
17742
17976
  /** Generated alias around `trpc.nodes.executeQuery.useMutation`. */
17743
17977
  var useNodesExecuteQuery = trpc.nodes.executeQuery.useMutation;
17978
+ /** Generated alias around `trpc.notificationOutput.listTargetKinds.useQuery`. */
17979
+ var useNotificationOutputListTargetKinds = trpc.notificationOutput.listTargetKinds.useQuery;
17980
+ /** Generated alias around `trpc.notificationOutput.listTargets.useQuery`. */
17981
+ var useNotificationOutputListTargets = trpc.notificationOutput.listTargets.useQuery;
17982
+ /** Generated alias around `trpc.notificationOutput.discoverTargets.useQuery`. */
17983
+ var useNotificationOutputDiscoverTargets = trpc.notificationOutput.discoverTargets.useQuery;
17744
17984
  /** Generated alias around `trpc.notificationOutput.send.useMutation`. */
17745
17985
  var useNotificationOutputSend = trpc.notificationOutput.send.useMutation;
17746
- /** Generated alias around `trpc.notificationOutput.sendTest.useMutation`. */
17747
- var useNotificationOutputSendTest = trpc.notificationOutput.sendTest.useMutation;
17986
+ /** Generated alias around `trpc.notificationOutput.testTarget.useMutation`. */
17987
+ var useNotificationOutputTestTarget = trpc.notificationOutput.testTarget.useMutation;
17988
+ /** Generated alias around `trpc.notificationOutput.upsertTarget.useMutation`. */
17989
+ var useNotificationOutputUpsertTarget = trpc.notificationOutput.upsertTarget.useMutation;
17990
+ /** Generated alias around `trpc.notificationOutput.deleteTarget.useMutation`. */
17991
+ var useNotificationOutputDeleteTarget = trpc.notificationOutput.deleteTarget.useMutation;
17992
+ /** Generated alias around `trpc.notificationOutput.setTargetEnabled.useMutation`. */
17993
+ var useNotificationOutputSetTargetEnabled = trpc.notificationOutput.setTargetEnabled.useMutation;
17748
17994
  /** Generated alias around `trpc.notifier.send.useMutation`. */
17749
17995
  var useNotifierSend = trpc.notifier.send.useMutation;
17750
17996
  /** Generated alias around `trpc.notifier.cancel.useMutation`. */
@@ -32512,6 +32758,100 @@ function useVodPlayback() {
32512
32758
  return useContext(VodPlaybackContext);
32513
32759
  }
32514
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
32515
32855
  //#region src/composites/cap-settings/recording-spans.ts
32516
32856
  /**
32517
32857
  * Merge availability ranges (across every profile) into the union of distinct
@@ -32757,8 +33097,12 @@ function axisTicks(fromMs, toMs, count) {
32757
33097
  }
32758
33098
  //#endregion
32759
33099
  //#region src/composites/cap-settings/CoverageTrack.tsx
32760
- function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek }) {
33100
+ function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek, onScrubStart, onScrubMove, onScrubEnd }) {
32761
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);
32762
33106
  const msFromEvent = (e) => {
32763
33107
  const rect = e.currentTarget.getBoundingClientRect();
32764
33108
  if (rect.width <= 0) return null;
@@ -32766,10 +33110,43 @@ function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek }) {
32766
33110
  return windowFrom + Math.min(1, Math.max(0, ratio)) * (windowTo - windowFrom);
32767
33111
  };
32768
33112
  const handleClick = (e) => {
33113
+ if (scrubEnabled) return;
32769
33114
  const ms = msFromEvent(e);
32770
33115
  if (ms === null) return;
32771
33116
  onSeek(ms);
32772
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
+ };
32773
33150
  const handleMouseMove = (e) => {
32774
33151
  const ms = msFromEvent(e);
32775
33152
  if (ms === null) return;
@@ -32793,10 +33170,15 @@ function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek }) {
32793
33170
  className: "relative",
32794
33171
  children: [/* @__PURE__ */ jsxs("div", {
32795
33172
  "data-testid": "coverage-track",
33173
+ "data-scrubbing": dragging ? "true" : "false",
32796
33174
  onClick: handleClick,
33175
+ onPointerDown: handlePointerDown,
33176
+ onPointerMove: handlePointerMove,
33177
+ onPointerUp: handlePointerUp,
33178
+ onPointerCancel: handlePointerCancel,
32797
33179
  onMouseMove: handleMouseMove,
32798
33180
  onMouseLeave: handleMouseLeave,
32799
- 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"}`,
32800
33182
  role: "group",
32801
33183
  "aria-label": "Recorded coverage timeline",
32802
33184
  children: [spans.map((s) => {
@@ -33095,6 +33477,15 @@ var PAN_MS_PER_PX = 18e3 / 100;
33095
33477
  var EVENT_PRE_MS = 5e3;
33096
33478
  var EVENT_POST_MS = 1e4;
33097
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
+ };
33098
33489
  function RecordingTimeline({ deviceId }) {
33099
33490
  const system = useSystem();
33100
33491
  const vod = useVodPlayback();
@@ -33102,6 +33493,51 @@ function RecordingTimeline({ deviceId }) {
33102
33493
  const [playheadMs, setPlayheadMs] = useState(null);
33103
33494
  const [busyKey, setBusyKey] = useState(null);
33104
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]);
33105
33541
  const [enabledKinds, setEnabledKinds] = useState(() => new Set(ALL_KINDS));
33106
33542
  const toggleKind = useCallback((kind) => {
33107
33543
  setEnabledKinds((current) => {
@@ -33255,6 +33691,10 @@ function RecordingTimeline({ deviceId }) {
33255
33691
  const handleSeek = useCallback((clickMs) => {
33256
33692
  const target = seekTargetForSpans(clickMs, spans);
33257
33693
  if (!target) return;
33694
+ if (framePushRef.current) {
33695
+ scrubSeek(target.fromMs, "timeline");
33696
+ return;
33697
+ }
33258
33698
  const label = `Recording · ${new Date(target.fromMs).toLocaleString(void 0, {
33259
33699
  month: "short",
33260
33700
  day: "numeric",
@@ -33262,14 +33702,31 @@ function RecordingTimeline({ deviceId }) {
33262
33702
  minute: "2-digit"
33263
33703
  })}`;
33264
33704
  playWindow(`seek:${target.fromMs}`, target.fromMs, target.toMs, label, target.fromMs);
33265
- }, [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]);
33266
33719
  const handlePlayClip = useCallback((clip) => {
33720
+ if (framePushRef.current) {
33721
+ scrubSeek(clip.timestamp - EVENT_PRE_MS, "timeline");
33722
+ return;
33723
+ }
33267
33724
  const label = `${clip.label} · ${new Date(clip.timestamp).toLocaleTimeString(void 0, {
33268
33725
  hour: "2-digit",
33269
33726
  minute: "2-digit"
33270
33727
  })}`;
33271
33728
  playWindow(`event:${clip.id}`, clip.timestamp - EVENT_PRE_MS, clip.timestamp + EVENT_POST_MS, label, clip.timestamp);
33272
- }, [playWindow]);
33729
+ }, [playWindow, scrubSeek]);
33273
33730
  const handleSelectBucket = useCallback((index) => {
33274
33731
  setSelectedBucket((cur) => cur === index ? null : index);
33275
33732
  }, []);
@@ -33277,6 +33734,8 @@ function RecordingTimeline({ deviceId }) {
33277
33734
  const densityLoading = eventDensityQuery.isLoading;
33278
33735
  const drillLoading = (objectDrill.isLoading || motionDrill.isLoading || audioDrill.isLoading) && drillEnabled;
33279
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");
33280
33739
  return /* @__PURE__ */ jsxs("div", {
33281
33740
  className: "space-y-3",
33282
33741
  children: [
@@ -33295,6 +33754,45 @@ function RecordingTimeline({ deviceId }) {
33295
33754
  dayBounds: computedDayBounds,
33296
33755
  onViewChange: handleViewChange
33297
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,
33298
33796
  /* @__PURE__ */ jsxs("div", {
33299
33797
  ref: trackAreaRef,
33300
33798
  onWheel: handleWheel,
@@ -33312,8 +33810,13 @@ function RecordingTimeline({ deviceId }) {
33312
33810
  windowFrom: view.fromMs,
33313
33811
  windowTo: view.toMs,
33314
33812
  spans,
33315
- playheadMs,
33316
- onSeek: handleSeek
33813
+ playheadMs: displayPlayheadMs,
33814
+ onSeek: handleSeek,
33815
+ ...framePush ? {
33816
+ onScrubStart: handleScrubStart,
33817
+ onScrubMove: handleScrubMove,
33818
+ onScrubEnd: handleScrubEnd
33819
+ } : {}
33317
33820
  })]
33318
33821
  }),
33319
33822
  /* @__PURE__ */ jsxs("div", {
@@ -33350,7 +33853,7 @@ function RecordingTimeline({ deviceId }) {
33350
33853
  onLoadMore: handleLoadMore
33351
33854
  }) : /* @__PURE__ */ jsx("p", {
33352
33855
  className: "text-[11px] text-foreground-subtle",
33353
- 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."
33354
33857
  })
33355
33858
  ]
33356
33859
  });
@@ -38638,6 +39141,7 @@ function ImageOffIcon({ className }) {
38638
39141
  }
38639
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 }) {
38640
39143
  const registeredButtons = usePlayerToolbarButtons();
39144
+ const recordedPlayback = useRecordedPlayback();
38641
39145
  const [isPlaying, setIsPlaying] = useState(autoPlay);
38642
39146
  const [showDetections, setShowDetections] = useState(defaultShowDetections);
38643
39147
  const [showMotion, setShowMotion] = useState(defaultShowMotion);
@@ -38943,6 +39447,7 @@ function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIce
38943
39447
  addIceCandidate,
38944
39448
  getIceCandidates,
38945
39449
  closeSession,
39450
+ ...recordedPlayback.bindControlChannel ? { onControlChannel: recordedPlayback.bindControlChannel } : {},
38946
39451
  ...posterUrl ? { posterUrl } : {},
38947
39452
  overlay: anyOverlay || extraOverlay || ptzOverlayVisible ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
38948
39453
  anyOverlay && /* @__PURE__ */ jsx(DetectionOverlay, {
@@ -43557,4 +44062,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
43557
44062
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
43558
44063
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
43559
44064
  //#endregion
43560
- 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, useNotificationOutputSend, useNotificationOutputSendTest, 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 };