@camstack/ui-library 1.2.67 → 1.2.69
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/adaptive-downlink.d.ts +29 -0
- package/dist/composites/model-picker.d.ts +6 -17
- package/dist/generated/system-hooks.d.ts +8 -0
- package/dist/index.cjs +165 -75
- package/dist/index.js +163 -77
- package/package.json +1 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Burst-download the hub's `/adaptive-probe` blob and return Mbps.
|
|
3
|
+
* Used as `hints.downlinkMbps` so adaptive selection is based on a measured
|
|
4
|
+
* path, not viewport size or IP class. Failures return null (caller keeps
|
|
5
|
+
* the default-low / ceiling path and may stay on the lowest rung).
|
|
6
|
+
*/
|
|
7
|
+
export declare const ADAPTIVE_PROBE_PATH = "/adaptive-probe";
|
|
8
|
+
export declare const ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
|
|
9
|
+
export type AdaptiveTier = 'high' | 'mid' | 'low';
|
|
10
|
+
/** Mbps needed to attempt each rung (bitrate / 0.6 headroom, rounded). */
|
|
11
|
+
export declare const DOWNLINK_HIGH_MBPS = 8;
|
|
12
|
+
export declare const DOWNLINK_MID_MBPS = 2.5;
|
|
13
|
+
/** Map a measured downlink onto the adaptive ladder. Mid is a real rung. */
|
|
14
|
+
export declare function suggestedAdaptiveTier(mbps: number): AdaptiveTier;
|
|
15
|
+
/** First connect never carries a cached probe — the broker starts lowest. */
|
|
16
|
+
export declare function stripDownlinkForColdStart<T extends {
|
|
17
|
+
readonly downlinkMbps?: number;
|
|
18
|
+
}>(hints: T): Omit<T, 'downlinkMbps'>;
|
|
19
|
+
/** After a probe, only mid/high justify a make-before-break climb. */
|
|
20
|
+
export declare function shouldUpgradeAfterProbe(mbps: number): boolean;
|
|
21
|
+
export declare function measureDownlinkMbps(origin: string, deps: {
|
|
22
|
+
readonly fetchImpl: (url: string, init: {
|
|
23
|
+
signal: AbortSignal;
|
|
24
|
+
}) => Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
27
|
+
}>;
|
|
28
|
+
readonly now: () => number;
|
|
29
|
+
}): Promise<number | null>;
|
|
@@ -3,23 +3,12 @@ export type ModelOption = PipelineAddonSchema['models'][number];
|
|
|
3
3
|
/**
|
|
4
4
|
* Shared model picker — the ONE model-selection control across the app.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* views. A pinned custom model hides the grouped catalog entirely (both used
|
|
13
|
-
* to render, and the grouped picker highlighted a family that was NOT the
|
|
14
|
-
* selection); while a catalog model is pinned the custom list stays behind an
|
|
15
|
-
* explicit affordance. A legacy/removed pin is surfaced with an explicit
|
|
16
|
-
* banner rather than a silently mis-highlighted chip.
|
|
17
|
-
*
|
|
18
|
-
* Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
|
|
19
|
-
* (`AgentStepEditor`), and the benchmark — so the picker looks identical
|
|
20
|
-
* everywhere. `value === ''` renders nothing selected (callers that support an
|
|
21
|
-
* "Auto / node default" mode own that affordance and hide this picker while it
|
|
22
|
-
* is active).
|
|
6
|
+
* Provider first (CamStack / Frigate / Scrypted / Custom), then inside that
|
|
7
|
+
* catalog the grouped Family→Tier→Variant selector when entries declare
|
|
8
|
+
* `group`, else a flat `<select>`. The persisted value stays the flat model
|
|
9
|
+
* id. `value === ''` renders nothing selected (callers that support an
|
|
10
|
+
* "Auto / node default" mode own that affordance and hide this picker while
|
|
11
|
+
* it is active).
|
|
23
12
|
*/
|
|
24
13
|
export declare function ModelPicker({ models, value, onChange, disabled, }: {
|
|
25
14
|
readonly models: readonly ModelOption[];
|
|
@@ -781,6 +781,10 @@ export declare const useLocalNetworkGetConnectionEndpoints: typeof trpc.localNet
|
|
|
781
781
|
export declare const useLocalNetworkGetNotificationEndpoint: typeof trpc.localNetwork.getNotificationEndpoint.useQuery;
|
|
782
782
|
/** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
|
|
783
783
|
export declare const useLocalNetworkSetNotificationEndpoint: typeof trpc.localNetwork.setNotificationEndpoint.useMutation;
|
|
784
|
+
/** Generated alias around `trpc.localNetwork.getViewerEndpoints.useQuery`. */
|
|
785
|
+
export declare const useLocalNetworkGetViewerEndpoints: typeof trpc.localNetwork.getViewerEndpoints.useQuery;
|
|
786
|
+
/** Generated alias around `trpc.localNetwork.setViewerEndpoints.useMutation`. */
|
|
787
|
+
export declare const useLocalNetworkSetViewerEndpoints: typeof trpc.localNetwork.setViewerEndpoints.useMutation;
|
|
784
788
|
/** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
|
|
785
789
|
export declare const useLocalNetworkGetAllowedAddresses: typeof trpc.localNetwork.getAllowedAddresses.useQuery;
|
|
786
790
|
/** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
|
|
@@ -1063,6 +1067,10 @@ export declare const usePipelineAnalyticsGetTrack: typeof trpc.pipelineAnalytics
|
|
|
1063
1067
|
export declare const usePipelineAnalyticsListTracks: typeof trpc.pipelineAnalytics.listTracks.useQuery;
|
|
1064
1068
|
/** Generated alias around `trpc.pipelineAnalytics.listRecentTracks.useQuery`. */
|
|
1065
1069
|
export declare const usePipelineAnalyticsListRecentTracks: typeof trpc.pipelineAnalytics.listRecentTracks.useQuery;
|
|
1070
|
+
/** Generated alias around `trpc.pipelineAnalytics.listGroups.useQuery`. */
|
|
1071
|
+
export declare const usePipelineAnalyticsListGroups: typeof trpc.pipelineAnalytics.listGroups.useQuery;
|
|
1072
|
+
/** Generated alias around `trpc.pipelineAnalytics.getGroup.useQuery`. */
|
|
1073
|
+
export declare const usePipelineAnalyticsGetGroup: typeof trpc.pipelineAnalytics.getGroup.useQuery;
|
|
1066
1074
|
/** Generated alias around `trpc.pipelineAnalytics.clearTracks.useMutation`. */
|
|
1067
1075
|
export declare const usePipelineAnalyticsClearTracks: typeof trpc.pipelineAnalytics.clearTracks.useMutation;
|
|
1068
1076
|
/** Generated alias around `trpc.pipelineAnalytics.getMotionEvents.useQuery`. */
|
package/dist/index.cjs
CHANGED
|
@@ -5695,6 +5695,10 @@ var useLocalNetworkGetConnectionEndpoints = trpc.localNetwork.getConnectionEndpo
|
|
|
5695
5695
|
var useLocalNetworkGetNotificationEndpoint = trpc.localNetwork.getNotificationEndpoint.useQuery;
|
|
5696
5696
|
/** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
|
|
5697
5697
|
var useLocalNetworkSetNotificationEndpoint = trpc.localNetwork.setNotificationEndpoint.useMutation;
|
|
5698
|
+
/** Generated alias around `trpc.localNetwork.getViewerEndpoints.useQuery`. */
|
|
5699
|
+
var useLocalNetworkGetViewerEndpoints = trpc.localNetwork.getViewerEndpoints.useQuery;
|
|
5700
|
+
/** Generated alias around `trpc.localNetwork.setViewerEndpoints.useMutation`. */
|
|
5701
|
+
var useLocalNetworkSetViewerEndpoints = trpc.localNetwork.setViewerEndpoints.useMutation;
|
|
5698
5702
|
/** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
|
|
5699
5703
|
var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.useQuery;
|
|
5700
5704
|
/** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
|
|
@@ -5977,6 +5981,10 @@ var usePipelineAnalyticsGetTrack = trpc.pipelineAnalytics.getTrack.useQuery;
|
|
|
5977
5981
|
var usePipelineAnalyticsListTracks = trpc.pipelineAnalytics.listTracks.useQuery;
|
|
5978
5982
|
/** Generated alias around `trpc.pipelineAnalytics.listRecentTracks.useQuery`. */
|
|
5979
5983
|
var usePipelineAnalyticsListRecentTracks = trpc.pipelineAnalytics.listRecentTracks.useQuery;
|
|
5984
|
+
/** Generated alias around `trpc.pipelineAnalytics.listGroups.useQuery`. */
|
|
5985
|
+
var usePipelineAnalyticsListGroups = trpc.pipelineAnalytics.listGroups.useQuery;
|
|
5986
|
+
/** Generated alias around `trpc.pipelineAnalytics.getGroup.useQuery`. */
|
|
5987
|
+
var usePipelineAnalyticsGetGroup = trpc.pipelineAnalytics.getGroup.useQuery;
|
|
5980
5988
|
/** Generated alias around `trpc.pipelineAnalytics.clearTracks.useMutation`. */
|
|
5981
5989
|
var usePipelineAnalyticsClearTracks = trpc.pipelineAnalytics.clearTracks.useMutation;
|
|
5982
5990
|
/** Generated alias around `trpc.pipelineAnalytics.getMotionEvents.useQuery`. */
|
|
@@ -21861,35 +21869,45 @@ function GroupedModelSelector({ catalog, value, onChange, disabled }) {
|
|
|
21861
21869
|
}
|
|
21862
21870
|
//#endregion
|
|
21863
21871
|
//#region src/composites/model-picker.tsx
|
|
21872
|
+
var PROVIDER_LABEL = {
|
|
21873
|
+
camstack: "CamStack",
|
|
21874
|
+
frigate: "Frigate",
|
|
21875
|
+
scrypted: "Scrypted",
|
|
21876
|
+
custom: "Custom"
|
|
21877
|
+
};
|
|
21878
|
+
function providerOf(model) {
|
|
21879
|
+
return model.provider ?? "camstack";
|
|
21880
|
+
}
|
|
21864
21881
|
/**
|
|
21865
21882
|
* Shared model picker — the ONE model-selection control across the app.
|
|
21866
21883
|
*
|
|
21867
|
-
*
|
|
21868
|
-
*
|
|
21869
|
-
*
|
|
21870
|
-
*
|
|
21871
|
-
*
|
|
21872
|
-
*
|
|
21873
|
-
* views. A pinned custom model hides the grouped catalog entirely (both used
|
|
21874
|
-
* to render, and the grouped picker highlighted a family that was NOT the
|
|
21875
|
-
* selection); while a catalog model is pinned the custom list stays behind an
|
|
21876
|
-
* explicit affordance. A legacy/removed pin is surfaced with an explicit
|
|
21877
|
-
* banner rather than a silently mis-highlighted chip.
|
|
21878
|
-
*
|
|
21879
|
-
* Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
|
|
21880
|
-
* (`AgentStepEditor`), and the benchmark — so the picker looks identical
|
|
21881
|
-
* everywhere. `value === ''` renders nothing selected (callers that support an
|
|
21882
|
-
* "Auto / node default" mode own that affordance and hide this picker while it
|
|
21883
|
-
* is active).
|
|
21884
|
+
* Provider first (CamStack / Frigate / Scrypted / Custom), then inside that
|
|
21885
|
+
* catalog the grouped Family→Tier→Variant selector when entries declare
|
|
21886
|
+
* `group`, else a flat `<select>`. The persisted value stays the flat model
|
|
21887
|
+
* id. `value === ''` renders nothing selected (callers that support an
|
|
21888
|
+
* "Auto / node default" mode own that affordance and hide this picker while
|
|
21889
|
+
* it is active).
|
|
21884
21890
|
*/
|
|
21885
21891
|
function ModelPicker({ models, value, onChange, disabled }) {
|
|
21886
|
-
const
|
|
21887
|
-
|
|
21888
|
-
|
|
21889
|
-
|
|
21892
|
+
const byProvider = (0, react$1.useMemo)(() => {
|
|
21893
|
+
const map = /* @__PURE__ */ new Map();
|
|
21894
|
+
for (const m of models) {
|
|
21895
|
+
const provider = providerOf(m);
|
|
21896
|
+
const list = map.get(provider);
|
|
21897
|
+
if (list) list.push(m);
|
|
21898
|
+
else map.set(provider, [m]);
|
|
21899
|
+
}
|
|
21900
|
+
return map;
|
|
21901
|
+
}, [models]);
|
|
21902
|
+
const presentProviders = (0, react$1.useMemo)(() => _camstack_types.MODEL_PROVIDER_IDS.filter((id) => (byProvider.get(id)?.length ?? 0) > 0), [byProvider]);
|
|
21903
|
+
const defaultProvider = (0, react$1.useMemo)(() => {
|
|
21904
|
+
const pinned = models.find((m) => m.id === value);
|
|
21905
|
+
return pinned ? providerOf(pinned) : void 0;
|
|
21906
|
+
}, [models, value]) ?? (presentProviders.includes("camstack") ? "camstack" : presentProviders[0] ?? "camstack");
|
|
21907
|
+
const [provider, setProvider] = (0, react$1.useState)(defaultProvider);
|
|
21890
21908
|
(0, react$1.useEffect)(() => {
|
|
21891
|
-
|
|
21892
|
-
}, [
|
|
21909
|
+
setProvider(defaultProvider);
|
|
21910
|
+
}, [defaultProvider]);
|
|
21893
21911
|
const unresolvedBanner = value !== "" && !models.some((m) => m.id === value) && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21894
21912
|
className: "rounded border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-300",
|
|
21895
21913
|
children: [
|
|
@@ -21901,6 +21919,9 @@ function ModelPicker({ models, value, onChange, disabled }) {
|
|
|
21901
21919
|
") is a legacy/removed model — no longer offered below. Pick a replacement to change it; Save persists whatever is selected here."
|
|
21902
21920
|
]
|
|
21903
21921
|
});
|
|
21922
|
+
const scoped = byProvider.get(provider) ?? [];
|
|
21923
|
+
const grouped = scoped.filter((m) => m.group !== void 0);
|
|
21924
|
+
const ungrouped = scoped.filter((m) => m.group === void 0);
|
|
21904
21925
|
const flatSelect = (opts, selectPlaceholder) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
|
|
21905
21926
|
disabled,
|
|
21906
21927
|
className: "w-full bg-surface border border-border rounded px-2 py-1 text-xs disabled:opacity-50",
|
|
@@ -21915,49 +21936,30 @@ function ModelPicker({ models, value, onChange, disabled }) {
|
|
|
21915
21936
|
children: m.name
|
|
21916
21937
|
}, m.id))]
|
|
21917
21938
|
});
|
|
21918
|
-
const switchButton = (label, target) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
21919
|
-
type: "button",
|
|
21920
|
-
disabled,
|
|
21921
|
-
onClick: () => setView(target),
|
|
21922
|
-
className: "text-[10px] text-primary hover:underline disabled:opacity-50",
|
|
21923
|
-
children: label
|
|
21924
|
-
});
|
|
21925
|
-
if (!hasGroups) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21926
|
-
className: "space-y-2",
|
|
21927
|
-
children: [unresolvedBanner, flatSelect(models, "— select a model —")]
|
|
21928
|
-
});
|
|
21929
|
-
if (view === "custom" && ungrouped.length > 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21930
|
-
className: "space-y-2",
|
|
21931
|
-
children: [
|
|
21932
|
-
unresolvedBanner,
|
|
21933
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21934
|
-
className: "flex items-center justify-between",
|
|
21935
|
-
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
21936
|
-
className: "text-[10px] uppercase tracking-widest text-foreground-subtle",
|
|
21937
|
-
children: "Custom / ungrouped model"
|
|
21938
|
-
}), switchButton("Choose from catalog instead", "catalog")]
|
|
21939
|
-
}),
|
|
21940
|
-
flatSelect(ungrouped, "— custom / ungrouped model —"),
|
|
21941
|
-
customSelected && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
21942
|
-
className: "text-[10px] text-foreground-subtle",
|
|
21943
|
-
children: "A custom model is pinned — the catalog selection is hidden while it is active."
|
|
21944
|
-
})
|
|
21945
|
-
]
|
|
21946
|
-
});
|
|
21947
21939
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
21948
21940
|
className: "space-y-3",
|
|
21949
21941
|
children: [
|
|
21950
21942
|
unresolvedBanner,
|
|
21951
|
-
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
21952
|
-
|
|
21943
|
+
presentProviders.length > 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
21944
|
+
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
21945
|
+
children: "Provider"
|
|
21946
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
21947
|
+
className: "flex flex-wrap gap-1.5",
|
|
21948
|
+
children: presentProviders.map((id) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
21949
|
+
type: "button",
|
|
21950
|
+
disabled,
|
|
21951
|
+
onClick: () => setProvider(id),
|
|
21952
|
+
className: cn("rounded-full px-3 py-1 text-[11px] font-medium border transition-colors", id === provider ? "border-primary bg-primary/10 text-primary" : "border-border bg-background text-foreground-subtle hover:text-foreground hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
21953
|
+
children: PROVIDER_LABEL[id]
|
|
21954
|
+
}, id))
|
|
21955
|
+
})] }),
|
|
21956
|
+
grouped.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GroupedModelSelector, {
|
|
21957
|
+
catalog: grouped,
|
|
21953
21958
|
value,
|
|
21954
21959
|
onChange,
|
|
21955
21960
|
disabled
|
|
21956
21961
|
}),
|
|
21957
|
-
ungrouped.length > 0 &&
|
|
21958
|
-
className: "flex justify-end",
|
|
21959
|
-
children: switchButton("Use a custom model…", "custom")
|
|
21960
|
-
})
|
|
21962
|
+
ungrouped.length > 0 && flatSelect(ungrouped, grouped.length > 0 ? "— other models —" : "— select a model —")
|
|
21961
21963
|
]
|
|
21962
21964
|
});
|
|
21963
21965
|
}
|
|
@@ -24259,6 +24261,49 @@ function nextReconnectAction(attempt, random = Math.random) {
|
|
|
24259
24261
|
};
|
|
24260
24262
|
}
|
|
24261
24263
|
//#endregion
|
|
24264
|
+
//#region src/composites/adaptive-downlink.ts
|
|
24265
|
+
/**
|
|
24266
|
+
* Burst-download the hub's `/adaptive-probe` blob and return Mbps.
|
|
24267
|
+
* Used as `hints.downlinkMbps` so adaptive selection is based on a measured
|
|
24268
|
+
* path, not viewport size or IP class. Failures return null (caller keeps
|
|
24269
|
+
* the default-low / ceiling path and may stay on the lowest rung).
|
|
24270
|
+
*/
|
|
24271
|
+
var ADAPTIVE_PROBE_PATH = "/adaptive-probe";
|
|
24272
|
+
var ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
|
|
24273
|
+
/** Map a measured downlink onto the adaptive ladder. Mid is a real rung. */
|
|
24274
|
+
function suggestedAdaptiveTier(mbps) {
|
|
24275
|
+
if (mbps >= 8) return "high";
|
|
24276
|
+
if (mbps >= 2.5) return "mid";
|
|
24277
|
+
return "low";
|
|
24278
|
+
}
|
|
24279
|
+
/** First connect never carries a cached probe — the broker starts lowest. */
|
|
24280
|
+
function stripDownlinkForColdStart(hints) {
|
|
24281
|
+
const { downlinkMbps: _ignored, ...rest } = hints;
|
|
24282
|
+
return rest;
|
|
24283
|
+
}
|
|
24284
|
+
/** After a probe, only mid/high justify a make-before-break climb. */
|
|
24285
|
+
function shouldUpgradeAfterProbe(mbps) {
|
|
24286
|
+
return suggestedAdaptiveTier(mbps) !== "low";
|
|
24287
|
+
}
|
|
24288
|
+
async function measureDownlinkMbps(origin, deps) {
|
|
24289
|
+
const base = origin.replace(/\/+$/, "");
|
|
24290
|
+
const ctrl = new AbortController();
|
|
24291
|
+
const timer = setTimeout(() => ctrl.abort(), ADAPTIVE_PROBE_TIMEOUT_MS);
|
|
24292
|
+
const started = deps.now();
|
|
24293
|
+
try {
|
|
24294
|
+
const res = await deps.fetchImpl(`${base}${ADAPTIVE_PROBE_PATH}`, { signal: ctrl.signal });
|
|
24295
|
+
if (!res.ok) return null;
|
|
24296
|
+
const buf = await res.arrayBuffer();
|
|
24297
|
+
const elapsedMs = Math.max(1, deps.now() - started);
|
|
24298
|
+
if (buf.byteLength < 1024) return null;
|
|
24299
|
+
return buf.byteLength * 8 / elapsedMs / 1e3;
|
|
24300
|
+
} catch {
|
|
24301
|
+
return null;
|
|
24302
|
+
} finally {
|
|
24303
|
+
clearTimeout(timer);
|
|
24304
|
+
}
|
|
24305
|
+
}
|
|
24306
|
+
//#endregion
|
|
24262
24307
|
//#region src/composites/camera-stream-player.tsx
|
|
24263
24308
|
/**
|
|
24264
24309
|
* Silence (or restore) a live WebRTC stream FOR REAL.
|
|
@@ -24304,23 +24349,48 @@ function isCanvasEffectivelyBlack(ctx, w, h) {
|
|
|
24304
24349
|
function computeClientHints(container) {
|
|
24305
24350
|
const hints = {};
|
|
24306
24351
|
if (typeof window !== "undefined") {
|
|
24352
|
+
const dpr = window.devicePixelRatio || 1;
|
|
24307
24353
|
if (container) {
|
|
24308
24354
|
const rect = container.getBoundingClientRect();
|
|
24309
24355
|
if (rect.width > 0 && rect.height > 0) {
|
|
24310
|
-
hints.viewportWidth = Math.round(rect.width);
|
|
24311
|
-
hints.viewportHeight = Math.round(rect.height);
|
|
24356
|
+
hints.viewportWidth = Math.round(rect.width * dpr);
|
|
24357
|
+
hints.viewportHeight = Math.round(rect.height * dpr);
|
|
24312
24358
|
}
|
|
24313
24359
|
}
|
|
24314
24360
|
if (hints.viewportWidth === void 0) {
|
|
24315
|
-
hints.viewportWidth = window.innerWidth;
|
|
24316
|
-
hints.viewportHeight = window.innerHeight;
|
|
24361
|
+
hints.viewportWidth = Math.round(window.innerWidth * dpr);
|
|
24362
|
+
hints.viewportHeight = Math.round(window.innerHeight * dpr);
|
|
24317
24363
|
}
|
|
24318
|
-
hints.devicePixelRatio =
|
|
24319
|
-
const conn = navigator.connection;
|
|
24320
|
-
if (conn?.downlink && conn.downlink > 0) hints.downlinkMbps = conn.downlink;
|
|
24364
|
+
hints.devicePixelRatio = dpr;
|
|
24321
24365
|
}
|
|
24322
24366
|
return hints;
|
|
24323
24367
|
}
|
|
24368
|
+
var downlinkCache = null;
|
|
24369
|
+
var DOWNLINK_TTL_MS = 3e4;
|
|
24370
|
+
async function measuredDownlinkMbps() {
|
|
24371
|
+
if (typeof window === "undefined") return void 0;
|
|
24372
|
+
const origin = window.location.origin;
|
|
24373
|
+
if (downlinkCache && downlinkCache.origin === origin && Date.now() - downlinkCache.at < DOWNLINK_TTL_MS) return downlinkCache.mbps;
|
|
24374
|
+
const mbps = await measureDownlinkMbps(origin, {
|
|
24375
|
+
fetchImpl: (url, init) => fetch(url, init),
|
|
24376
|
+
now: () => Date.now()
|
|
24377
|
+
});
|
|
24378
|
+
if (mbps === null || !Number.isFinite(mbps)) return void 0;
|
|
24379
|
+
downlinkCache = {
|
|
24380
|
+
origin,
|
|
24381
|
+
mbps,
|
|
24382
|
+
at: Date.now()
|
|
24383
|
+
};
|
|
24384
|
+
return mbps;
|
|
24385
|
+
}
|
|
24386
|
+
function mergePlayerHints(autoHints, override, downlinkMbps, coldStart) {
|
|
24387
|
+
const merged = {
|
|
24388
|
+
...autoHints,
|
|
24389
|
+
...downlinkMbps !== void 0 ? { downlinkMbps } : {},
|
|
24390
|
+
...override
|
|
24391
|
+
};
|
|
24392
|
+
return coldStart ? stripDownlinkForColdStart(merged) : merged;
|
|
24393
|
+
}
|
|
24324
24394
|
var FIRST_FRAME_TIMEOUT_MS = 8e3;
|
|
24325
24395
|
function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, onVideoElement }) {
|
|
24326
24396
|
const videoRef = (0, react$1.useRef)(null);
|
|
@@ -24353,6 +24423,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24353
24423
|
/** Highest `pendingRenegotiation.epoch` already acted on — act at most once
|
|
24354
24424
|
* per epoch so a poll that re-reports the same pending change is a no-op. */
|
|
24355
24425
|
const lastEpochRef = (0, react$1.useRef)(0);
|
|
24426
|
+
/** True once this adaptive session already climbed after the cold-start probe. */
|
|
24427
|
+
const probeUpgradeRef = (0, react$1.useRef)(false);
|
|
24356
24428
|
/** True while a background re-offer PeerConnection is being built — guards
|
|
24357
24429
|
* against a second poll firing a parallel renegotiation. */
|
|
24358
24430
|
const renegotiatingRef = (0, react$1.useRef)(false);
|
|
@@ -24466,7 +24538,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24466
24538
|
tick();
|
|
24467
24539
|
}, SESSION_STATE_POLL_MS);
|
|
24468
24540
|
}, [getSessionState, reoffer]);
|
|
24469
|
-
const connectServerOffer = (0, react$1.useCallback)(async (seamless = false) => {
|
|
24541
|
+
const connectServerOffer = (0, react$1.useCallback)(async (seamless = false, withDownlink = seamless) => {
|
|
24470
24542
|
if (!mountedRef.current || !createSession || !sendAnswer) return;
|
|
24471
24543
|
const oldPc = seamless ? pcRef.current : null;
|
|
24472
24544
|
const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
|
|
@@ -24476,11 +24548,16 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24476
24548
|
const abort = new AbortController();
|
|
24477
24549
|
connectAbortRef.current = abort;
|
|
24478
24550
|
try {
|
|
24479
|
-
const
|
|
24480
|
-
|
|
24481
|
-
...hintsOverride
|
|
24482
|
-
});
|
|
24551
|
+
const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
|
|
24552
|
+
const { sessionId, sdpOffer, iceServers } = await createSession(mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, withDownlink ? await measuredDownlinkMbps() : void 0, !withDownlink));
|
|
24483
24553
|
sessionIdsRef.current.add(sessionId);
|
|
24554
|
+
if (probePromise !== void 0) probePromise.then((mbps) => {
|
|
24555
|
+
if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
|
|
24556
|
+
if (!mountedRef.current || abort.signal.aborted) return;
|
|
24557
|
+
if (probeUpgradeRef.current) return;
|
|
24558
|
+
probeUpgradeRef.current = true;
|
|
24559
|
+
connectServerOffer(true, true);
|
|
24560
|
+
});
|
|
24484
24561
|
if (!mountedRef.current || abort.signal.aborted) {
|
|
24485
24562
|
closeSession?.(sessionId).catch(() => {});
|
|
24486
24563
|
sessionIdsRef.current.delete(sessionId);
|
|
@@ -24650,7 +24727,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24650
24727
|
updateState,
|
|
24651
24728
|
onError
|
|
24652
24729
|
]);
|
|
24653
|
-
const connectClientOffer = (0, react$1.useCallback)(async (seamless = false) => {
|
|
24730
|
+
const connectClientOffer = (0, react$1.useCallback)(async (seamless = false, withDownlink = seamless) => {
|
|
24654
24731
|
if (!mountedRef.current || !handleOffer) return;
|
|
24655
24732
|
const oldPc = seamless ? pcRef.current : null;
|
|
24656
24733
|
const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
|
|
@@ -24663,6 +24740,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24663
24740
|
const ms = () => Math.round(performance.now() - t0);
|
|
24664
24741
|
const timing = {};
|
|
24665
24742
|
try {
|
|
24743
|
+
const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
|
|
24666
24744
|
const iceServers = await getIceServers?.();
|
|
24667
24745
|
timing.iceServersMs = ms();
|
|
24668
24746
|
if (!mountedRef.current || abort.signal.aborted) return;
|
|
@@ -24770,15 +24848,20 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24770
24848
|
await pc.setLocalDescription(offer);
|
|
24771
24849
|
timing.localSetMs = ms();
|
|
24772
24850
|
if (!mountedRef.current || abort.signal.aborted) return;
|
|
24773
|
-
const
|
|
24774
|
-
|
|
24775
|
-
...hintsOverride
|
|
24776
|
-
};
|
|
24851
|
+
const downlinkMbps = withDownlink ? await measuredDownlinkMbps() : void 0;
|
|
24852
|
+
const clientOfferHints = mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, downlinkMbps, !withDownlink);
|
|
24777
24853
|
const signalingStart = ms();
|
|
24778
24854
|
const { sessionId: sid, sdpAnswer } = await handleOffer(pc.localDescription?.sdp ?? offer.sdp ?? "", void 0, clientOfferHints);
|
|
24779
24855
|
timing.signalingRttMs = ms() - signalingStart;
|
|
24780
24856
|
sessionId = sid;
|
|
24781
24857
|
sessionIdsRef.current.add(sid);
|
|
24858
|
+
if (probePromise !== void 0) probePromise.then((mbps) => {
|
|
24859
|
+
if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
|
|
24860
|
+
if (!mountedRef.current || abort.signal.aborted) return;
|
|
24861
|
+
if (probeUpgradeRef.current) return;
|
|
24862
|
+
probeUpgradeRef.current = true;
|
|
24863
|
+
connectClientOffer(true, true);
|
|
24864
|
+
});
|
|
24782
24865
|
activeSessionIdRef.current = sid;
|
|
24783
24866
|
if (!mountedRef.current || abort.signal.aborted) {
|
|
24784
24867
|
closeSession?.(sid).catch(() => {});
|
|
@@ -24944,8 +25027,10 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24944
25027
|
pc.close();
|
|
24945
25028
|
return;
|
|
24946
25029
|
}
|
|
25030
|
+
const downlinkMbps = await measuredDownlinkMbps();
|
|
24947
25031
|
const reofferHints = {
|
|
24948
25032
|
...computeClientHints(containerRef.current),
|
|
25033
|
+
...downlinkMbps !== void 0 ? { downlinkMbps } : {},
|
|
24949
25034
|
...hintsOverride
|
|
24950
25035
|
};
|
|
24951
25036
|
const { sessionId: sid, sdpAnswer } = await reofferFn(sessionId, pc.localDescription?.sdp ?? offer.sdp ?? "", target, reofferHints);
|
|
@@ -25087,6 +25172,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
25087
25172
|
if (!serverChanged && !keyChanged) return;
|
|
25088
25173
|
if (!mountedRef.current) return;
|
|
25089
25174
|
reconnectAttemptsRef.current = 0;
|
|
25175
|
+
probeUpgradeRef.current = false;
|
|
25090
25176
|
if (serverChanged) {
|
|
25091
25177
|
cleanup();
|
|
25092
25178
|
connect();
|
|
@@ -49483,12 +49569,14 @@ exports.useLocalNetworkGetConnectionEndpoints = useLocalNetworkGetConnectionEndp
|
|
|
49483
49569
|
exports.useLocalNetworkGetNotificationEndpoint = useLocalNetworkGetNotificationEndpoint;
|
|
49484
49570
|
exports.useLocalNetworkGetPreferred = useLocalNetworkGetPreferred;
|
|
49485
49571
|
exports.useLocalNetworkGetTlsStatus = useLocalNetworkGetTlsStatus;
|
|
49572
|
+
exports.useLocalNetworkGetViewerEndpoints = useLocalNetworkGetViewerEndpoints;
|
|
49486
49573
|
exports.useLocalNetworkList = useLocalNetworkList;
|
|
49487
49574
|
exports.useLocalNetworkRegenerateCertificate = useLocalNetworkRegenerateCertificate;
|
|
49488
49575
|
exports.useLocalNetworkResetAllowlistToBestMatch = useLocalNetworkResetAllowlistToBestMatch;
|
|
49489
49576
|
exports.useLocalNetworkRevertToGeneratedCertificate = useLocalNetworkRevertToGeneratedCertificate;
|
|
49490
49577
|
exports.useLocalNetworkSetAllowedAddresses = useLocalNetworkSetAllowedAddresses;
|
|
49491
49578
|
exports.useLocalNetworkSetNotificationEndpoint = useLocalNetworkSetNotificationEndpoint;
|
|
49579
|
+
exports.useLocalNetworkSetViewerEndpoints = useLocalNetworkSetViewerEndpoints;
|
|
49492
49580
|
exports.useLocalNetworkUploadCertificate = useLocalNetworkUploadCertificate;
|
|
49493
49581
|
exports.useLockControlGetStatus = useLockControlGetStatus;
|
|
49494
49582
|
exports.useLockControlLock = useLockControlLock;
|
|
@@ -49637,6 +49725,7 @@ exports.usePipelineAnalyticsGetDeviceSettingsContribution = usePipelineAnalytics
|
|
|
49637
49725
|
exports.usePipelineAnalyticsGetEventDensity = usePipelineAnalyticsGetEventDensity;
|
|
49638
49726
|
exports.usePipelineAnalyticsGetEventMedia = usePipelineAnalyticsGetEventMedia;
|
|
49639
49727
|
exports.usePipelineAnalyticsGetEventStoreFootprint = usePipelineAnalyticsGetEventStoreFootprint;
|
|
49728
|
+
exports.usePipelineAnalyticsGetGroup = usePipelineAnalyticsGetGroup;
|
|
49640
49729
|
exports.usePipelineAnalyticsGetKeyEvents = usePipelineAnalyticsGetKeyEvents;
|
|
49641
49730
|
exports.usePipelineAnalyticsGetMotionEvents = usePipelineAnalyticsGetMotionEvents;
|
|
49642
49731
|
exports.usePipelineAnalyticsGetObjectEmbeddingRebuildStatus = usePipelineAnalyticsGetObjectEmbeddingRebuildStatus;
|
|
@@ -49651,6 +49740,7 @@ exports.usePipelineAnalyticsGetTrainingExportSummary = usePipelineAnalyticsGetTr
|
|
|
49651
49740
|
exports.usePipelineAnalyticsGetTrainingExportUrl = usePipelineAnalyticsGetTrainingExportUrl;
|
|
49652
49741
|
exports.usePipelineAnalyticsListEventKinds = usePipelineAnalyticsListEventKinds;
|
|
49653
49742
|
exports.usePipelineAnalyticsListEventKindsBatch = usePipelineAnalyticsListEventKindsBatch;
|
|
49743
|
+
exports.usePipelineAnalyticsListGroups = usePipelineAnalyticsListGroups;
|
|
49654
49744
|
exports.usePipelineAnalyticsListOpsLog = usePipelineAnalyticsListOpsLog;
|
|
49655
49745
|
exports.usePipelineAnalyticsListRecentTracks = usePipelineAnalyticsListRecentTracks;
|
|
49656
49746
|
exports.usePipelineAnalyticsListRetrainAnnotations = usePipelineAnalyticsListRetrainAnnotations;
|
package/dist/index.js
CHANGED
|
@@ -13,7 +13,7 @@ import * as __mfHostReactDOMClient from "react-dom/client";
|
|
|
13
13
|
import { createRoot } from "react-dom/client";
|
|
14
14
|
import * as __mfHostTrpcClient from "@trpc/client";
|
|
15
15
|
import { createTRPCClient, createWSClient, httpLink, splitLink, wsLink } from "@trpc/client";
|
|
16
|
-
import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, clusterStepSettingFieldsFor, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveRecordingProfiles, resolveVariantModelId, resolveViewableDeviceIds, selectAssignedProfileSlots, tryConvertUnit } from "@camstack/types";
|
|
16
|
+
import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, MODEL_PROVIDER_IDS, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, clusterStepSettingFieldsFor, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveRecordingProfiles, resolveVariantModelId, resolveViewableDeviceIds, selectAssignedProfileSlots, tryConvertUnit } from "@camstack/types";
|
|
17
17
|
import { createSystem } from "@camstack/sdk";
|
|
18
18
|
import { z } from "zod";
|
|
19
19
|
//#region node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.js
|
|
@@ -5671,6 +5671,10 @@ var useLocalNetworkGetConnectionEndpoints = trpc.localNetwork.getConnectionEndpo
|
|
|
5671
5671
|
var useLocalNetworkGetNotificationEndpoint = trpc.localNetwork.getNotificationEndpoint.useQuery;
|
|
5672
5672
|
/** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
|
|
5673
5673
|
var useLocalNetworkSetNotificationEndpoint = trpc.localNetwork.setNotificationEndpoint.useMutation;
|
|
5674
|
+
/** Generated alias around `trpc.localNetwork.getViewerEndpoints.useQuery`. */
|
|
5675
|
+
var useLocalNetworkGetViewerEndpoints = trpc.localNetwork.getViewerEndpoints.useQuery;
|
|
5676
|
+
/** Generated alias around `trpc.localNetwork.setViewerEndpoints.useMutation`. */
|
|
5677
|
+
var useLocalNetworkSetViewerEndpoints = trpc.localNetwork.setViewerEndpoints.useMutation;
|
|
5674
5678
|
/** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
|
|
5675
5679
|
var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.useQuery;
|
|
5676
5680
|
/** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
|
|
@@ -5953,6 +5957,10 @@ var usePipelineAnalyticsGetTrack = trpc.pipelineAnalytics.getTrack.useQuery;
|
|
|
5953
5957
|
var usePipelineAnalyticsListTracks = trpc.pipelineAnalytics.listTracks.useQuery;
|
|
5954
5958
|
/** Generated alias around `trpc.pipelineAnalytics.listRecentTracks.useQuery`. */
|
|
5955
5959
|
var usePipelineAnalyticsListRecentTracks = trpc.pipelineAnalytics.listRecentTracks.useQuery;
|
|
5960
|
+
/** Generated alias around `trpc.pipelineAnalytics.listGroups.useQuery`. */
|
|
5961
|
+
var usePipelineAnalyticsListGroups = trpc.pipelineAnalytics.listGroups.useQuery;
|
|
5962
|
+
/** Generated alias around `trpc.pipelineAnalytics.getGroup.useQuery`. */
|
|
5963
|
+
var usePipelineAnalyticsGetGroup = trpc.pipelineAnalytics.getGroup.useQuery;
|
|
5956
5964
|
/** Generated alias around `trpc.pipelineAnalytics.clearTracks.useMutation`. */
|
|
5957
5965
|
var usePipelineAnalyticsClearTracks = trpc.pipelineAnalytics.clearTracks.useMutation;
|
|
5958
5966
|
/** Generated alias around `trpc.pipelineAnalytics.getMotionEvents.useQuery`. */
|
|
@@ -21837,35 +21845,45 @@ function GroupedModelSelector({ catalog, value, onChange, disabled }) {
|
|
|
21837
21845
|
}
|
|
21838
21846
|
//#endregion
|
|
21839
21847
|
//#region src/composites/model-picker.tsx
|
|
21848
|
+
var PROVIDER_LABEL = {
|
|
21849
|
+
camstack: "CamStack",
|
|
21850
|
+
frigate: "Frigate",
|
|
21851
|
+
scrypted: "Scrypted",
|
|
21852
|
+
custom: "Custom"
|
|
21853
|
+
};
|
|
21854
|
+
function providerOf(model) {
|
|
21855
|
+
return model.provider ?? "camstack";
|
|
21856
|
+
}
|
|
21840
21857
|
/**
|
|
21841
21858
|
* Shared model picker — the ONE model-selection control across the app.
|
|
21842
21859
|
*
|
|
21843
|
-
*
|
|
21844
|
-
*
|
|
21845
|
-
*
|
|
21846
|
-
*
|
|
21847
|
-
*
|
|
21848
|
-
*
|
|
21849
|
-
* views. A pinned custom model hides the grouped catalog entirely (both used
|
|
21850
|
-
* to render, and the grouped picker highlighted a family that was NOT the
|
|
21851
|
-
* selection); while a catalog model is pinned the custom list stays behind an
|
|
21852
|
-
* explicit affordance. A legacy/removed pin is surfaced with an explicit
|
|
21853
|
-
* banner rather than a silently mis-highlighted chip.
|
|
21854
|
-
*
|
|
21855
|
-
* Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
|
|
21856
|
-
* (`AgentStepEditor`), and the benchmark — so the picker looks identical
|
|
21857
|
-
* everywhere. `value === ''` renders nothing selected (callers that support an
|
|
21858
|
-
* "Auto / node default" mode own that affordance and hide this picker while it
|
|
21859
|
-
* is active).
|
|
21860
|
+
* Provider first (CamStack / Frigate / Scrypted / Custom), then inside that
|
|
21861
|
+
* catalog the grouped Family→Tier→Variant selector when entries declare
|
|
21862
|
+
* `group`, else a flat `<select>`. The persisted value stays the flat model
|
|
21863
|
+
* id. `value === ''` renders nothing selected (callers that support an
|
|
21864
|
+
* "Auto / node default" mode own that affordance and hide this picker while
|
|
21865
|
+
* it is active).
|
|
21860
21866
|
*/
|
|
21861
21867
|
function ModelPicker({ models, value, onChange, disabled }) {
|
|
21862
|
-
const
|
|
21863
|
-
|
|
21864
|
-
|
|
21865
|
-
|
|
21868
|
+
const byProvider = useMemo(() => {
|
|
21869
|
+
const map = /* @__PURE__ */ new Map();
|
|
21870
|
+
for (const m of models) {
|
|
21871
|
+
const provider = providerOf(m);
|
|
21872
|
+
const list = map.get(provider);
|
|
21873
|
+
if (list) list.push(m);
|
|
21874
|
+
else map.set(provider, [m]);
|
|
21875
|
+
}
|
|
21876
|
+
return map;
|
|
21877
|
+
}, [models]);
|
|
21878
|
+
const presentProviders = useMemo(() => MODEL_PROVIDER_IDS.filter((id) => (byProvider.get(id)?.length ?? 0) > 0), [byProvider]);
|
|
21879
|
+
const defaultProvider = useMemo(() => {
|
|
21880
|
+
const pinned = models.find((m) => m.id === value);
|
|
21881
|
+
return pinned ? providerOf(pinned) : void 0;
|
|
21882
|
+
}, [models, value]) ?? (presentProviders.includes("camstack") ? "camstack" : presentProviders[0] ?? "camstack");
|
|
21883
|
+
const [provider, setProvider] = useState(defaultProvider);
|
|
21866
21884
|
useEffect(() => {
|
|
21867
|
-
|
|
21868
|
-
}, [
|
|
21885
|
+
setProvider(defaultProvider);
|
|
21886
|
+
}, [defaultProvider]);
|
|
21869
21887
|
const unresolvedBanner = value !== "" && !models.some((m) => m.id === value) && /* @__PURE__ */ jsxs("div", {
|
|
21870
21888
|
className: "rounded border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-300",
|
|
21871
21889
|
children: [
|
|
@@ -21877,6 +21895,9 @@ function ModelPicker({ models, value, onChange, disabled }) {
|
|
|
21877
21895
|
") is a legacy/removed model — no longer offered below. Pick a replacement to change it; Save persists whatever is selected here."
|
|
21878
21896
|
]
|
|
21879
21897
|
});
|
|
21898
|
+
const scoped = byProvider.get(provider) ?? [];
|
|
21899
|
+
const grouped = scoped.filter((m) => m.group !== void 0);
|
|
21900
|
+
const ungrouped = scoped.filter((m) => m.group === void 0);
|
|
21880
21901
|
const flatSelect = (opts, selectPlaceholder) => /* @__PURE__ */ jsxs("select", {
|
|
21881
21902
|
disabled,
|
|
21882
21903
|
className: "w-full bg-surface border border-border rounded px-2 py-1 text-xs disabled:opacity-50",
|
|
@@ -21891,49 +21912,30 @@ function ModelPicker({ models, value, onChange, disabled }) {
|
|
|
21891
21912
|
children: m.name
|
|
21892
21913
|
}, m.id))]
|
|
21893
21914
|
});
|
|
21894
|
-
const switchButton = (label, target) => /* @__PURE__ */ jsx("button", {
|
|
21895
|
-
type: "button",
|
|
21896
|
-
disabled,
|
|
21897
|
-
onClick: () => setView(target),
|
|
21898
|
-
className: "text-[10px] text-primary hover:underline disabled:opacity-50",
|
|
21899
|
-
children: label
|
|
21900
|
-
});
|
|
21901
|
-
if (!hasGroups) return /* @__PURE__ */ jsxs("div", {
|
|
21902
|
-
className: "space-y-2",
|
|
21903
|
-
children: [unresolvedBanner, flatSelect(models, "— select a model —")]
|
|
21904
|
-
});
|
|
21905
|
-
if (view === "custom" && ungrouped.length > 0) return /* @__PURE__ */ jsxs("div", {
|
|
21906
|
-
className: "space-y-2",
|
|
21907
|
-
children: [
|
|
21908
|
-
unresolvedBanner,
|
|
21909
|
-
/* @__PURE__ */ jsxs("div", {
|
|
21910
|
-
className: "flex items-center justify-between",
|
|
21911
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
21912
|
-
className: "text-[10px] uppercase tracking-widest text-foreground-subtle",
|
|
21913
|
-
children: "Custom / ungrouped model"
|
|
21914
|
-
}), switchButton("Choose from catalog instead", "catalog")]
|
|
21915
|
-
}),
|
|
21916
|
-
flatSelect(ungrouped, "— custom / ungrouped model —"),
|
|
21917
|
-
customSelected && /* @__PURE__ */ jsx("div", {
|
|
21918
|
-
className: "text-[10px] text-foreground-subtle",
|
|
21919
|
-
children: "A custom model is pinned — the catalog selection is hidden while it is active."
|
|
21920
|
-
})
|
|
21921
|
-
]
|
|
21922
|
-
});
|
|
21923
21915
|
return /* @__PURE__ */ jsxs("div", {
|
|
21924
21916
|
className: "space-y-3",
|
|
21925
21917
|
children: [
|
|
21926
21918
|
unresolvedBanner,
|
|
21927
|
-
/* @__PURE__ */ jsx(
|
|
21928
|
-
|
|
21919
|
+
presentProviders.length > 1 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
21920
|
+
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
21921
|
+
children: "Provider"
|
|
21922
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
21923
|
+
className: "flex flex-wrap gap-1.5",
|
|
21924
|
+
children: presentProviders.map((id) => /* @__PURE__ */ jsx("button", {
|
|
21925
|
+
type: "button",
|
|
21926
|
+
disabled,
|
|
21927
|
+
onClick: () => setProvider(id),
|
|
21928
|
+
className: cn("rounded-full px-3 py-1 text-[11px] font-medium border transition-colors", id === provider ? "border-primary bg-primary/10 text-primary" : "border-border bg-background text-foreground-subtle hover:text-foreground hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
21929
|
+
children: PROVIDER_LABEL[id]
|
|
21930
|
+
}, id))
|
|
21931
|
+
})] }),
|
|
21932
|
+
grouped.length > 0 && /* @__PURE__ */ jsx(GroupedModelSelector, {
|
|
21933
|
+
catalog: grouped,
|
|
21929
21934
|
value,
|
|
21930
21935
|
onChange,
|
|
21931
21936
|
disabled
|
|
21932
21937
|
}),
|
|
21933
|
-
ungrouped.length > 0 &&
|
|
21934
|
-
className: "flex justify-end",
|
|
21935
|
-
children: switchButton("Use a custom model…", "custom")
|
|
21936
|
-
})
|
|
21938
|
+
ungrouped.length > 0 && flatSelect(ungrouped, grouped.length > 0 ? "— other models —" : "— select a model —")
|
|
21937
21939
|
]
|
|
21938
21940
|
});
|
|
21939
21941
|
}
|
|
@@ -24235,6 +24237,49 @@ function nextReconnectAction(attempt, random = Math.random) {
|
|
|
24235
24237
|
};
|
|
24236
24238
|
}
|
|
24237
24239
|
//#endregion
|
|
24240
|
+
//#region src/composites/adaptive-downlink.ts
|
|
24241
|
+
/**
|
|
24242
|
+
* Burst-download the hub's `/adaptive-probe` blob and return Mbps.
|
|
24243
|
+
* Used as `hints.downlinkMbps` so adaptive selection is based on a measured
|
|
24244
|
+
* path, not viewport size or IP class. Failures return null (caller keeps
|
|
24245
|
+
* the default-low / ceiling path and may stay on the lowest rung).
|
|
24246
|
+
*/
|
|
24247
|
+
var ADAPTIVE_PROBE_PATH = "/adaptive-probe";
|
|
24248
|
+
var ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
|
|
24249
|
+
/** Map a measured downlink onto the adaptive ladder. Mid is a real rung. */
|
|
24250
|
+
function suggestedAdaptiveTier(mbps) {
|
|
24251
|
+
if (mbps >= 8) return "high";
|
|
24252
|
+
if (mbps >= 2.5) return "mid";
|
|
24253
|
+
return "low";
|
|
24254
|
+
}
|
|
24255
|
+
/** First connect never carries a cached probe — the broker starts lowest. */
|
|
24256
|
+
function stripDownlinkForColdStart(hints) {
|
|
24257
|
+
const { downlinkMbps: _ignored, ...rest } = hints;
|
|
24258
|
+
return rest;
|
|
24259
|
+
}
|
|
24260
|
+
/** After a probe, only mid/high justify a make-before-break climb. */
|
|
24261
|
+
function shouldUpgradeAfterProbe(mbps) {
|
|
24262
|
+
return suggestedAdaptiveTier(mbps) !== "low";
|
|
24263
|
+
}
|
|
24264
|
+
async function measureDownlinkMbps(origin, deps) {
|
|
24265
|
+
const base = origin.replace(/\/+$/, "");
|
|
24266
|
+
const ctrl = new AbortController();
|
|
24267
|
+
const timer = setTimeout(() => ctrl.abort(), ADAPTIVE_PROBE_TIMEOUT_MS);
|
|
24268
|
+
const started = deps.now();
|
|
24269
|
+
try {
|
|
24270
|
+
const res = await deps.fetchImpl(`${base}${ADAPTIVE_PROBE_PATH}`, { signal: ctrl.signal });
|
|
24271
|
+
if (!res.ok) return null;
|
|
24272
|
+
const buf = await res.arrayBuffer();
|
|
24273
|
+
const elapsedMs = Math.max(1, deps.now() - started);
|
|
24274
|
+
if (buf.byteLength < 1024) return null;
|
|
24275
|
+
return buf.byteLength * 8 / elapsedMs / 1e3;
|
|
24276
|
+
} catch {
|
|
24277
|
+
return null;
|
|
24278
|
+
} finally {
|
|
24279
|
+
clearTimeout(timer);
|
|
24280
|
+
}
|
|
24281
|
+
}
|
|
24282
|
+
//#endregion
|
|
24238
24283
|
//#region src/composites/camera-stream-player.tsx
|
|
24239
24284
|
/**
|
|
24240
24285
|
* Silence (or restore) a live WebRTC stream FOR REAL.
|
|
@@ -24280,23 +24325,48 @@ function isCanvasEffectivelyBlack(ctx, w, h) {
|
|
|
24280
24325
|
function computeClientHints(container) {
|
|
24281
24326
|
const hints = {};
|
|
24282
24327
|
if (typeof window !== "undefined") {
|
|
24328
|
+
const dpr = window.devicePixelRatio || 1;
|
|
24283
24329
|
if (container) {
|
|
24284
24330
|
const rect = container.getBoundingClientRect();
|
|
24285
24331
|
if (rect.width > 0 && rect.height > 0) {
|
|
24286
|
-
hints.viewportWidth = Math.round(rect.width);
|
|
24287
|
-
hints.viewportHeight = Math.round(rect.height);
|
|
24332
|
+
hints.viewportWidth = Math.round(rect.width * dpr);
|
|
24333
|
+
hints.viewportHeight = Math.round(rect.height * dpr);
|
|
24288
24334
|
}
|
|
24289
24335
|
}
|
|
24290
24336
|
if (hints.viewportWidth === void 0) {
|
|
24291
|
-
hints.viewportWidth = window.innerWidth;
|
|
24292
|
-
hints.viewportHeight = window.innerHeight;
|
|
24337
|
+
hints.viewportWidth = Math.round(window.innerWidth * dpr);
|
|
24338
|
+
hints.viewportHeight = Math.round(window.innerHeight * dpr);
|
|
24293
24339
|
}
|
|
24294
|
-
hints.devicePixelRatio =
|
|
24295
|
-
const conn = navigator.connection;
|
|
24296
|
-
if (conn?.downlink && conn.downlink > 0) hints.downlinkMbps = conn.downlink;
|
|
24340
|
+
hints.devicePixelRatio = dpr;
|
|
24297
24341
|
}
|
|
24298
24342
|
return hints;
|
|
24299
24343
|
}
|
|
24344
|
+
var downlinkCache = null;
|
|
24345
|
+
var DOWNLINK_TTL_MS = 3e4;
|
|
24346
|
+
async function measuredDownlinkMbps() {
|
|
24347
|
+
if (typeof window === "undefined") return void 0;
|
|
24348
|
+
const origin = window.location.origin;
|
|
24349
|
+
if (downlinkCache && downlinkCache.origin === origin && Date.now() - downlinkCache.at < DOWNLINK_TTL_MS) return downlinkCache.mbps;
|
|
24350
|
+
const mbps = await measureDownlinkMbps(origin, {
|
|
24351
|
+
fetchImpl: (url, init) => fetch(url, init),
|
|
24352
|
+
now: () => Date.now()
|
|
24353
|
+
});
|
|
24354
|
+
if (mbps === null || !Number.isFinite(mbps)) return void 0;
|
|
24355
|
+
downlinkCache = {
|
|
24356
|
+
origin,
|
|
24357
|
+
mbps,
|
|
24358
|
+
at: Date.now()
|
|
24359
|
+
};
|
|
24360
|
+
return mbps;
|
|
24361
|
+
}
|
|
24362
|
+
function mergePlayerHints(autoHints, override, downlinkMbps, coldStart) {
|
|
24363
|
+
const merged = {
|
|
24364
|
+
...autoHints,
|
|
24365
|
+
...downlinkMbps !== void 0 ? { downlinkMbps } : {},
|
|
24366
|
+
...override
|
|
24367
|
+
};
|
|
24368
|
+
return coldStart ? stripDownlinkForColdStart(merged) : merged;
|
|
24369
|
+
}
|
|
24300
24370
|
var FIRST_FRAME_TIMEOUT_MS = 8e3;
|
|
24301
24371
|
function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, onVideoElement }) {
|
|
24302
24372
|
const videoRef = useRef(null);
|
|
@@ -24329,6 +24399,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24329
24399
|
/** Highest `pendingRenegotiation.epoch` already acted on — act at most once
|
|
24330
24400
|
* per epoch so a poll that re-reports the same pending change is a no-op. */
|
|
24331
24401
|
const lastEpochRef = useRef(0);
|
|
24402
|
+
/** True once this adaptive session already climbed after the cold-start probe. */
|
|
24403
|
+
const probeUpgradeRef = useRef(false);
|
|
24332
24404
|
/** True while a background re-offer PeerConnection is being built — guards
|
|
24333
24405
|
* against a second poll firing a parallel renegotiation. */
|
|
24334
24406
|
const renegotiatingRef = useRef(false);
|
|
@@ -24442,7 +24514,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24442
24514
|
tick();
|
|
24443
24515
|
}, SESSION_STATE_POLL_MS);
|
|
24444
24516
|
}, [getSessionState, reoffer]);
|
|
24445
|
-
const connectServerOffer = useCallback(async (seamless = false) => {
|
|
24517
|
+
const connectServerOffer = useCallback(async (seamless = false, withDownlink = seamless) => {
|
|
24446
24518
|
if (!mountedRef.current || !createSession || !sendAnswer) return;
|
|
24447
24519
|
const oldPc = seamless ? pcRef.current : null;
|
|
24448
24520
|
const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
|
|
@@ -24452,11 +24524,16 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24452
24524
|
const abort = new AbortController();
|
|
24453
24525
|
connectAbortRef.current = abort;
|
|
24454
24526
|
try {
|
|
24455
|
-
const
|
|
24456
|
-
|
|
24457
|
-
...hintsOverride
|
|
24458
|
-
});
|
|
24527
|
+
const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
|
|
24528
|
+
const { sessionId, sdpOffer, iceServers } = await createSession(mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, withDownlink ? await measuredDownlinkMbps() : void 0, !withDownlink));
|
|
24459
24529
|
sessionIdsRef.current.add(sessionId);
|
|
24530
|
+
if (probePromise !== void 0) probePromise.then((mbps) => {
|
|
24531
|
+
if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
|
|
24532
|
+
if (!mountedRef.current || abort.signal.aborted) return;
|
|
24533
|
+
if (probeUpgradeRef.current) return;
|
|
24534
|
+
probeUpgradeRef.current = true;
|
|
24535
|
+
connectServerOffer(true, true);
|
|
24536
|
+
});
|
|
24460
24537
|
if (!mountedRef.current || abort.signal.aborted) {
|
|
24461
24538
|
closeSession?.(sessionId).catch(() => {});
|
|
24462
24539
|
sessionIdsRef.current.delete(sessionId);
|
|
@@ -24626,7 +24703,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24626
24703
|
updateState,
|
|
24627
24704
|
onError
|
|
24628
24705
|
]);
|
|
24629
|
-
const connectClientOffer = useCallback(async (seamless = false) => {
|
|
24706
|
+
const connectClientOffer = useCallback(async (seamless = false, withDownlink = seamless) => {
|
|
24630
24707
|
if (!mountedRef.current || !handleOffer) return;
|
|
24631
24708
|
const oldPc = seamless ? pcRef.current : null;
|
|
24632
24709
|
const oldSessions = seamless ? new Set(sessionIdsRef.current) : null;
|
|
@@ -24639,6 +24716,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24639
24716
|
const ms = () => Math.round(performance.now() - t0);
|
|
24640
24717
|
const timing = {};
|
|
24641
24718
|
try {
|
|
24719
|
+
const probePromise = !withDownlink ? measuredDownlinkMbps() : void 0;
|
|
24642
24720
|
const iceServers = await getIceServers?.();
|
|
24643
24721
|
timing.iceServersMs = ms();
|
|
24644
24722
|
if (!mountedRef.current || abort.signal.aborted) return;
|
|
@@ -24746,15 +24824,20 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24746
24824
|
await pc.setLocalDescription(offer);
|
|
24747
24825
|
timing.localSetMs = ms();
|
|
24748
24826
|
if (!mountedRef.current || abort.signal.aborted) return;
|
|
24749
|
-
const
|
|
24750
|
-
|
|
24751
|
-
...hintsOverride
|
|
24752
|
-
};
|
|
24827
|
+
const downlinkMbps = withDownlink ? await measuredDownlinkMbps() : void 0;
|
|
24828
|
+
const clientOfferHints = mergePlayerHints(computeClientHints(containerRef.current), hintsOverride, downlinkMbps, !withDownlink);
|
|
24753
24829
|
const signalingStart = ms();
|
|
24754
24830
|
const { sessionId: sid, sdpAnswer } = await handleOffer(pc.localDescription?.sdp ?? offer.sdp ?? "", void 0, clientOfferHints);
|
|
24755
24831
|
timing.signalingRttMs = ms() - signalingStart;
|
|
24756
24832
|
sessionId = sid;
|
|
24757
24833
|
sessionIdsRef.current.add(sid);
|
|
24834
|
+
if (probePromise !== void 0) probePromise.then((mbps) => {
|
|
24835
|
+
if (mbps === void 0 || !shouldUpgradeAfterProbe(mbps)) return;
|
|
24836
|
+
if (!mountedRef.current || abort.signal.aborted) return;
|
|
24837
|
+
if (probeUpgradeRef.current) return;
|
|
24838
|
+
probeUpgradeRef.current = true;
|
|
24839
|
+
connectClientOffer(true, true);
|
|
24840
|
+
});
|
|
24758
24841
|
activeSessionIdRef.current = sid;
|
|
24759
24842
|
if (!mountedRef.current || abort.signal.aborted) {
|
|
24760
24843
|
closeSession?.(sid).catch(() => {});
|
|
@@ -24920,8 +25003,10 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
24920
25003
|
pc.close();
|
|
24921
25004
|
return;
|
|
24922
25005
|
}
|
|
25006
|
+
const downlinkMbps = await measuredDownlinkMbps();
|
|
24923
25007
|
const reofferHints = {
|
|
24924
25008
|
...computeClientHints(containerRef.current),
|
|
25009
|
+
...downlinkMbps !== void 0 ? { downlinkMbps } : {},
|
|
24925
25010
|
...hintsOverride
|
|
24926
25011
|
};
|
|
24927
25012
|
const { sessionId: sid, sdpAnswer } = await reofferFn(sessionId, pc.localDescription?.sdp ?? offer.sdp ?? "", target, reofferHints);
|
|
@@ -25063,6 +25148,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
25063
25148
|
if (!serverChanged && !keyChanged) return;
|
|
25064
25149
|
if (!mountedRef.current) return;
|
|
25065
25150
|
reconnectAttemptsRef.current = 0;
|
|
25151
|
+
probeUpgradeRef.current = false;
|
|
25066
25152
|
if (serverChanged) {
|
|
25067
25153
|
cleanup();
|
|
25068
25154
|
connect();
|
|
@@ -48668,4 +48754,4 @@ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-d_A4kO-M.js").t
|
|
|
48668
48754
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
48669
48755
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-DNSLc6ww.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
48670
48756
|
//#endregion
|
|
48671
|
-
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, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, 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, 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, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, 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, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, EyeOff as o, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, 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, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, 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, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, 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, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, 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, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, 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, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationPlan, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, 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, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
48757
|
+
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, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, 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, 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, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, 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, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, EyeOff as o, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, 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, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, 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, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, 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, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetGroup, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListGroups, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, 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, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationPlan, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, 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, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|