@camstack/ui-library 1.2.189 → 1.2.190
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/composites/clips/ClipPanel.d.ts +8 -0
- package/dist/composites/clips/ClipSilentSources.d.ts +4 -0
- package/dist/composites/clips/ClipSourceRow.d.ts +9 -0
- package/dist/composites/clips/ClipTile.d.ts +7 -0
- package/dist/composites/clips/ClipsBrowser.d.ts +4 -0
- package/dist/composites/clips/clip-day-window.d.ts +37 -0
- package/dist/composites/clips/clip-source-state.d.ts +34 -0
- package/dist/composites/clips/clip-thumbnail-fetch.d.ts +16 -0
- package/dist/composites/clips/clip-tile-media.d.ts +27 -0
- package/dist/composites/clips/clip-view-state.d.ts +34 -0
- package/dist/composites/hls-video.d.ts +17 -2
- package/dist/composites/stream-panel.d.ts +8 -1
- package/dist/contexts/vod-playback.d.ts +13 -1
- package/dist/generated/system-hooks.d.ts +2 -0
- package/dist/hooks/use-capability-presence.d.ts +32 -0
- package/dist/index.cjs +796 -43
- package/dist/index.d.ts +1 -0
- package/dist/index.js +794 -44
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -7159,6 +7159,8 @@ var useValveGetStatus = trpc.valve.getStatus.useQuery;
|
|
|
7159
7159
|
var useVibrationGetStatus = trpc.vibration.getStatus.useQuery;
|
|
7160
7160
|
/** Generated alias around `trpc.videoclips.listClips.useQuery`. */
|
|
7161
7161
|
var useVideoclipsListClips = trpc.videoclips.listClips.useQuery;
|
|
7162
|
+
/** Generated alias around `trpc.videoclips.listSources.useQuery`. */
|
|
7163
|
+
var useVideoclipsListSources = trpc.videoclips.listSources.useQuery;
|
|
7162
7164
|
/** Generated alias around `trpc.videoclips.getClipPlayback.useQuery`. */
|
|
7163
7165
|
var useVideoclipsGetClipPlayback = trpc.videoclips.getClipPlayback.useQuery;
|
|
7164
7166
|
/** Generated alias around `trpc.waterHeater.setTargetTemp.useMutation`. */
|
|
@@ -17549,6 +17551,774 @@ function ConsumablesPanel({ deviceId }) {
|
|
|
17549
17551
|
});
|
|
17550
17552
|
}
|
|
17551
17553
|
//#endregion
|
|
17554
|
+
//#region src/hooks/use-capability-presence.ts
|
|
17555
|
+
/**
|
|
17556
|
+
* Classify a settled registry answer.
|
|
17557
|
+
*
|
|
17558
|
+
* `null` is "no such capability". A row with an empty `providers` list is a
|
|
17559
|
+
* capability that is DECLARED but that no addon supplies — indistinguishable
|
|
17560
|
+
* to an operator from not having it, and the panel behind it would have
|
|
17561
|
+
* nothing to call. Both are `absent`.
|
|
17562
|
+
*
|
|
17563
|
+
* Exported for the unit test: the mapping is the whole decision, and it is
|
|
17564
|
+
* worth pinning without a React tree around it.
|
|
17565
|
+
*/
|
|
17566
|
+
function classifyCapability(row) {
|
|
17567
|
+
if (row === null) return "absent";
|
|
17568
|
+
return row.providers.length > 0 ? "present" : "absent";
|
|
17569
|
+
}
|
|
17570
|
+
/**
|
|
17571
|
+
* Ask the hub's capability registry whether `capabilityName` has a provider.
|
|
17572
|
+
*
|
|
17573
|
+
* The four states map straight off React Query's `status`, so there is no
|
|
17574
|
+
* place for a nullish fallback to turn "no answer" into "no providers" — the
|
|
17575
|
+
* exact collapse this hook exists to make unrepresentable.
|
|
17576
|
+
*/
|
|
17577
|
+
function useCapabilityPresence(capabilityName) {
|
|
17578
|
+
const query = trpc.capabilities.getCapability.useQuery({ name: capabilityName });
|
|
17579
|
+
if (query.status === "pending") return "pending";
|
|
17580
|
+
if (query.status === "error") return "unknown";
|
|
17581
|
+
return classifyCapability(query.data);
|
|
17582
|
+
}
|
|
17583
|
+
//#endregion
|
|
17584
|
+
//#region src/contexts/vod-playback.tsx
|
|
17585
|
+
/**
|
|
17586
|
+
* VodPlayback — shared context coordinating recorded (VOD) playback between a
|
|
17587
|
+
* widget/section (the Recording panel) and the hero StreamPanel.
|
|
17588
|
+
*
|
|
17589
|
+
* A CONTROLLER (the Recording widget) calls `play({ url, label })`; the hero
|
|
17590
|
+
* StreamPanel CONSUMES `request` and switches into VOD mode (HLS playback
|
|
17591
|
+
* through the hub data-plane) instead of the live WebRTC stream. `clear()`
|
|
17592
|
+
* returns the hero to live.
|
|
17593
|
+
*
|
|
17594
|
+
* Built on `createSharedContext` (NOT a plain `createContext`) so it crosses
|
|
17595
|
+
* the Module-Federation boundary: an addon-shipped widget consuming
|
|
17596
|
+
* `useVodPlayback()` resolves the SAME provider instance the host mounted —
|
|
17597
|
+
* the same mechanism `player-overlays` / `zone-editing` use to let federated
|
|
17598
|
+
* widgets (zone-editor, privacy-mask) drive the live player. Consumers used
|
|
17599
|
+
* outside a provider get the inert default (no-op), so a StreamPanel mounted
|
|
17600
|
+
* on a page without the Recording widget stays live-only without crashing.
|
|
17601
|
+
*/
|
|
17602
|
+
var VodPlaybackContext = createSharedContext("camstack:vod-playback", {
|
|
17603
|
+
request: null,
|
|
17604
|
+
play: () => {},
|
|
17605
|
+
clear: () => {}
|
|
17606
|
+
});
|
|
17607
|
+
function VodPlaybackProvider({ children }) {
|
|
17608
|
+
const [request, setRequest] = useState(null);
|
|
17609
|
+
const value = useMemo(() => ({
|
|
17610
|
+
request,
|
|
17611
|
+
play: (req) => setRequest(req),
|
|
17612
|
+
clear: () => setRequest(null)
|
|
17613
|
+
}), [request]);
|
|
17614
|
+
return /* @__PURE__ */ jsx(VodPlaybackContext.Provider, {
|
|
17615
|
+
value,
|
|
17616
|
+
children
|
|
17617
|
+
});
|
|
17618
|
+
}
|
|
17619
|
+
/** @returns the VOD playback controller (inert no-op outside a provider). */
|
|
17620
|
+
function useVodPlayback() {
|
|
17621
|
+
return useContext(VodPlaybackContext);
|
|
17622
|
+
}
|
|
17623
|
+
//#endregion
|
|
17624
|
+
//#region src/composites/clips/ClipPanel.tsx
|
|
17625
|
+
/**
|
|
17626
|
+
* The selected clip — what it is, how it plays, and how it is saved.
|
|
17627
|
+
*
|
|
17628
|
+
* **No second player.** `getClipPlayback` answers `{ playbackUrl, format,
|
|
17629
|
+
* served }` and the panel hands it to the SAME hero the recordings timeline
|
|
17630
|
+
* drives: `vod.play({ url, format })` → `StreamPanel playbackUrl/playbackFormat`
|
|
17631
|
+
* → `HlsVideo`'s `mp4` branch (`video.src`, no hls.js). Building a clip player
|
|
17632
|
+
* here is the thing D549 decision 22 exists to refuse.
|
|
17633
|
+
*
|
|
17634
|
+
* **`format` travels.** An MP4 handed to hls.js is parsed as a manifest and
|
|
17635
|
+
* fails, so the format the provider named is forwarded verbatim and never
|
|
17636
|
+
* defaulted here.
|
|
17637
|
+
*
|
|
17638
|
+
* **`served` is shown.** A clip that holds only one twin answers with the one
|
|
17639
|
+
* it has, and the surface SAYS so — a missing main twin must never be served
|
|
17640
|
+
* silently as if it were the asked-for quality (D549 decision 15). Both ids
|
|
17641
|
+
* are already on the row, so changing quality re-asks the hub and never
|
|
17642
|
+
* re-searches the camera.
|
|
17643
|
+
*
|
|
17644
|
+
* **Nothing is appended to the URL.** The route is `access:'authenticated'`
|
|
17645
|
+
* and the session cookie authenticates it (D549 decision 22); the same URL is
|
|
17646
|
+
* the download.
|
|
17647
|
+
*/
|
|
17648
|
+
var PROFILES = [
|
|
17649
|
+
"low",
|
|
17650
|
+
"mid",
|
|
17651
|
+
"high"
|
|
17652
|
+
];
|
|
17653
|
+
function ClipPanel({ deviceId, clip, profile, onProfileChange }) {
|
|
17654
|
+
const vod = useVodPlayback();
|
|
17655
|
+
const playback = useVideoclipsGetClipPlayback({
|
|
17656
|
+
deviceId,
|
|
17657
|
+
clipId: clip.id,
|
|
17658
|
+
profile
|
|
17659
|
+
});
|
|
17660
|
+
const data = playback.data;
|
|
17661
|
+
const label = `${new Date(clip.timeRange.startMs).toLocaleString()} · ${clip.source}`;
|
|
17662
|
+
useEffect(() => {
|
|
17663
|
+
if (data === void 0) return;
|
|
17664
|
+
vod.play({
|
|
17665
|
+
url: hubPath(data.playbackUrl),
|
|
17666
|
+
...data.format === void 0 ? {} : { format: data.format },
|
|
17667
|
+
label
|
|
17668
|
+
});
|
|
17669
|
+
}, [data, label]);
|
|
17670
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
17671
|
+
className: "space-y-2 rounded-md border border-border p-3 text-sm",
|
|
17672
|
+
children: [
|
|
17673
|
+
/* @__PURE__ */ jsx("div", {
|
|
17674
|
+
className: "font-medium",
|
|
17675
|
+
children: label
|
|
17676
|
+
}),
|
|
17677
|
+
/* @__PURE__ */ jsxs("div", {
|
|
17678
|
+
className: "flex items-center gap-2",
|
|
17679
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
17680
|
+
className: "text-xs text-muted-foreground",
|
|
17681
|
+
children: "Quality"
|
|
17682
|
+
}), PROFILES.map((option) => /* @__PURE__ */ jsx("button", {
|
|
17683
|
+
type: "button",
|
|
17684
|
+
"aria-pressed": option === profile,
|
|
17685
|
+
onClick: () => onProfileChange(option),
|
|
17686
|
+
className: `rounded px-2 py-0.5 text-xs ${option === profile ? "bg-primary text-primary-foreground" : "bg-muted"}`,
|
|
17687
|
+
children: option
|
|
17688
|
+
}, option))]
|
|
17689
|
+
}),
|
|
17690
|
+
playback.status === "pending" ? /* @__PURE__ */ jsx("div", {
|
|
17691
|
+
role: "status",
|
|
17692
|
+
children: "Preparing the clip — the file is fetched and muxed once…"
|
|
17693
|
+
}) : playback.status === "error" ? /* @__PURE__ */ jsxs("div", {
|
|
17694
|
+
role: "alert",
|
|
17695
|
+
children: ["This clip could not be prepared: ", playback.error?.message ?? "no reason given"]
|
|
17696
|
+
}) : data === void 0 ? null : /* @__PURE__ */ jsxs("div", {
|
|
17697
|
+
className: "space-y-1",
|
|
17698
|
+
children: [data.served === void 0 || data.served === profile ? null : /* @__PURE__ */ jsxs("div", {
|
|
17699
|
+
className: "text-xs text-amber-600 dark:text-amber-400",
|
|
17700
|
+
children: [
|
|
17701
|
+
"Served the ",
|
|
17702
|
+
/* @__PURE__ */ jsx("strong", { children: data.served }),
|
|
17703
|
+
" stream — this clip has no ",
|
|
17704
|
+
profile,
|
|
17705
|
+
" twin."
|
|
17706
|
+
]
|
|
17707
|
+
}), /* @__PURE__ */ jsx("a", {
|
|
17708
|
+
href: hubPath(data.playbackUrl),
|
|
17709
|
+
download: true,
|
|
17710
|
+
className: "text-xs underline",
|
|
17711
|
+
children: "Download this clip"
|
|
17712
|
+
})]
|
|
17713
|
+
})
|
|
17714
|
+
]
|
|
17715
|
+
});
|
|
17716
|
+
}
|
|
17717
|
+
//#endregion
|
|
17718
|
+
//#region src/composites/clips/ClipSilentSources.tsx
|
|
17719
|
+
function ClipSilentSources({ silent }) {
|
|
17720
|
+
if (silent.length === 0) return null;
|
|
17721
|
+
return /* @__PURE__ */ jsx("ul", {
|
|
17722
|
+
className: "space-y-1 rounded-md border border-amber-500/40 bg-amber-500/5 p-2 text-xs",
|
|
17723
|
+
children: silent.map((notice) => /* @__PURE__ */ jsxs("li", { children: [
|
|
17724
|
+
/* @__PURE__ */ jsx("span", {
|
|
17725
|
+
className: "font-medium",
|
|
17726
|
+
children: notice.label
|
|
17727
|
+
}),
|
|
17728
|
+
/* @__PURE__ */ jsxs("span", {
|
|
17729
|
+
className: "text-muted-foreground",
|
|
17730
|
+
children: [
|
|
17731
|
+
" (",
|
|
17732
|
+
notice.source,
|
|
17733
|
+
")"
|
|
17734
|
+
]
|
|
17735
|
+
}),
|
|
17736
|
+
/* @__PURE__ */ jsx("div", { children: notice.headline }),
|
|
17737
|
+
notice.detail === null ? null : /* @__PURE__ */ jsx("div", {
|
|
17738
|
+
className: "text-muted-foreground break-words",
|
|
17739
|
+
children: notice.detail
|
|
17740
|
+
})
|
|
17741
|
+
] }, notice.source))
|
|
17742
|
+
});
|
|
17743
|
+
}
|
|
17744
|
+
//#endregion
|
|
17745
|
+
//#region src/composites/clips/ClipSourceRow.tsx
|
|
17746
|
+
var TONE_CLASS = {
|
|
17747
|
+
ok: "text-emerald-600 dark:text-emerald-400",
|
|
17748
|
+
warn: "text-amber-600 dark:text-amber-400",
|
|
17749
|
+
error: "text-rose-600 dark:text-rose-400"
|
|
17750
|
+
};
|
|
17751
|
+
function ClipSourceRow({ notice, catalogAge, checked, onToggle }) {
|
|
17752
|
+
return /* @__PURE__ */ jsxs("li", {
|
|
17753
|
+
className: "flex items-start gap-2 py-1.5",
|
|
17754
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
17755
|
+
type: "checkbox",
|
|
17756
|
+
className: "mt-1",
|
|
17757
|
+
checked,
|
|
17758
|
+
"aria-label": `Show ${notice.label}`,
|
|
17759
|
+
onChange: (e) => onToggle(notice.source, e.target.checked)
|
|
17760
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
17761
|
+
className: "min-w-0",
|
|
17762
|
+
children: [
|
|
17763
|
+
/* @__PURE__ */ jsxs("div", {
|
|
17764
|
+
className: "flex flex-wrap items-baseline gap-x-2",
|
|
17765
|
+
children: [
|
|
17766
|
+
/* @__PURE__ */ jsx("span", {
|
|
17767
|
+
className: "font-medium",
|
|
17768
|
+
children: notice.label
|
|
17769
|
+
}),
|
|
17770
|
+
/* @__PURE__ */ jsx("span", {
|
|
17771
|
+
className: "text-xs text-muted-foreground",
|
|
17772
|
+
children: notice.source
|
|
17773
|
+
}),
|
|
17774
|
+
catalogAge === null ? null : /* @__PURE__ */ jsxs("span", {
|
|
17775
|
+
className: "text-xs text-muted-foreground",
|
|
17776
|
+
children: ["read ", catalogAge]
|
|
17777
|
+
})
|
|
17778
|
+
]
|
|
17779
|
+
}),
|
|
17780
|
+
/* @__PURE__ */ jsx("div", {
|
|
17781
|
+
className: `text-xs ${TONE_CLASS[notice.tone]}`,
|
|
17782
|
+
children: notice.headline
|
|
17783
|
+
}),
|
|
17784
|
+
notice.detail === null ? null : /* @__PURE__ */ jsx("div", {
|
|
17785
|
+
className: "text-xs text-muted-foreground break-words",
|
|
17786
|
+
children: notice.detail
|
|
17787
|
+
})
|
|
17788
|
+
]
|
|
17789
|
+
})]
|
|
17790
|
+
});
|
|
17791
|
+
}
|
|
17792
|
+
//#endregion
|
|
17793
|
+
//#region src/composites/clips/clip-tile-media.ts
|
|
17794
|
+
/**
|
|
17795
|
+
* Why no still exists, in words. Keyed by the provider's own vocabulary so a
|
|
17796
|
+
* reason this table does not know still reaches the operator verbatim.
|
|
17797
|
+
*/
|
|
17798
|
+
var REFUSAL_TEXT = {
|
|
17799
|
+
sleeping: "The camera is asleep — a still would cost a wake",
|
|
17800
|
+
"camera-refused": "The camera refused the still request",
|
|
17801
|
+
"no-keyframe": "No decodable frame inside this window",
|
|
17802
|
+
unsupported: "This source cannot produce stills",
|
|
17803
|
+
"queue-full": "The camera is busy — its still queue is full",
|
|
17804
|
+
"no-catalog-row": "This clip is no longer in the catalog"
|
|
17805
|
+
};
|
|
17806
|
+
function refusal(reason) {
|
|
17807
|
+
return {
|
|
17808
|
+
kind: "unavailable",
|
|
17809
|
+
reason,
|
|
17810
|
+
text: REFUSAL_TEXT[reason] ?? `Refused: ${reason}`
|
|
17811
|
+
};
|
|
17812
|
+
}
|
|
17813
|
+
/** What to draw for one clip's tile. */
|
|
17814
|
+
function resolveTileMedia(clip) {
|
|
17815
|
+
if (clip.thumbnail !== void 0) return {
|
|
17816
|
+
kind: "vouched",
|
|
17817
|
+
url: clip.thumbnail
|
|
17818
|
+
};
|
|
17819
|
+
if (clip.thumbnailUnavailable !== void 0) return refusal(clip.thumbnailUnavailable.reason);
|
|
17820
|
+
if (clip.thumbnailMint !== void 0) return {
|
|
17821
|
+
kind: "mint",
|
|
17822
|
+
url: clip.thumbnailMint
|
|
17823
|
+
};
|
|
17824
|
+
return {
|
|
17825
|
+
kind: "none",
|
|
17826
|
+
text: "This clip carries no still and offered none"
|
|
17827
|
+
};
|
|
17828
|
+
}
|
|
17829
|
+
/**
|
|
17830
|
+
* A mint that answered 204 — latch its `x-camstack-reason` to this instant.
|
|
17831
|
+
*
|
|
17832
|
+
* The refusal is about NOW (a full queue, a sleeping camera), so it replaces
|
|
17833
|
+
* the offer for as long as the tile is mounted and is not retried behind the
|
|
17834
|
+
* operator's back. An unknown reason is shown raw rather than dropped: a
|
|
17835
|
+
* firmware inventing a refusal must not become a blank tile.
|
|
17836
|
+
*/
|
|
17837
|
+
function latchMintRefusal(reason) {
|
|
17838
|
+
return refusal(reason);
|
|
17839
|
+
}
|
|
17840
|
+
//#endregion
|
|
17841
|
+
//#region src/composites/clips/clip-thumbnail-fetch.ts
|
|
17842
|
+
/**
|
|
17843
|
+
* Asking a `thumbnailMint` route for a still — and hearing its refusal.
|
|
17844
|
+
*
|
|
17845
|
+
* The route answers **200** with a JPEG or **204** with the reason in
|
|
17846
|
+
* `x-camstack-reason` (`queue-full`, `sleeping`, `camera-refused`,
|
|
17847
|
+
* `no-keyframe`, `no-catalog-row`). An `<img src>` cannot read that header:
|
|
17848
|
+
* a 204 fires `onerror` with nothing to say, turning a named refusal into an
|
|
17849
|
+
* anonymous broken tile. So a mint goes through `fetch`.
|
|
17850
|
+
*
|
|
17851
|
+
* **Nothing is appended to the URL.** Both data-plane routes are registered
|
|
17852
|
+
* `access: 'authenticated'` and the hub's `/addon/<id>/<prefix>` proxy takes
|
|
17853
|
+
* the session cookie the admin UI sets at login, so the URL is never a
|
|
17854
|
+
* credential (D549 decision 22) — it may sit in history or a `Referer` and
|
|
17855
|
+
* open nothing.
|
|
17856
|
+
*
|
|
17857
|
+
* The refusal is about NOW and is LATCHED by the caller: a camera that just
|
|
17858
|
+
* said "busy" is not asked again behind the operator's back.
|
|
17859
|
+
*/
|
|
17860
|
+
/**
|
|
17861
|
+
* Ask a mint route for one still.
|
|
17862
|
+
*
|
|
17863
|
+
* Never rejects: a thrown fetch is a refusal like any other, because a tile
|
|
17864
|
+
* that throws is a tile that renders nothing and says nothing — the exact
|
|
17865
|
+
* failure this module exists to prevent.
|
|
17866
|
+
*/
|
|
17867
|
+
async function fetchMintedThumbnail(url, fetcher) {
|
|
17868
|
+
let response;
|
|
17869
|
+
try {
|
|
17870
|
+
response = await fetcher(url, { credentials: "same-origin" });
|
|
17871
|
+
} catch (err) {
|
|
17872
|
+
return latchMintRefusal(err instanceof Error ? err.message : String(err));
|
|
17873
|
+
}
|
|
17874
|
+
if (response.status === 204) return latchMintRefusal(response.headers.get("x-camstack-reason") ?? "no reason given");
|
|
17875
|
+
if (!response.ok) return latchMintRefusal(`HTTP ${String(response.status)}`);
|
|
17876
|
+
try {
|
|
17877
|
+
return {
|
|
17878
|
+
kind: "image",
|
|
17879
|
+
blob: await response.blob()
|
|
17880
|
+
};
|
|
17881
|
+
} catch (err) {
|
|
17882
|
+
return latchMintRefusal(err instanceof Error ? err.message : String(err));
|
|
17883
|
+
}
|
|
17884
|
+
}
|
|
17885
|
+
//#endregion
|
|
17886
|
+
//#region src/composites/clips/ClipTile.tsx
|
|
17887
|
+
/**
|
|
17888
|
+
* One clip, as a tile.
|
|
17889
|
+
*
|
|
17890
|
+
* The picture is resolved by `resolveTileMedia` — vouched JPEG, an offer, or
|
|
17891
|
+
* the reason there is none (D549 decision 5). An offer is fetched rather than
|
|
17892
|
+
* dropped into an `<img src>`, because the route's **204 + x-camstack-reason**
|
|
17893
|
+
* is invisible to an `<img>`: it fires `onerror` with nothing to say. The
|
|
17894
|
+
* refusal is LATCHED for the life of the tile and never retried behind the
|
|
17895
|
+
* operator's back.
|
|
17896
|
+
*
|
|
17897
|
+
* The row also carries what the camera itself said: its native types, the
|
|
17898
|
+
* behaviours beside the class, which storages hold it, and — for a row that
|
|
17899
|
+
* is an EVENT sitting inside no file — `playable: false` with its reason
|
|
17900
|
+
* (measured: 1 of 29 hub events on 3628). Such a row is SHOWN, never dropped
|
|
17901
|
+
* and never offered as playable-then-failing (D549 decision 19).
|
|
17902
|
+
*/
|
|
17903
|
+
function clockOf(ms) {
|
|
17904
|
+
return new Date(ms).toLocaleTimeString(void 0, {
|
|
17905
|
+
hour: "2-digit",
|
|
17906
|
+
minute: "2-digit",
|
|
17907
|
+
second: "2-digit"
|
|
17908
|
+
});
|
|
17909
|
+
}
|
|
17910
|
+
/**
|
|
17911
|
+
* Ask a mint route once, and LATCH whatever it says.
|
|
17912
|
+
*
|
|
17913
|
+
* The offer is memoised on the three fields it is derived from, not rebuilt
|
|
17914
|
+
* per render: `resolveTileMedia` returns a fresh object every call, and an
|
|
17915
|
+
* effect keyed on that object re-runs on every commit — which, because the
|
|
17916
|
+
* effect sets state, is an infinite render loop. It was one here, and it hung
|
|
17917
|
+
* the suite rather than failing it.
|
|
17918
|
+
*
|
|
17919
|
+
* The refusal is latched for the life of the tile: a camera that just said
|
|
17920
|
+
* "busy" is not asked again behind the operator's back (D549 decision 5).
|
|
17921
|
+
*/
|
|
17922
|
+
function useMintedStill(clip) {
|
|
17923
|
+
const offered = useMemo(() => resolveTileMedia(clip), [
|
|
17924
|
+
clip.thumbnail,
|
|
17925
|
+
clip.thumbnailMint,
|
|
17926
|
+
clip.thumbnailUnavailable?.reason
|
|
17927
|
+
]);
|
|
17928
|
+
const [latched, setLatched] = useState(null);
|
|
17929
|
+
const mintUrl = offered.kind === "mint" ? offered.url : null;
|
|
17930
|
+
useEffect(() => {
|
|
17931
|
+
setLatched(null);
|
|
17932
|
+
if (mintUrl === null || typeof fetch !== "function") return void 0;
|
|
17933
|
+
let objectUrl = null;
|
|
17934
|
+
let cancelled = false;
|
|
17935
|
+
(async () => {
|
|
17936
|
+
const answer = await fetchMintedThumbnail(hubPath(mintUrl), fetch);
|
|
17937
|
+
if (cancelled) return;
|
|
17938
|
+
if (answer.kind === "image") {
|
|
17939
|
+
objectUrl = URL.createObjectURL(answer.blob);
|
|
17940
|
+
setLatched({
|
|
17941
|
+
kind: "vouched",
|
|
17942
|
+
url: objectUrl
|
|
17943
|
+
});
|
|
17944
|
+
return;
|
|
17945
|
+
}
|
|
17946
|
+
setLatched(answer);
|
|
17947
|
+
})();
|
|
17948
|
+
return () => {
|
|
17949
|
+
cancelled = true;
|
|
17950
|
+
if (objectUrl !== null) URL.revokeObjectURL(objectUrl);
|
|
17951
|
+
};
|
|
17952
|
+
}, [mintUrl]);
|
|
17953
|
+
return latched ?? offered;
|
|
17954
|
+
}
|
|
17955
|
+
function ClipTile({ clip, selected, onSelect }) {
|
|
17956
|
+
const media = useMintedStill(clip);
|
|
17957
|
+
const playable = clip.playable !== false;
|
|
17958
|
+
const labels = [...clip.labels ?? [], ...clip.behaviours ?? []];
|
|
17959
|
+
return /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsxs("button", {
|
|
17960
|
+
type: "button",
|
|
17961
|
+
onClick: () => onSelect(clip),
|
|
17962
|
+
disabled: !playable,
|
|
17963
|
+
"aria-current": selected ? "true" : void 0,
|
|
17964
|
+
className: `flex w-full gap-3 rounded-md border p-2 text-left ${selected ? "border-primary" : "border-border"} ${playable ? "" : "opacity-70"}`,
|
|
17965
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
17966
|
+
className: "flex h-16 w-28 shrink-0 items-center justify-center overflow-hidden rounded bg-muted text-[10px] text-muted-foreground",
|
|
17967
|
+
children: media.kind === "vouched" ? /* @__PURE__ */ jsx("img", {
|
|
17968
|
+
src: media.url,
|
|
17969
|
+
alt: "",
|
|
17970
|
+
className: "h-full w-full object-cover"
|
|
17971
|
+
}) : media.kind === "mint" ? /* @__PURE__ */ jsx("span", { children: "minting…" }) : /* @__PURE__ */ jsx("span", {
|
|
17972
|
+
className: "px-1 text-center",
|
|
17973
|
+
children: media.text
|
|
17974
|
+
})
|
|
17975
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
17976
|
+
className: "min-w-0 flex-1",
|
|
17977
|
+
children: [
|
|
17978
|
+
/* @__PURE__ */ jsx("div", {
|
|
17979
|
+
className: "font-medium",
|
|
17980
|
+
children: clockOf(clip.timeRange.startMs)
|
|
17981
|
+
}),
|
|
17982
|
+
/* @__PURE__ */ jsx("div", {
|
|
17983
|
+
className: "text-xs text-muted-foreground",
|
|
17984
|
+
children: clip.source
|
|
17985
|
+
}),
|
|
17986
|
+
labels.length === 0 ? null : /* @__PURE__ */ jsx("div", {
|
|
17987
|
+
className: "text-xs",
|
|
17988
|
+
children: labels.join(" · ")
|
|
17989
|
+
}),
|
|
17990
|
+
clip.nativeTypes === void 0 || clip.nativeTypes.length === 0 ? null : /* @__PURE__ */ jsx("div", {
|
|
17991
|
+
className: "text-[10px] text-muted-foreground",
|
|
17992
|
+
children: clip.nativeTypes.join(", ")
|
|
17993
|
+
}),
|
|
17994
|
+
playable ? null : /* @__PURE__ */ jsxs("div", {
|
|
17995
|
+
className: "text-xs text-amber-600 dark:text-amber-400",
|
|
17996
|
+
children: ["Not playable — ", clip.unplayableReason ?? "the source gave no reason"]
|
|
17997
|
+
})
|
|
17998
|
+
]
|
|
17999
|
+
})]
|
|
18000
|
+
}) });
|
|
18001
|
+
}
|
|
18002
|
+
//#endregion
|
|
18003
|
+
//#region src/composites/clips/clip-day-window.ts
|
|
18004
|
+
function pad2(value) {
|
|
18005
|
+
return value < 10 ? `0${String(value)}` : String(value);
|
|
18006
|
+
}
|
|
18007
|
+
/** Parse `YYYY-MM-DD` into its local-midnight `Date`. */
|
|
18008
|
+
function startOfDay(dayId) {
|
|
18009
|
+
const [year, month, day] = dayId.split("-").map((part) => Number(part));
|
|
18010
|
+
return new Date(year ?? 1970, (month ?? 1) - 1, day ?? 1, 0, 0, 0, 0);
|
|
18011
|
+
}
|
|
18012
|
+
/** The LOCAL calendar day an instant falls in, as `YYYY-MM-DD`. */
|
|
18013
|
+
function toDayId(instant) {
|
|
18014
|
+
return `${String(instant.getFullYear())}-${pad2(instant.getMonth() + 1)}-${pad2(instant.getDate())}`;
|
|
18015
|
+
}
|
|
18016
|
+
/** The half-open local-wall-clock window of one day. */
|
|
18017
|
+
function dayWindow$1(dayId) {
|
|
18018
|
+
const start = startOfDay(dayId);
|
|
18019
|
+
const end = startOfDay(dayId);
|
|
18020
|
+
end.setDate(end.getDate() + 1);
|
|
18021
|
+
return {
|
|
18022
|
+
since: start.getTime(),
|
|
18023
|
+
until: end.getTime()
|
|
18024
|
+
};
|
|
18025
|
+
}
|
|
18026
|
+
/** Walk `days` calendar days from `dayId` — DST-safe, because `Date` does it. */
|
|
18027
|
+
function shiftDay(dayId, days) {
|
|
18028
|
+
const moved = startOfDay(dayId);
|
|
18029
|
+
moved.setDate(moved.getDate() + days);
|
|
18030
|
+
return toDayId(moved);
|
|
18031
|
+
}
|
|
18032
|
+
/**
|
|
18033
|
+
* The day, spelled out for the header.
|
|
18034
|
+
*
|
|
18035
|
+
* An empty list has to say WHICH day it is empty for — "no clips" with no date
|
|
18036
|
+
* beside it is the ambiguity this surface exists to remove — so this label is
|
|
18037
|
+
* rendered next to every state, not only the populated one.
|
|
18038
|
+
*/
|
|
18039
|
+
function formatDayLabel(dayId) {
|
|
18040
|
+
return startOfDay(dayId).toLocaleDateString(void 0, {
|
|
18041
|
+
weekday: "short",
|
|
18042
|
+
year: "numeric",
|
|
18043
|
+
month: "short",
|
|
18044
|
+
day: "numeric"
|
|
18045
|
+
});
|
|
18046
|
+
}
|
|
18047
|
+
//#endregion
|
|
18048
|
+
//#region src/composites/clips/clip-source-state.ts
|
|
18049
|
+
var STATE_COPY = {
|
|
18050
|
+
ok: {
|
|
18051
|
+
headline: "Answering",
|
|
18052
|
+
tone: "ok",
|
|
18053
|
+
answered: true
|
|
18054
|
+
},
|
|
18055
|
+
sleeping: {
|
|
18056
|
+
headline: "Asleep — showing the catalog read while it was awake",
|
|
18057
|
+
tone: "warn",
|
|
18058
|
+
answered: true
|
|
18059
|
+
},
|
|
18060
|
+
unreachable: {
|
|
18061
|
+
headline: "Could not be reached — its clips are missing from this list",
|
|
18062
|
+
tone: "error",
|
|
18063
|
+
answered: false
|
|
18064
|
+
},
|
|
18065
|
+
"no-storage": {
|
|
18066
|
+
headline: "No storage card — this camera keeps nothing of its own",
|
|
18067
|
+
tone: "warn",
|
|
18068
|
+
answered: false
|
|
18069
|
+
},
|
|
18070
|
+
"index-empty": {
|
|
18071
|
+
headline: "The camera's calendar marks these days, and its own index lists nothing",
|
|
18072
|
+
tone: "warn",
|
|
18073
|
+
answered: false
|
|
18074
|
+
}
|
|
18075
|
+
};
|
|
18076
|
+
/** Turn one source row into the line the picker and the list show. */
|
|
18077
|
+
function describeSource(source) {
|
|
18078
|
+
const copy = STATE_COPY[source.availability.state];
|
|
18079
|
+
return {
|
|
18080
|
+
source: source.source,
|
|
18081
|
+
label: source.label,
|
|
18082
|
+
headline: copy.headline,
|
|
18083
|
+
detail: source.availability.reason ?? null,
|
|
18084
|
+
tone: copy.tone,
|
|
18085
|
+
answered: copy.answered
|
|
18086
|
+
};
|
|
18087
|
+
}
|
|
18088
|
+
var MINUTE_MS$1 = 6e4;
|
|
18089
|
+
var HOUR_MS$1 = 36e5;
|
|
18090
|
+
var DAY_MS$2 = 864e5;
|
|
18091
|
+
/**
|
|
18092
|
+
* How old a source's catalog is, or null when it did not say.
|
|
18093
|
+
*
|
|
18094
|
+
* Null is NOT "now". A source that omits `catalogAsOf` was read live and has
|
|
18095
|
+
* no age to show; inventing "just now" for a source that never told us would
|
|
18096
|
+
* be the same lie as drawing a cached list as current (D549 decision 13).
|
|
18097
|
+
*/
|
|
18098
|
+
function formatCatalogAge(catalogAsOf, now) {
|
|
18099
|
+
if (catalogAsOf === void 0) return null;
|
|
18100
|
+
const age = Math.max(0, now - catalogAsOf);
|
|
18101
|
+
if (age < MINUTE_MS$1) return "under a minute ago";
|
|
18102
|
+
if (age < HOUR_MS$1) return `${String(Math.floor(age / MINUTE_MS$1))} min ago`;
|
|
18103
|
+
if (age < DAY_MS$2) return `${String(Math.floor(age / HOUR_MS$1))} h ago`;
|
|
18104
|
+
return `${String(Math.floor(age / DAY_MS$2))} d ago`;
|
|
18105
|
+
}
|
|
18106
|
+
//#endregion
|
|
18107
|
+
//#region src/composites/clips/clip-view-state.ts
|
|
18108
|
+
/** Keep only the rows of selected sources; an absent selection keeps them all. */
|
|
18109
|
+
function applySelection(clips, selected) {
|
|
18110
|
+
if (selected === void 0) return clips;
|
|
18111
|
+
const allowed = new Set(selected);
|
|
18112
|
+
return clips.filter((clip) => allowed.has(clip.source));
|
|
18113
|
+
}
|
|
18114
|
+
function resolveClipsView(input) {
|
|
18115
|
+
if (input.clipsStatus === "error") return {
|
|
18116
|
+
kind: "failed",
|
|
18117
|
+
message: input.clipsError ?? "The clip list could not be read"
|
|
18118
|
+
};
|
|
18119
|
+
if (input.sourcesStatus === "error" && input.clips.length === 0) return {
|
|
18120
|
+
kind: "failed",
|
|
18121
|
+
message: input.sourcesError ?? "The source list could not be read"
|
|
18122
|
+
};
|
|
18123
|
+
if (input.clipsStatus === "pending" || input.sourcesStatus === "pending") return { kind: "loading" };
|
|
18124
|
+
const notices = input.sources.map(describeSource);
|
|
18125
|
+
const answered = notices.filter((notice) => notice.answered);
|
|
18126
|
+
const silent = notices.filter((notice) => !notice.answered);
|
|
18127
|
+
const clips = applySelection(input.clips, input.selected);
|
|
18128
|
+
if (clips.length === 0) return {
|
|
18129
|
+
kind: "empty",
|
|
18130
|
+
dayId: input.dayId,
|
|
18131
|
+
answered,
|
|
18132
|
+
silent,
|
|
18133
|
+
nobodyAnswered: answered.length === 0
|
|
18134
|
+
};
|
|
18135
|
+
return {
|
|
18136
|
+
kind: "listed",
|
|
18137
|
+
clips,
|
|
18138
|
+
answered,
|
|
18139
|
+
silent
|
|
18140
|
+
};
|
|
18141
|
+
}
|
|
18142
|
+
//#endregion
|
|
18143
|
+
//#region src/composites/clips/ClipsBrowser.tsx
|
|
18144
|
+
/**
|
|
18145
|
+
* `host/clips-browser` — a camera's clips, from EVERY source it has.
|
|
18146
|
+
*
|
|
18147
|
+
* Mounted by the framework, not by hand: `videoclips.cap.ts` declares
|
|
18148
|
+
* `deviceConfig.ui = { kind:'widget', widgetId:'host/clips-browser',
|
|
18149
|
+
* tab:'clips', topTab:true }` and `deriveDeviceConfigContribution` emits the
|
|
18150
|
+
* section (D14). `DeviceDetail.tsx` is not edited — placement is data, and
|
|
18151
|
+
* `device-config-widget-wrapped-binding.spec.ts` pins that the derive works
|
|
18152
|
+
* for this cap's WRAPPED binding entry, which no shipped widget cap had
|
|
18153
|
+
* exercised before.
|
|
18154
|
+
*
|
|
18155
|
+
* ## What it shows, and why every part of it exists
|
|
18156
|
+
*
|
|
18157
|
+
* A camera's clips live in several places at once — the analytics visit log,
|
|
18158
|
+
* the camera's own SD card, a hub's storage — and the operator asked for all
|
|
18159
|
+
* of them side by side, never one hidden behind another (D549 decision 2). So:
|
|
18160
|
+
*
|
|
18161
|
+
* - **The source list is complete, always.** Every source the camera has,
|
|
18162
|
+
* with its availability and the age of its catalog. Unticking one hides its
|
|
18163
|
+
* ROWS; the source itself never leaves the list.
|
|
18164
|
+
* - **Nothing is deduped.** A clip held in two storages appears twice, once
|
|
18165
|
+
* per source, and every row says which. That is stated as a consequence in
|
|
18166
|
+
* D549 so it is not "fixed" later.
|
|
18167
|
+
* - **Four states are tellable apart**: loading, empty-with-a-cause,
|
|
18168
|
+
* degraded-per-source, and each silent source in its own words. Every one
|
|
18169
|
+
* of them used to render as "no clips", which is the defect this whole
|
|
18170
|
+
* line of work is about — a camera with no SD card (640) is not quiet, and
|
|
18171
|
+
* a camera whose own index disagrees with its own calendar (618, 6–20
|
|
18172
|
+
* September) is not quiet either.
|
|
18173
|
+
*
|
|
18174
|
+
* ## What the picker WRITES — nothing
|
|
18175
|
+
*
|
|
18176
|
+
* The tick boxes are the cap's own `sources` view filter, forwarded to
|
|
18177
|
+
* `listClips`, and they persist nothing. The persistent authority for turning
|
|
18178
|
+
* a source off for a camera is `deviceManager.setWrapperActive`, whose deny
|
|
18179
|
+
* set is keyed by **addon id** (D556 decision 3) — and one addon serves TWO
|
|
18180
|
+
* sources of a hub child (`native:reolink:onboard` and `native:reolink:hub`,
|
|
18181
|
+
* both `provider-reolink`). Wiring a per-SOURCE tick box to a per-ADDON
|
|
18182
|
+
* authority would make "hide the hub's event view" silently mean "turn off
|
|
18183
|
+
* both Reolink sources": a switch that does something other than what it says,
|
|
18184
|
+
* which is worse than no switch (D62). The gap and its fix are recorded in
|
|
18185
|
+
* ADR 557; until a source row names its own provider, this surface offers the
|
|
18186
|
+
* filter it can honour and no second store.
|
|
18187
|
+
*/
|
|
18188
|
+
/** Newest-first, and bounded: a busy day on 592 lists 546 clips. */
|
|
18189
|
+
var CLIP_PAGE_LIMIT = 500;
|
|
18190
|
+
function ClipsBrowser({ deviceId }) {
|
|
18191
|
+
const [dayId, setDayId] = useState(() => toDayId(/* @__PURE__ */ new Date()));
|
|
18192
|
+
const [hidden, setHidden] = useState([]);
|
|
18193
|
+
const [selectedClip, setSelectedClip] = useState(null);
|
|
18194
|
+
const [profile, setProfile] = useState("low");
|
|
18195
|
+
const presence = useCapabilityPresence("videoclips");
|
|
18196
|
+
const window = useMemo(() => dayWindow$1(dayId), [dayId]);
|
|
18197
|
+
const sources = useVideoclipsListSources({ deviceId });
|
|
18198
|
+
const clips = useVideoclipsListClips({
|
|
18199
|
+
deviceId,
|
|
18200
|
+
since: window.since,
|
|
18201
|
+
until: window.until,
|
|
18202
|
+
limit: CLIP_PAGE_LIMIT
|
|
18203
|
+
});
|
|
18204
|
+
const sourceRows = sources.data ?? [];
|
|
18205
|
+
const selected = sourceRows.map((row) => row.source).filter((source) => !hidden.includes(source));
|
|
18206
|
+
const view = resolveClipsView({
|
|
18207
|
+
dayId,
|
|
18208
|
+
clipsStatus: clips.status,
|
|
18209
|
+
clips: clips.data ?? [],
|
|
18210
|
+
sourcesStatus: sources.status,
|
|
18211
|
+
sources: sourceRows,
|
|
18212
|
+
...hidden.length === 0 ? {} : { selected },
|
|
18213
|
+
...clips.error ? { clipsError: clips.error.message } : {},
|
|
18214
|
+
...sources.error ? { sourcesError: sources.error.message } : {}
|
|
18215
|
+
});
|
|
18216
|
+
const now = Date.now();
|
|
18217
|
+
const toggle = (source, next) => setHidden((current) => next ? current.filter((id) => id !== source) : current.includes(source) ? current : [...current, source]);
|
|
18218
|
+
if (presence === "pending") return /* @__PURE__ */ jsx("div", {
|
|
18219
|
+
role: "status",
|
|
18220
|
+
children: "Asking the registry whether this cluster serves clips…"
|
|
18221
|
+
});
|
|
18222
|
+
if (presence === "unknown") return /* @__PURE__ */ jsx("div", {
|
|
18223
|
+
role: "alert",
|
|
18224
|
+
children: "The capability registry could not be reached, so whether this camera has clip sources is unknown — not absent."
|
|
18225
|
+
});
|
|
18226
|
+
if (presence === "absent") return /* @__PURE__ */ jsxs("div", {
|
|
18227
|
+
role: "status",
|
|
18228
|
+
children: [
|
|
18229
|
+
"No provider of ",
|
|
18230
|
+
/* @__PURE__ */ jsx("code", { children: "videoclips" }),
|
|
18231
|
+
" is installed in this cluster."
|
|
18232
|
+
]
|
|
18233
|
+
});
|
|
18234
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
18235
|
+
className: "space-y-4",
|
|
18236
|
+
children: [
|
|
18237
|
+
/* @__PURE__ */ jsxs("section", {
|
|
18238
|
+
"aria-label": "Clip sources",
|
|
18239
|
+
children: [/* @__PURE__ */ jsx("h3", {
|
|
18240
|
+
className: "text-sm font-semibold",
|
|
18241
|
+
children: "Sources"
|
|
18242
|
+
}), sources.status === "pending" ? /* @__PURE__ */ jsx("div", {
|
|
18243
|
+
role: "status",
|
|
18244
|
+
children: "Loading this camera's clip sources…"
|
|
18245
|
+
}) : sourceRows.length === 0 ? /* @__PURE__ */ jsx("div", {
|
|
18246
|
+
role: "status",
|
|
18247
|
+
children: "No provider answered for this camera — nothing claims to hold clips for it."
|
|
18248
|
+
}) : /* @__PURE__ */ jsx("ul", { children: sourceRows.map((row) => /* @__PURE__ */ jsx(ClipSourceRow, {
|
|
18249
|
+
notice: describeSource(row),
|
|
18250
|
+
catalogAge: formatCatalogAge(row.availability.catalogAsOf, now),
|
|
18251
|
+
checked: !hidden.includes(row.source),
|
|
18252
|
+
onToggle: toggle
|
|
18253
|
+
}, row.source)) })]
|
|
18254
|
+
}),
|
|
18255
|
+
/* @__PURE__ */ jsxs("section", {
|
|
18256
|
+
"aria-label": "Day",
|
|
18257
|
+
className: "flex items-center gap-2",
|
|
18258
|
+
children: [
|
|
18259
|
+
/* @__PURE__ */ jsx("button", {
|
|
18260
|
+
type: "button",
|
|
18261
|
+
"aria-label": "Previous day",
|
|
18262
|
+
onClick: () => setDayId(shiftDay(dayId, -1)),
|
|
18263
|
+
children: "‹"
|
|
18264
|
+
}),
|
|
18265
|
+
/* @__PURE__ */ jsx("span", {
|
|
18266
|
+
className: "font-medium",
|
|
18267
|
+
children: formatDayLabel(dayId)
|
|
18268
|
+
}),
|
|
18269
|
+
/* @__PURE__ */ jsx("button", {
|
|
18270
|
+
type: "button",
|
|
18271
|
+
"aria-label": "Next day",
|
|
18272
|
+
onClick: () => setDayId(shiftDay(dayId, 1)),
|
|
18273
|
+
children: "›"
|
|
18274
|
+
}),
|
|
18275
|
+
/* @__PURE__ */ jsx("button", {
|
|
18276
|
+
type: "button",
|
|
18277
|
+
onClick: () => setDayId(toDayId(/* @__PURE__ */ new Date())),
|
|
18278
|
+
children: "Today"
|
|
18279
|
+
})
|
|
18280
|
+
]
|
|
18281
|
+
}),
|
|
18282
|
+
/* @__PURE__ */ jsx("section", {
|
|
18283
|
+
"aria-label": "Clips",
|
|
18284
|
+
children: view.kind === "loading" ? /* @__PURE__ */ jsxs("div", {
|
|
18285
|
+
role: "status",
|
|
18286
|
+
children: [
|
|
18287
|
+
"Loading clips for ",
|
|
18288
|
+
formatDayLabel(dayId),
|
|
18289
|
+
"…"
|
|
18290
|
+
]
|
|
18291
|
+
}) : view.kind === "failed" ? /* @__PURE__ */ jsxs("div", {
|
|
18292
|
+
role: "alert",
|
|
18293
|
+
children: ["The clip list could not be read: ", view.message]
|
|
18294
|
+
}) : view.kind === "empty" ? /* @__PURE__ */ jsxs("div", {
|
|
18295
|
+
className: "space-y-2",
|
|
18296
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
18297
|
+
role: "status",
|
|
18298
|
+
children: view.nobodyAnswered ? `No source could answer for ${formatDayLabel(dayId)}.` : `No clips on ${formatDayLabel(dayId)} from ${view.answered.map((notice) => notice.label).join(", ")}.`
|
|
18299
|
+
}), /* @__PURE__ */ jsx(ClipSilentSources, { silent: view.silent })]
|
|
18300
|
+
}) : /* @__PURE__ */ jsxs("div", {
|
|
18301
|
+
className: "space-y-2",
|
|
18302
|
+
children: [/* @__PURE__ */ jsx(ClipSilentSources, { silent: view.silent }), /* @__PURE__ */ jsx("ul", {
|
|
18303
|
+
className: "space-y-2",
|
|
18304
|
+
children: view.clips.map((clip) => /* @__PURE__ */ jsx(ClipTile, {
|
|
18305
|
+
clip,
|
|
18306
|
+
selected: selectedClip?.id === clip.id,
|
|
18307
|
+
onSelect: setSelectedClip
|
|
18308
|
+
}, `${clip.source}:${clip.id}`))
|
|
18309
|
+
})]
|
|
18310
|
+
})
|
|
18311
|
+
}),
|
|
18312
|
+
selectedClip === null ? null : /* @__PURE__ */ jsx(ClipPanel, {
|
|
18313
|
+
deviceId,
|
|
18314
|
+
clip: selectedClip,
|
|
18315
|
+
profile,
|
|
18316
|
+
onProfileChange: setProfile
|
|
18317
|
+
})
|
|
18318
|
+
]
|
|
18319
|
+
});
|
|
18320
|
+
}
|
|
18321
|
+
//#endregion
|
|
17552
18322
|
//#region src/hooks/use-navigation.ts
|
|
17553
18323
|
/**
|
|
17554
18324
|
* useNavigation — drive a `navigation` robot camera from the UI.
|
|
@@ -19332,46 +20102,6 @@ function RecordingSettings({ initial, availableProfiles, saving, onSave, sensorC
|
|
|
19332
20102
|
});
|
|
19333
20103
|
}
|
|
19334
20104
|
//#endregion
|
|
19335
|
-
//#region src/contexts/vod-playback.tsx
|
|
19336
|
-
/**
|
|
19337
|
-
* VodPlayback — shared context coordinating recorded (VOD) playback between a
|
|
19338
|
-
* widget/section (the Recording panel) and the hero StreamPanel.
|
|
19339
|
-
*
|
|
19340
|
-
* A CONTROLLER (the Recording widget) calls `play({ url, label })`; the hero
|
|
19341
|
-
* StreamPanel CONSUMES `request` and switches into VOD mode (HLS playback
|
|
19342
|
-
* through the hub data-plane) instead of the live WebRTC stream. `clear()`
|
|
19343
|
-
* returns the hero to live.
|
|
19344
|
-
*
|
|
19345
|
-
* Built on `createSharedContext` (NOT a plain `createContext`) so it crosses
|
|
19346
|
-
* the Module-Federation boundary: an addon-shipped widget consuming
|
|
19347
|
-
* `useVodPlayback()` resolves the SAME provider instance the host mounted —
|
|
19348
|
-
* the same mechanism `player-overlays` / `zone-editing` use to let federated
|
|
19349
|
-
* widgets (zone-editor, privacy-mask) drive the live player. Consumers used
|
|
19350
|
-
* outside a provider get the inert default (no-op), so a StreamPanel mounted
|
|
19351
|
-
* on a page without the Recording widget stays live-only without crashing.
|
|
19352
|
-
*/
|
|
19353
|
-
var VodPlaybackContext = createSharedContext("camstack:vod-playback", {
|
|
19354
|
-
request: null,
|
|
19355
|
-
play: () => {},
|
|
19356
|
-
clear: () => {}
|
|
19357
|
-
});
|
|
19358
|
-
function VodPlaybackProvider({ children }) {
|
|
19359
|
-
const [request, setRequest] = useState(null);
|
|
19360
|
-
const value = useMemo(() => ({
|
|
19361
|
-
request,
|
|
19362
|
-
play: (req) => setRequest(req),
|
|
19363
|
-
clear: () => setRequest(null)
|
|
19364
|
-
}), [request]);
|
|
19365
|
-
return /* @__PURE__ */ jsx(VodPlaybackContext.Provider, {
|
|
19366
|
-
value,
|
|
19367
|
-
children
|
|
19368
|
-
});
|
|
19369
|
-
}
|
|
19370
|
-
/** @returns the VOD playback controller (inert no-op outside a provider). */
|
|
19371
|
-
function useVodPlayback() {
|
|
19372
|
-
return useContext(VodPlaybackContext);
|
|
19373
|
-
}
|
|
19374
|
-
//#endregion
|
|
19375
20105
|
//#region src/lib/recorded-control-protocol.ts
|
|
19376
20106
|
/** Serialize a command for `RTCDataChannel.send` (matches the server schema). */
|
|
19377
20107
|
function serializeRecordedCommand(cmd) {
|
|
@@ -20966,7 +21696,8 @@ var HOST_WIDGETS = {
|
|
|
20966
21696
|
"host/consumables-panel": ConsumablesPanel,
|
|
20967
21697
|
"host/ptz-autotrack": AutotrackSection,
|
|
20968
21698
|
"host/recording-panel": RecordingPanel,
|
|
20969
|
-
"host/camera-grid-layout": CameraGridLayoutEditor
|
|
21699
|
+
"host/camera-grid-layout": CameraGridLayoutEditor,
|
|
21700
|
+
"host/clips-browser": ClipsBrowser
|
|
20970
21701
|
};
|
|
20971
21702
|
//#endregion
|
|
20972
21703
|
//#region src/composites/widget-slot.tsx
|
|
@@ -48877,7 +49608,7 @@ function hlsLevelToInfo(level) {
|
|
|
48877
49608
|
name: level.name.length > 0 ? level.name : void 0
|
|
48878
49609
|
};
|
|
48879
49610
|
}
|
|
48880
|
-
function HlsVideo({ url, authToken, posterUrl, autoPlay = true, className, onQualityOptions, selectedLevel = -1 }) {
|
|
49611
|
+
function HlsVideo({ url, format = "hls", authToken, posterUrl, autoPlay = true, className, onQualityOptions, selectedLevel = -1 }) {
|
|
48881
49612
|
const videoRef = useRef(null);
|
|
48882
49613
|
const hlsRef = useRef(null);
|
|
48883
49614
|
const [error, setError] = useState(null);
|
|
@@ -48890,6 +49621,23 @@ function HlsVideo({ url, authToken, posterUrl, autoPlay = true, className, onQua
|
|
|
48890
49621
|
onQualityOptions?.([]);
|
|
48891
49622
|
const onPlaying = () => setLoading(false);
|
|
48892
49623
|
video.addEventListener("playing", onPlaying);
|
|
49624
|
+
if (format === "mp4") {
|
|
49625
|
+
video.src = url;
|
|
49626
|
+
const onLoaded = () => {
|
|
49627
|
+
if (autoPlay) video.play().catch(() => {});
|
|
49628
|
+
};
|
|
49629
|
+
const onFailed = () => setError("Could not load this clip.");
|
|
49630
|
+
video.addEventListener("loadedmetadata", onLoaded);
|
|
49631
|
+
video.addEventListener("error", onFailed);
|
|
49632
|
+
onQualityOptions?.([]);
|
|
49633
|
+
return () => {
|
|
49634
|
+
video.removeEventListener("loadedmetadata", onLoaded);
|
|
49635
|
+
video.removeEventListener("error", onFailed);
|
|
49636
|
+
video.removeEventListener("playing", onPlaying);
|
|
49637
|
+
video.removeAttribute("src");
|
|
49638
|
+
video.load();
|
|
49639
|
+
};
|
|
49640
|
+
}
|
|
48893
49641
|
if (!("MediaSource" in window) && video.canPlayType("application/vnd.apple.mpegurl")) {
|
|
48894
49642
|
video.src = url;
|
|
48895
49643
|
const onLoaded = () => {
|
|
@@ -48952,6 +49700,7 @@ function HlsVideo({ url, authToken, posterUrl, autoPlay = true, className, onQua
|
|
|
48952
49700
|
};
|
|
48953
49701
|
}, [
|
|
48954
49702
|
url,
|
|
49703
|
+
format,
|
|
48955
49704
|
authToken,
|
|
48956
49705
|
autoPlay,
|
|
48957
49706
|
onQualityOptions
|
|
@@ -51095,7 +51844,7 @@ function ImageOffIcon({ className }) {
|
|
|
51095
51844
|
]
|
|
51096
51845
|
});
|
|
51097
51846
|
}
|
|
51098
|
-
function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, playbackUrl, playbackAuthToken, onExitPlayback, posterUrl, streams, activeStreamId: controlledStreamId, onStreamChange, deviceName, phase, pipelineMetrics, detections, stationaryObjects, 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 }) {
|
|
51847
|
+
function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, playbackUrl, playbackFormat, playbackAuthToken, onExitPlayback, posterUrl, streams, activeStreamId: controlledStreamId, onStreamChange, deviceName, phase, pipelineMetrics, detections, stationaryObjects, 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 }) {
|
|
51099
51848
|
const registeredButtons = usePlayerToolbarButtons();
|
|
51100
51849
|
const recordedPlayback = useRecordedPlayback();
|
|
51101
51850
|
const [isPlaying, setIsPlaying] = useState(autoPlay);
|
|
@@ -51396,6 +52145,7 @@ function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIce
|
|
|
51396
52145
|
className: "aspect-video relative",
|
|
51397
52146
|
children: [/* @__PURE__ */ jsx(HlsVideo, {
|
|
51398
52147
|
url: playbackUrl,
|
|
52148
|
+
...playbackFormat ? { format: playbackFormat } : {},
|
|
51399
52149
|
authToken: playbackAuthToken ?? null,
|
|
51400
52150
|
onQualityOptions: handleVodQualityOptions,
|
|
51401
52151
|
selectedLevel: vodLevel,
|
|
@@ -52480,4 +53230,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-BvDy3x3k.js").t
|
|
|
52480
53230
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
52481
53231
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-PkYs077O.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
52482
53232
|
//#endregion
|
|
52483
|
-
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamDebugOverlay, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, Camera as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deriveWebrtcDebugStats, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, freezeVerdict, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, createLucideIcon as l, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, Grid2x2 as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, EyeOff as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraGridLayoutApplyDeviceSettingsPatch, useCameraGridLayoutGetDeviceLiveContribution, useCameraGridLayoutGetDeviceSettingsContribution, useCameraGridLayoutGetLayout, useCameraGridLayoutSaveLayout, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzCaptureHomeHere, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionDebug, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
53233
|
+
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamDebugOverlay, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, Camera as c, childEntityId, childListName, classifyCapability, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deriveWebrtcDebugStats, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, freezeVerdict, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, createLucideIcon as l, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, Grid2x2 as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, EyeOff as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraGridLayoutApplyDeviceSettingsPatch, useCameraGridLayoutGetDeviceLiveContribution, useCameraGridLayoutGetDeviceSettingsContribution, useCameraGridLayoutGetLayout, useCameraGridLayoutSaveLayout, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCapabilityPresence, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzCaptureHomeHere, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVideoclipsListSources, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionDebug, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|