@camstack/ui-library 1.2.12 → 1.2.14
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/cap-settings/RecordingBandsEditor.d.ts +16 -0
- package/dist/composites/cap-settings/RecordingSettings.d.ts +5 -1
- package/dist/composites/cap-settings/index.d.ts +1 -1
- package/dist/composites/cap-settings/recording-config-form.d.ts +36 -20
- package/dist/generated/system-hooks.d.ts +24 -0
- package/dist/hooks/use-device-webrtc.d.ts +0 -7
- package/dist/index.cjs +412 -443
- package/dist/index.js +402 -445
- package/package.json +1 -1
- package/src/tailwind/camstack-theme.css +15 -0
- package/dist/composites/cap-settings/RecordingRulesEditor.d.ts +0 -7
- package/dist/composites/cap-settings/ScheduleBandsEditor.d.ts +0 -7
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as __mfHostReact from "react";
|
|
|
3
3
|
import React, { Fragment, Suspense, createContext, createElement, forwardRef, lazy, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
|
|
4
4
|
import * as __mfHostReactJsxRuntime from "react/jsx-runtime";
|
|
5
5
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { ALL_CAPABILITY_DEFINITIONS, DEFAULT_EVENT_COLOR,
|
|
6
|
+
import { ALL_CAPABILITY_DEFINITIONS, 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, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveVariantModelId, tryConvertUnit } from "@camstack/types";
|
|
7
7
|
import * as __mfHostReactDOM from "react-dom";
|
|
8
8
|
import { createPortal } from "react-dom";
|
|
9
9
|
import * as __mfHostReactDOMClient from "react-dom/client";
|
|
@@ -12620,7 +12620,7 @@ var buttonVariants = cva("inline-flex items-center justify-center rounded-md fon
|
|
|
12620
12620
|
secondary: "bg-surface text-foreground hover:bg-surface-hover",
|
|
12621
12621
|
ghost: "hover:bg-surface-hover text-foreground-muted",
|
|
12622
12622
|
danger: "bg-danger text-white hover:bg-danger/90",
|
|
12623
|
-
outline: "border border-border bg-transparent hover:bg-surface-hover"
|
|
12623
|
+
outline: "border border-border bg-transparent text-foreground hover:bg-surface-hover"
|
|
12624
12624
|
},
|
|
12625
12625
|
size: {
|
|
12626
12626
|
sm: "h-7 px-2.5 text-xs gap-1.5",
|
|
@@ -12925,7 +12925,7 @@ function DialogTrigger({ children, ...props }) {
|
|
|
12925
12925
|
* `w-full` (which would overflow/clip a centered dialog); the per-variant
|
|
12926
12926
|
* `max-w-*` keeps small dialogs small while the cap prevents overflow.
|
|
12927
12927
|
*/
|
|
12928
|
-
var contentVariants = cva("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 m-0 w-[calc(100vw-2rem)] bg-background-elevated border border-border rounded-lg p-4 backdrop:bg-black/50 backdrop:backdrop-blur-sm max-h-[calc(100dvh-2rem)] overflow-y-auto [&:not([open])]:hidden", {
|
|
12928
|
+
var contentVariants = cva("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 m-0 w-[calc(100vw-2rem)] bg-background-elevated text-foreground border border-border rounded-lg p-4 backdrop:bg-black/50 backdrop:backdrop-blur-sm max-h-[calc(100dvh-2rem)] overflow-y-auto [&:not([open])]:hidden", {
|
|
12929
12929
|
variants: {
|
|
12930
12930
|
width: {
|
|
12931
12931
|
sm: "max-w-sm",
|
|
@@ -18480,6 +18480,8 @@ var useDeviceManagerProviderDiscoveryParamsSchema = trpc.deviceManager.providerD
|
|
|
18480
18480
|
var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
|
|
18481
18481
|
/** Generated alias around `trpc.deviceManager.getDeviceStatusAggregate.useQuery`. */
|
|
18482
18482
|
var useDeviceManagerGetDeviceStatusAggregate = trpc.deviceManager.getDeviceStatusAggregate.useQuery;
|
|
18483
|
+
/** Generated alias around `trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery`. */
|
|
18484
|
+
var useDeviceManagerGetDeviceStatusAggregateBatch = trpc.deviceManager.getDeviceStatusAggregateBatch.useQuery;
|
|
18483
18485
|
/** Generated alias around `trpc.deviceManager.getDeviceSettingsContribution.useQuery`. */
|
|
18484
18486
|
var useDeviceManagerGetDeviceSettingsContribution = trpc.deviceManager.getDeviceSettingsContribution.useQuery;
|
|
18485
18487
|
/** Generated alias around `trpc.deviceManager.getDeviceLiveContribution.useQuery`. */
|
|
@@ -18704,6 +18706,10 @@ var useLocalNetworkList = trpc.localNetwork.list.useQuery;
|
|
|
18704
18706
|
var useLocalNetworkGetPreferred = trpc.localNetwork.getPreferred.useQuery;
|
|
18705
18707
|
/** Generated alias around `trpc.localNetwork.getConnectionEndpoints.useQuery`. */
|
|
18706
18708
|
var useLocalNetworkGetConnectionEndpoints = trpc.localNetwork.getConnectionEndpoints.useQuery;
|
|
18709
|
+
/** Generated alias around `trpc.localNetwork.getNotificationEndpoint.useQuery`. */
|
|
18710
|
+
var useLocalNetworkGetNotificationEndpoint = trpc.localNetwork.getNotificationEndpoint.useQuery;
|
|
18711
|
+
/** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
|
|
18712
|
+
var useLocalNetworkSetNotificationEndpoint = trpc.localNetwork.setNotificationEndpoint.useMutation;
|
|
18707
18713
|
/** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
|
|
18708
18714
|
var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.useQuery;
|
|
18709
18715
|
/** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
|
|
@@ -18976,6 +18982,12 @@ var usePipelineAnalyticsGetEventStoreFootprint = trpc.pipelineAnalytics.getEvent
|
|
|
18976
18982
|
var usePipelineAnalyticsPruneEvents = trpc.pipelineAnalytics.pruneEvents.useMutation;
|
|
18977
18983
|
/** Generated alias around `trpc.pipelineAnalytics.deleteDeviceEvents.useMutation`. */
|
|
18978
18984
|
var usePipelineAnalyticsDeleteDeviceEvents = trpc.pipelineAnalytics.deleteDeviceEvents.useMutation;
|
|
18985
|
+
/** Generated alias around `trpc.pipelineAnalytics.relocateMedia.useMutation`. */
|
|
18986
|
+
var usePipelineAnalyticsRelocateMedia = trpc.pipelineAnalytics.relocateMedia.useMutation;
|
|
18987
|
+
/** Generated alias around `trpc.pipelineAnalytics.getMediaRelocateStatus.useQuery`. */
|
|
18988
|
+
var usePipelineAnalyticsGetMediaRelocateStatus = trpc.pipelineAnalytics.getMediaRelocateStatus.useQuery;
|
|
18989
|
+
/** Generated alias around `trpc.pipelineAnalytics.cancelMediaRelocate.useMutation`. */
|
|
18990
|
+
var usePipelineAnalyticsCancelMediaRelocate = trpc.pipelineAnalytics.cancelMediaRelocate.useMutation;
|
|
18979
18991
|
/** Generated alias around `trpc.pipelineAnalytics.listOpsLog.useQuery`. */
|
|
18980
18992
|
var usePipelineAnalyticsListOpsLog = trpc.pipelineAnalytics.listOpsLog.useQuery;
|
|
18981
18993
|
/** Generated alias around `trpc.pipelineAnalytics.getEventMedia.useQuery`. */
|
|
@@ -19272,6 +19284,16 @@ var useRecordingPruneFootage = trpc.recording.pruneFootage.useMutation;
|
|
|
19272
19284
|
var useRecordingDeleteFootprint = trpc.recording.deleteFootprint.useMutation;
|
|
19273
19285
|
/** Generated alias around `trpc.recording.listOpsLog.useQuery`. */
|
|
19274
19286
|
var useRecordingListOpsLog = trpc.recording.listOpsLog.useQuery;
|
|
19287
|
+
/** Generated alias around `trpc.recording.renderGif.useMutation`. */
|
|
19288
|
+
var useRecordingRenderGif = trpc.recording.renderGif.useMutation;
|
|
19289
|
+
/** Generated alias around `trpc.recording.renderClip.useMutation`. */
|
|
19290
|
+
var useRecordingRenderClip = trpc.recording.renderClip.useMutation;
|
|
19291
|
+
/** Generated alias around `trpc.recording.relocateFootage.useMutation`. */
|
|
19292
|
+
var useRecordingRelocateFootage = trpc.recording.relocateFootage.useMutation;
|
|
19293
|
+
/** Generated alias around `trpc.recording.getRelocateStatus.useQuery`. */
|
|
19294
|
+
var useRecordingGetRelocateStatus = trpc.recording.getRelocateStatus.useQuery;
|
|
19295
|
+
/** Generated alias around `trpc.recording.cancelRelocate.useMutation`. */
|
|
19296
|
+
var useRecordingCancelRelocate = trpc.recording.cancelRelocate.useMutation;
|
|
19275
19297
|
/** Generated alias around `trpc.recording.getStatus.useQuery`. */
|
|
19276
19298
|
var useRecordingGetStatus = trpc.recording.getStatus.useQuery;
|
|
19277
19299
|
/** Generated alias around `trpc.recording.getDeviceSettingsContribution.useQuery`. */
|
|
@@ -19412,6 +19434,8 @@ var useStreamBrokerRetractCameraStream = trpc.streamBroker.retractCameraStream.u
|
|
|
19412
19434
|
var useStreamBrokerAssignProfile = trpc.streamBroker.assignProfile.useMutation;
|
|
19413
19435
|
/** Generated alias around `trpc.streamBroker.unassignProfile.useMutation`. */
|
|
19414
19436
|
var useStreamBrokerUnassignProfile = trpc.streamBroker.unassignProfile.useMutation;
|
|
19437
|
+
/** Generated alias around `trpc.streamBroker.renderPreBufferClip.useMutation`. */
|
|
19438
|
+
var useStreamBrokerRenderPreBufferClip = trpc.streamBroker.renderPreBufferClip.useMutation;
|
|
19415
19439
|
/** Generated alias around `trpc.streamBroker.listAllCameraStreams.useQuery`. */
|
|
19416
19440
|
var useStreamBrokerListAllCameraStreams = trpc.streamBroker.listAllCameraStreams.useQuery;
|
|
19417
19441
|
/** Generated alias around `trpc.streamBroker.listAllProfileSlots.useQuery`. */
|
|
@@ -34711,315 +34735,108 @@ function AutotrackSection({ deviceId }) {
|
|
|
34711
34735
|
}
|
|
34712
34736
|
//#endregion
|
|
34713
34737
|
//#region src/composites/cap-settings/recording-config-form.ts
|
|
34714
|
-
|
|
34738
|
+
/** Every weekday — the `days` of a band that covers the whole week. */
|
|
34739
|
+
var ALL_WEEKDAYS = [
|
|
34740
|
+
0,
|
|
34741
|
+
1,
|
|
34742
|
+
2,
|
|
34743
|
+
3,
|
|
34744
|
+
4,
|
|
34745
|
+
5,
|
|
34746
|
+
6
|
|
34747
|
+
];
|
|
34748
|
+
/** The full-day span of an always-on band (`HH:MM`, 23:59 = end of day). */
|
|
34749
|
+
var ALL_DAY_START = "00:00";
|
|
34750
|
+
var ALL_DAY_END = "23:59";
|
|
34751
|
+
/** A band covering every day, all day, in `mode` — what the Base tab authors. */
|
|
34752
|
+
function alwaysBand(mode, rest) {
|
|
34715
34753
|
return {
|
|
34716
|
-
|
|
34717
|
-
|
|
34718
|
-
|
|
34719
|
-
|
|
34720
|
-
|
|
34754
|
+
days: [...ALL_WEEKDAYS],
|
|
34755
|
+
start: ALL_DAY_START,
|
|
34756
|
+
end: ALL_DAY_END,
|
|
34757
|
+
mode,
|
|
34758
|
+
...rest
|
|
34721
34759
|
};
|
|
34722
34760
|
}
|
|
34723
|
-
|
|
34724
|
-
|
|
34761
|
+
/** A fresh row for the Advanced band table: every day, office hours, continuous. */
|
|
34762
|
+
function emptyBand() {
|
|
34763
|
+
return {
|
|
34764
|
+
days: [...ALL_WEEKDAYS],
|
|
34765
|
+
start: "09:00",
|
|
34766
|
+
end: "18:00",
|
|
34767
|
+
mode: "continuous"
|
|
34768
|
+
};
|
|
34725
34769
|
}
|
|
34726
|
-
function
|
|
34727
|
-
return
|
|
34728
|
-
...
|
|
34770
|
+
function withBandAt(bands, index, patch) {
|
|
34771
|
+
return bands.map((band, i) => i === index ? {
|
|
34772
|
+
...band,
|
|
34729
34773
|
...patch
|
|
34730
|
-
} :
|
|
34774
|
+
} : band);
|
|
34775
|
+
}
|
|
34776
|
+
function removeBandAt(bands, index) {
|
|
34777
|
+
return bands.filter((_, i) => i !== index);
|
|
34731
34778
|
}
|
|
34732
|
-
|
|
34733
|
-
|
|
34779
|
+
/** Does this band cover the whole week, all day? (the Base-tab shape) */
|
|
34780
|
+
function isAlwaysBand(band) {
|
|
34781
|
+
return (band.days.length === 0 || ALL_WEEKDAYS.every((d) => band.days.includes(d))) && band.start === "00:00" && band.end === "23:59";
|
|
34734
34782
|
}
|
|
34735
|
-
/**
|
|
34736
|
-
*
|
|
34737
|
-
|
|
34738
|
-
|
|
34739
|
-
|
|
34740
|
-
|
|
34783
|
+
/**
|
|
34784
|
+
* A config is "advanced" when its bands cannot be expressed by the Base tab —
|
|
34785
|
+
* i.e. more than one band, or a single band restricted in time or weekday. Such
|
|
34786
|
+
* a config opens directly in the Advanced band table so nothing is silently
|
|
34787
|
+
* flattened by the simpler form.
|
|
34788
|
+
*/
|
|
34789
|
+
function isAdvancedConfig(cfg) {
|
|
34790
|
+
if (cfg.bands.length > 1) return true;
|
|
34791
|
+
const [only] = cfg.bands;
|
|
34792
|
+
return only !== void 0 && !isAlwaysBand(only);
|
|
34741
34793
|
}
|
|
34742
|
-
/**
|
|
34743
|
-
*
|
|
34794
|
+
/**
|
|
34795
|
+
* Read a persisted config into the Basic form state. `mode` is DERIVED from the
|
|
34796
|
+
* bands by the same function the recorder stamps `config.mode` with; the
|
|
34797
|
+
* `events` parameters come from the first events band, so re-opening the form
|
|
34798
|
+
* shows what is actually recorded.
|
|
34799
|
+
*/
|
|
34744
34800
|
function formStateFromConfig(cfg) {
|
|
34801
|
+
const eventsBand = cfg.bands.find((band) => band.mode === "events");
|
|
34745
34802
|
return {
|
|
34746
|
-
mode:
|
|
34803
|
+
mode: deriveRecordingMode(cfg),
|
|
34747
34804
|
profiles: cfg.profiles,
|
|
34748
34805
|
segmentSeconds: cfg.segmentSeconds,
|
|
34749
|
-
|
|
34750
|
-
|
|
34751
|
-
|
|
34752
|
-
postBufferSec: cfg.postBufferSec,
|
|
34806
|
+
triggers: eventsBand?.triggers ?? {},
|
|
34807
|
+
preBufferSec: eventsBand?.preBufferSec,
|
|
34808
|
+
postBufferSec: eventsBand?.postBufferSec,
|
|
34753
34809
|
retention: cfg.retention,
|
|
34754
34810
|
scrubThumbnails: cfg.scrubThumbnails
|
|
34755
34811
|
};
|
|
34756
34812
|
}
|
|
34757
|
-
/**
|
|
34758
|
-
*
|
|
34759
|
-
*
|
|
34813
|
+
/**
|
|
34814
|
+
* Serialize the Basic form state to the wire config: one always-on band of the
|
|
34815
|
+
* chosen mode, none when `off`. `enabled` follows the mode; `mode` itself is
|
|
34816
|
+
* NOT sent — the recorder stamps it as the derived summary of the bands.
|
|
34817
|
+
*/
|
|
34760
34818
|
function configFromFormState(state) {
|
|
34761
34819
|
return {
|
|
34762
34820
|
enabled: state.mode !== "off",
|
|
34763
|
-
|
|
34821
|
+
bands: bandsFromFormState(state),
|
|
34764
34822
|
profiles: state.profiles ? [...state.profiles] : void 0,
|
|
34765
34823
|
segmentSeconds: state.segmentSeconds,
|
|
34766
|
-
schedules: state.schedules.length > 0 ? [...state.schedules] : void 0,
|
|
34767
|
-
triggers: Object.keys(state.triggers).length > 0 ? state.triggers : void 0,
|
|
34768
|
-
preBufferSec: state.preBufferSec,
|
|
34769
|
-
postBufferSec: state.postBufferSec,
|
|
34770
34824
|
retention: state.retention,
|
|
34771
34825
|
scrubThumbnails: state.scrubThumbnails
|
|
34772
34826
|
};
|
|
34773
34827
|
}
|
|
34774
|
-
/**
|
|
34775
|
-
|
|
34776
|
-
|
|
34777
|
-
|
|
34778
|
-
|
|
34779
|
-
|
|
34780
|
-
|
|
34781
|
-
}
|
|
34782
|
-
|
|
34783
|
-
//#region src/composites/cap-settings/RecordingRulesEditor.tsx
|
|
34784
|
-
var DAYS = [
|
|
34785
|
-
{
|
|
34786
|
-
d: 0,
|
|
34787
|
-
label: "S"
|
|
34788
|
-
},
|
|
34789
|
-
{
|
|
34790
|
-
d: 1,
|
|
34791
|
-
label: "M"
|
|
34792
|
-
},
|
|
34793
|
-
{
|
|
34794
|
-
d: 2,
|
|
34795
|
-
label: "T"
|
|
34796
|
-
},
|
|
34797
|
-
{
|
|
34798
|
-
d: 3,
|
|
34799
|
-
label: "W"
|
|
34800
|
-
},
|
|
34801
|
-
{
|
|
34802
|
-
d: 4,
|
|
34803
|
-
label: "T"
|
|
34804
|
-
},
|
|
34805
|
-
{
|
|
34806
|
-
d: 5,
|
|
34807
|
-
label: "F"
|
|
34808
|
-
},
|
|
34809
|
-
{
|
|
34810
|
-
d: 6,
|
|
34811
|
-
label: "S"
|
|
34812
|
-
}
|
|
34813
|
-
];
|
|
34814
|
-
/** Converts a select string value to RecordingMode without a cast. */
|
|
34815
|
-
function toMode(v) {
|
|
34816
|
-
return v === "onMotion" || v === "onAudioThreshold" ? v : "continuous";
|
|
34817
|
-
}
|
|
34818
|
-
/**
|
|
34819
|
-
* The rule patch to apply when the mode changes, normalising the fields that
|
|
34820
|
-
* only apply to certain modes so a saved rule never carries stale values:
|
|
34821
|
-
* `continuous` drops the pre/post buffers + threshold; trigger modes drop the
|
|
34822
|
-
* threshold unless it's `onAudioThreshold`, which is seeded to -30 dBFS when
|
|
34823
|
-
* unset so the displayed default is the value actually persisted.
|
|
34824
|
-
*/
|
|
34825
|
-
function modePatch(rule, mode) {
|
|
34826
|
-
if (mode === "onAudioThreshold") return {
|
|
34827
|
-
mode,
|
|
34828
|
-
thresholdDbfs: rule.thresholdDbfs ?? -30
|
|
34829
|
-
};
|
|
34830
|
-
if (mode === "onMotion") return {
|
|
34831
|
-
mode,
|
|
34832
|
-
thresholdDbfs: void 0
|
|
34833
|
-
};
|
|
34834
|
-
return {
|
|
34835
|
-
mode,
|
|
34836
|
-
preBufferSec: 0,
|
|
34837
|
-
postBufferSec: 0,
|
|
34838
|
-
thresholdDbfs: void 0
|
|
34839
|
-
};
|
|
34840
|
-
}
|
|
34841
|
-
function TimeOfDayRow({ schedule, onChange }) {
|
|
34842
|
-
const toggleDay = (d) => {
|
|
34843
|
-
const cur = schedule.days ?? [
|
|
34844
|
-
0,
|
|
34845
|
-
1,
|
|
34846
|
-
2,
|
|
34847
|
-
3,
|
|
34848
|
-
4,
|
|
34849
|
-
5,
|
|
34850
|
-
6
|
|
34851
|
-
];
|
|
34852
|
-
const days = cur.includes(d) ? cur.filter((x) => x !== d) : [...cur, d].toSorted((a, b) => a - b);
|
|
34853
|
-
onChange({
|
|
34854
|
-
...schedule,
|
|
34855
|
-
days
|
|
34856
|
-
});
|
|
34857
|
-
};
|
|
34858
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
34859
|
-
className: "flex flex-wrap items-center gap-2 text-xs",
|
|
34860
|
-
children: [
|
|
34861
|
-
/* @__PURE__ */ jsx("input", {
|
|
34862
|
-
type: "time",
|
|
34863
|
-
value: schedule.start,
|
|
34864
|
-
onChange: (e) => onChange({
|
|
34865
|
-
...schedule,
|
|
34866
|
-
start: e.target.value
|
|
34867
|
-
}),
|
|
34868
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs"
|
|
34869
|
-
}),
|
|
34870
|
-
/* @__PURE__ */ jsx("span", { children: "–" }),
|
|
34871
|
-
/* @__PURE__ */ jsx("input", {
|
|
34872
|
-
type: "time",
|
|
34873
|
-
value: schedule.end,
|
|
34874
|
-
onChange: (e) => onChange({
|
|
34875
|
-
...schedule,
|
|
34876
|
-
end: e.target.value
|
|
34877
|
-
}),
|
|
34878
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs"
|
|
34879
|
-
}),
|
|
34880
|
-
/* @__PURE__ */ jsx("div", {
|
|
34881
|
-
className: "flex gap-1",
|
|
34882
|
-
children: DAYS.map(({ d, label }) => {
|
|
34883
|
-
return /* @__PURE__ */ jsx("button", {
|
|
34884
|
-
type: "button",
|
|
34885
|
-
onClick: () => toggleDay(d),
|
|
34886
|
-
className: `h-6 w-6 rounded text-[10px] ${!schedule.days || schedule.days.includes(d) ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
34887
|
-
children: label
|
|
34888
|
-
}, d);
|
|
34889
|
-
})
|
|
34890
|
-
})
|
|
34891
|
-
]
|
|
34892
|
-
});
|
|
34893
|
-
}
|
|
34894
|
-
function RecordingRulesEditor({ rules, onChange }) {
|
|
34895
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
34896
|
-
className: "space-y-2",
|
|
34897
|
-
children: [
|
|
34898
|
-
rules.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
34899
|
-
className: "text-xs text-foreground-subtle",
|
|
34900
|
-
children: "No rules — recording is continuous (always) when enabled."
|
|
34901
|
-
}) : null,
|
|
34902
|
-
rules.map((rule, i) => /* @__PURE__ */ jsxs("div", {
|
|
34903
|
-
className: "space-y-2 rounded-lg border border-border bg-surface p-3",
|
|
34904
|
-
children: [
|
|
34905
|
-
/* @__PURE__ */ jsxs("div", {
|
|
34906
|
-
className: "flex items-center justify-between gap-2",
|
|
34907
|
-
children: [/* @__PURE__ */ jsxs("select", {
|
|
34908
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs",
|
|
34909
|
-
value: rule.schedule.kind,
|
|
34910
|
-
onChange: (e) => {
|
|
34911
|
-
onChange(withRuleAt(rules, i, { schedule: e.target.value === "timeOfDay" ? {
|
|
34912
|
-
kind: "timeOfDay",
|
|
34913
|
-
start: "00:00",
|
|
34914
|
-
end: "23:59"
|
|
34915
|
-
} : { kind: "always" } }));
|
|
34916
|
-
},
|
|
34917
|
-
children: [/* @__PURE__ */ jsx("option", {
|
|
34918
|
-
value: "always",
|
|
34919
|
-
children: "Always"
|
|
34920
|
-
}), /* @__PURE__ */ jsx("option", {
|
|
34921
|
-
value: "timeOfDay",
|
|
34922
|
-
children: "Time of day"
|
|
34923
|
-
})]
|
|
34924
|
-
}), /* @__PURE__ */ jsx("button", {
|
|
34925
|
-
type: "button",
|
|
34926
|
-
onClick: () => onChange(removeRuleAt(rules, i)),
|
|
34927
|
-
className: "text-foreground-subtle hover:text-red-500",
|
|
34928
|
-
children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
|
|
34929
|
-
})]
|
|
34930
|
-
}),
|
|
34931
|
-
rule.schedule.kind === "timeOfDay" ? /* @__PURE__ */ jsx(TimeOfDayRow, {
|
|
34932
|
-
schedule: rule.schedule,
|
|
34933
|
-
onChange: (schedule) => onChange(withRuleAt(rules, i, { schedule }))
|
|
34934
|
-
}) : null,
|
|
34935
|
-
/* @__PURE__ */ jsxs("div", {
|
|
34936
|
-
className: "flex flex-wrap items-center gap-2 text-xs",
|
|
34937
|
-
children: [
|
|
34938
|
-
/* @__PURE__ */ jsxs("select", {
|
|
34939
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs",
|
|
34940
|
-
value: rule.mode,
|
|
34941
|
-
onChange: (e) => onChange(withRuleAt(rules, i, modePatch(rule, toMode(e.target.value)))),
|
|
34942
|
-
children: [
|
|
34943
|
-
/* @__PURE__ */ jsx("option", {
|
|
34944
|
-
value: "continuous",
|
|
34945
|
-
children: "Continuous"
|
|
34946
|
-
}),
|
|
34947
|
-
/* @__PURE__ */ jsx("option", {
|
|
34948
|
-
value: "onMotion",
|
|
34949
|
-
children: "On motion"
|
|
34950
|
-
}),
|
|
34951
|
-
/* @__PURE__ */ jsx("option", {
|
|
34952
|
-
value: "onAudioThreshold",
|
|
34953
|
-
children: "On audio"
|
|
34954
|
-
})
|
|
34955
|
-
]
|
|
34956
|
-
}),
|
|
34957
|
-
isTriggerMode(rule.mode) ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
34958
|
-
/* @__PURE__ */ jsxs("label", {
|
|
34959
|
-
className: "flex items-center gap-1",
|
|
34960
|
-
children: [
|
|
34961
|
-
"pre",
|
|
34962
|
-
/* @__PURE__ */ jsx("input", {
|
|
34963
|
-
type: "number",
|
|
34964
|
-
min: 0,
|
|
34965
|
-
value: rule.preBufferSec,
|
|
34966
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { preBufferSec: Number(e.target.value) })),
|
|
34967
|
-
className: "w-14 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
34968
|
-
}),
|
|
34969
|
-
"s"
|
|
34970
|
-
]
|
|
34971
|
-
}),
|
|
34972
|
-
/* @__PURE__ */ jsxs("label", {
|
|
34973
|
-
className: "flex items-center gap-1",
|
|
34974
|
-
children: [
|
|
34975
|
-
"post",
|
|
34976
|
-
/* @__PURE__ */ jsx("input", {
|
|
34977
|
-
type: "number",
|
|
34978
|
-
min: 0,
|
|
34979
|
-
value: rule.postBufferSec,
|
|
34980
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { postBufferSec: Number(e.target.value) })),
|
|
34981
|
-
className: "w-14 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
34982
|
-
}),
|
|
34983
|
-
"s"
|
|
34984
|
-
]
|
|
34985
|
-
}),
|
|
34986
|
-
/* @__PURE__ */ jsxs("label", {
|
|
34987
|
-
className: "flex items-center gap-1",
|
|
34988
|
-
children: [/* @__PURE__ */ jsx("input", {
|
|
34989
|
-
type: "checkbox",
|
|
34990
|
-
checked: rule.resetTimeoutOnNewEvent,
|
|
34991
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { resetTimeoutOnNewEvent: e.target.checked }))
|
|
34992
|
-
}), "reset"]
|
|
34993
|
-
})
|
|
34994
|
-
] }) : null,
|
|
34995
|
-
rule.mode === "onAudioThreshold" ? /* @__PURE__ */ jsxs("label", {
|
|
34996
|
-
className: "flex items-center gap-1",
|
|
34997
|
-
children: [
|
|
34998
|
-
"thr",
|
|
34999
|
-
/* @__PURE__ */ jsx("input", {
|
|
35000
|
-
type: "number",
|
|
35001
|
-
value: rule.thresholdDbfs ?? -30,
|
|
35002
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { thresholdDbfs: Number(e.target.value) })),
|
|
35003
|
-
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35004
|
-
}),
|
|
35005
|
-
"dBFS"
|
|
35006
|
-
]
|
|
35007
|
-
}) : null
|
|
35008
|
-
]
|
|
35009
|
-
})
|
|
35010
|
-
]
|
|
35011
|
-
}, i)),
|
|
35012
|
-
/* @__PURE__ */ jsxs("button", {
|
|
35013
|
-
type: "button",
|
|
35014
|
-
onClick: () => onChange([...rules, emptyRule()]),
|
|
35015
|
-
className: "flex items-center gap-1 rounded-md border border-dashed border-border px-3 py-1.5 text-xs text-foreground-subtle hover:border-primary hover:text-foreground",
|
|
35016
|
-
children: [/* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }), " Add rule"]
|
|
35017
|
-
})
|
|
35018
|
-
]
|
|
35019
|
-
});
|
|
34828
|
+
/** The Base tab's bands: one always-on band of the chosen mode (none = off). */
|
|
34829
|
+
function bandsFromFormState(state) {
|
|
34830
|
+
if (state.mode === "off") return [];
|
|
34831
|
+
if (state.mode === "continuous") return [alwaysBand("continuous")];
|
|
34832
|
+
return [alwaysBand("events", {
|
|
34833
|
+
...Object.keys(state.triggers).length > 0 ? { triggers: state.triggers } : {},
|
|
34834
|
+
...state.preBufferSec !== void 0 ? { preBufferSec: state.preBufferSec } : {},
|
|
34835
|
+
...state.postBufferSec !== void 0 ? { postBufferSec: state.postBufferSec } : {}
|
|
34836
|
+
})];
|
|
35020
34837
|
}
|
|
35021
34838
|
//#endregion
|
|
35022
|
-
//#region src/composites/cap-settings/
|
|
34839
|
+
//#region src/composites/cap-settings/RecordingBandsEditor.tsx
|
|
35023
34840
|
/** Weekday chips in display order (Mon→Sun); value is `Date.getDay()` (0=Sun). */
|
|
35024
34841
|
var WEEKDAYS = [
|
|
35025
34842
|
{
|
|
@@ -35051,115 +34868,177 @@ var WEEKDAYS = [
|
|
|
35051
34868
|
label: "Sun"
|
|
35052
34869
|
}
|
|
35053
34870
|
];
|
|
35054
|
-
|
|
35055
|
-
|
|
35056
|
-
|
|
35057
|
-
|
|
35058
|
-
|
|
35059
|
-
|
|
35060
|
-
}
|
|
35061
|
-
|
|
35062
|
-
|
|
35063
|
-
|
|
35064
|
-
|
|
34871
|
+
var BAND_MODES = [{
|
|
34872
|
+
value: "continuous",
|
|
34873
|
+
label: "Continuous"
|
|
34874
|
+
}, {
|
|
34875
|
+
value: "events",
|
|
34876
|
+
label: "Events"
|
|
34877
|
+
}];
|
|
34878
|
+
/**
|
|
34879
|
+
* The band table — the ONLY authoring surface for recording intent since the
|
|
34880
|
+
* legacy mode/schedules/triggers/rules model was retired (2026-07-30).
|
|
34881
|
+
*
|
|
34882
|
+
* Each row is one `RecordingBand`: when it applies (weekdays + `HH:MM` span,
|
|
34883
|
+
* `end <= start` wraps past midnight) and how it records (continuous, or events
|
|
34884
|
+
* with its own triggers and pre/post buffers). No band covering *now* = nothing
|
|
34885
|
+
* is recorded then; "off" is the absence of a band, never a band value.
|
|
34886
|
+
*/
|
|
34887
|
+
function RecordingBandsEditor({ bands, onChange }) {
|
|
35065
34888
|
return /* @__PURE__ */ jsxs("div", {
|
|
35066
34889
|
className: "space-y-2",
|
|
35067
|
-
children: [
|
|
34890
|
+
children: [bands.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
35068
34891
|
className: "text-[11px] text-foreground-subtle",
|
|
35069
|
-
children: "
|
|
35070
|
-
}) :
|
|
34892
|
+
children: "No bands — nothing is recorded. Add one to start."
|
|
34893
|
+
}) : bands.map((band, i) => /* @__PURE__ */ jsx(BandRow, {
|
|
35071
34894
|
band,
|
|
35072
|
-
onChange: (
|
|
35073
|
-
onRemove: () =>
|
|
34895
|
+
onChange: (patch) => onChange(withBandAt(bands, i, patch)),
|
|
34896
|
+
onRemove: () => onChange(removeBandAt(bands, i))
|
|
35074
34897
|
}, i)), /* @__PURE__ */ jsxs("button", {
|
|
35075
34898
|
type: "button",
|
|
35076
|
-
onClick:
|
|
34899
|
+
onClick: () => onChange([...bands, emptyBand()]),
|
|
35077
34900
|
className: "flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground",
|
|
35078
34901
|
children: [/* @__PURE__ */ jsx(Plus, { className: "h-3 w-3" }), " Add band"]
|
|
35079
34902
|
})]
|
|
35080
34903
|
});
|
|
35081
34904
|
}
|
|
34905
|
+
function numOrUndef(value) {
|
|
34906
|
+
return value === "" ? void 0 : Number(value);
|
|
34907
|
+
}
|
|
35082
34908
|
function BandRow({ band, onChange, onRemove }) {
|
|
35083
|
-
if (band.kind === "always") return /* @__PURE__ */ jsxs("div", {
|
|
35084
|
-
className: "flex items-center gap-2 text-xs",
|
|
35085
|
-
children: [
|
|
35086
|
-
/* @__PURE__ */ jsx("span", {
|
|
35087
|
-
className: "flex-1",
|
|
35088
|
-
children: "Always"
|
|
35089
|
-
}),
|
|
35090
|
-
/* @__PURE__ */ jsx("button", {
|
|
35091
|
-
type: "button",
|
|
35092
|
-
onClick: () => onChange(newBand()),
|
|
35093
|
-
className: "text-foreground-subtle hover:text-foreground underline",
|
|
35094
|
-
children: "Set band"
|
|
35095
|
-
}),
|
|
35096
|
-
/* @__PURE__ */ jsx("button", {
|
|
35097
|
-
type: "button",
|
|
35098
|
-
onClick: onRemove,
|
|
35099
|
-
"aria-label": "Remove band",
|
|
35100
|
-
className: "text-foreground-subtle hover:text-red-500",
|
|
35101
|
-
children: /* @__PURE__ */ jsx(Trash2, { className: "h-3.5 w-3.5" })
|
|
35102
|
-
})
|
|
35103
|
-
]
|
|
35104
|
-
});
|
|
35105
|
-
const days = band.days ?? [];
|
|
35106
34909
|
const toggleDay = (value) => {
|
|
35107
|
-
const
|
|
35108
|
-
onChange({
|
|
35109
|
-
...band,
|
|
35110
|
-
days: next.length > 0 ? next : void 0
|
|
35111
|
-
});
|
|
34910
|
+
const current = band.days.length === 0 ? WEEKDAYS.map((d) => d.value) : band.days;
|
|
34911
|
+
onChange({ days: current.includes(value) ? current.filter((d) => d !== value) : [...current, value] });
|
|
35112
34912
|
};
|
|
34913
|
+
const setTriggers = (patch) => onChange({ triggers: {
|
|
34914
|
+
...band.triggers,
|
|
34915
|
+
...patch
|
|
34916
|
+
} });
|
|
35113
34917
|
return /* @__PURE__ */ jsxs("div", {
|
|
35114
34918
|
className: "space-y-1.5 rounded-md border border-border p-2",
|
|
35115
|
-
children: [
|
|
35116
|
-
|
|
35117
|
-
|
|
35118
|
-
|
|
35119
|
-
|
|
35120
|
-
|
|
35121
|
-
|
|
35122
|
-
|
|
35123
|
-
start: e.target.value
|
|
34919
|
+
children: [
|
|
34920
|
+
/* @__PURE__ */ jsxs("div", {
|
|
34921
|
+
className: "flex flex-wrap items-center gap-2 text-xs",
|
|
34922
|
+
children: [
|
|
34923
|
+
/* @__PURE__ */ jsx("input", {
|
|
34924
|
+
type: "time",
|
|
34925
|
+
"aria-label": "Band start",
|
|
34926
|
+
value: band.start,
|
|
34927
|
+
onChange: (e) => onChange({ start: e.target.value }),
|
|
34928
|
+
className: "rounded-md border border-border bg-background px-1 py-0.5"
|
|
35124
34929
|
}),
|
|
35125
|
-
|
|
35126
|
-
|
|
35127
|
-
|
|
35128
|
-
className: "text-foreground-subtle",
|
|
35129
|
-
children: "→"
|
|
35130
|
-
}),
|
|
35131
|
-
/* @__PURE__ */ jsx("input", {
|
|
35132
|
-
type: "time",
|
|
35133
|
-
value: band.end,
|
|
35134
|
-
onChange: (e) => onChange({
|
|
35135
|
-
...band,
|
|
35136
|
-
end: e.target.value
|
|
34930
|
+
/* @__PURE__ */ jsx("span", {
|
|
34931
|
+
className: "text-foreground-subtle",
|
|
34932
|
+
children: "→"
|
|
35137
34933
|
}),
|
|
35138
|
-
|
|
35139
|
-
|
|
35140
|
-
|
|
35141
|
-
|
|
35142
|
-
|
|
35143
|
-
|
|
35144
|
-
|
|
35145
|
-
|
|
35146
|
-
|
|
35147
|
-
|
|
35148
|
-
|
|
35149
|
-
|
|
35150
|
-
|
|
35151
|
-
|
|
35152
|
-
|
|
35153
|
-
|
|
35154
|
-
|
|
35155
|
-
|
|
35156
|
-
|
|
35157
|
-
|
|
35158
|
-
|
|
35159
|
-
|
|
35160
|
-
|
|
35161
|
-
|
|
35162
|
-
|
|
34934
|
+
/* @__PURE__ */ jsx("input", {
|
|
34935
|
+
type: "time",
|
|
34936
|
+
"aria-label": "Band end",
|
|
34937
|
+
value: band.end,
|
|
34938
|
+
onChange: (e) => onChange({ end: e.target.value }),
|
|
34939
|
+
className: "rounded-md border border-border bg-background px-1 py-0.5"
|
|
34940
|
+
}),
|
|
34941
|
+
/* @__PURE__ */ jsx("span", {
|
|
34942
|
+
className: "flex gap-1",
|
|
34943
|
+
children: BAND_MODES.map((m) => /* @__PURE__ */ jsx("button", {
|
|
34944
|
+
type: "button",
|
|
34945
|
+
onClick: () => onChange({ mode: m.value }),
|
|
34946
|
+
className: `rounded px-2 py-0.5 ${band.mode === m.value ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
34947
|
+
children: m.label
|
|
34948
|
+
}, m.value))
|
|
34949
|
+
}),
|
|
34950
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
34951
|
+
/* @__PURE__ */ jsx("button", {
|
|
34952
|
+
type: "button",
|
|
34953
|
+
onClick: onRemove,
|
|
34954
|
+
"aria-label": "Remove band",
|
|
34955
|
+
className: "text-foreground-subtle hover:text-red-500",
|
|
34956
|
+
children: /* @__PURE__ */ jsx(Trash2, { className: "h-3.5 w-3.5" })
|
|
34957
|
+
})
|
|
34958
|
+
]
|
|
34959
|
+
}),
|
|
34960
|
+
/* @__PURE__ */ jsxs("div", {
|
|
34961
|
+
className: "flex flex-wrap gap-1",
|
|
34962
|
+
children: [WEEKDAYS.map((d) => {
|
|
34963
|
+
return /* @__PURE__ */ jsx("button", {
|
|
34964
|
+
type: "button",
|
|
34965
|
+
onClick: () => toggleDay(d.value),
|
|
34966
|
+
className: `rounded px-1.5 py-0.5 text-[10px] ${band.days.length === 0 || band.days.includes(d.value) ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
34967
|
+
children: d.label
|
|
34968
|
+
}, d.value);
|
|
34969
|
+
}), band.days.length === 0 ? /* @__PURE__ */ jsx("span", {
|
|
34970
|
+
className: "self-center text-[10px] text-foreground-subtle",
|
|
34971
|
+
children: "every day"
|
|
34972
|
+
}) : null]
|
|
34973
|
+
}),
|
|
34974
|
+
band.mode === "events" ? /* @__PURE__ */ jsxs("div", {
|
|
34975
|
+
className: "space-y-1.5 border-t border-border pt-1.5",
|
|
34976
|
+
children: [
|
|
34977
|
+
/* @__PURE__ */ jsxs("label", {
|
|
34978
|
+
className: "flex items-center gap-2 text-xs",
|
|
34979
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
34980
|
+
type: "checkbox",
|
|
34981
|
+
checked: band.triggers?.motion ?? false,
|
|
34982
|
+
onChange: (e) => setTriggers({ motion: e.target.checked ? true : void 0 })
|
|
34983
|
+
}), "Motion"]
|
|
34984
|
+
}),
|
|
34985
|
+
/* @__PURE__ */ jsxs("label", {
|
|
34986
|
+
className: "flex items-center gap-2 text-xs",
|
|
34987
|
+
children: [
|
|
34988
|
+
/* @__PURE__ */ jsx("input", {
|
|
34989
|
+
type: "checkbox",
|
|
34990
|
+
checked: band.triggers?.audioThresholdDbfs != null,
|
|
34991
|
+
onChange: (e) => setTriggers({ audioThresholdDbfs: e.target.checked ? -30 : void 0 })
|
|
34992
|
+
}),
|
|
34993
|
+
"Audio above threshold",
|
|
34994
|
+
band.triggers?.audioThresholdDbfs != null ? /* @__PURE__ */ jsx("input", {
|
|
34995
|
+
type: "number",
|
|
34996
|
+
"aria-label": "Audio threshold dBFS",
|
|
34997
|
+
value: band.triggers.audioThresholdDbfs,
|
|
34998
|
+
onChange: (e) => setTriggers({ audioThresholdDbfs: numOrUndef(e.target.value) }),
|
|
34999
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-0.5 text-xs"
|
|
35000
|
+
}) : null,
|
|
35001
|
+
/* @__PURE__ */ jsx("span", {
|
|
35002
|
+
className: "text-foreground-subtle",
|
|
35003
|
+
children: "dBFS"
|
|
35004
|
+
})
|
|
35005
|
+
]
|
|
35006
|
+
}),
|
|
35007
|
+
/* @__PURE__ */ jsxs("div", {
|
|
35008
|
+
className: "flex flex-wrap items-center gap-3 text-xs",
|
|
35009
|
+
children: [/* @__PURE__ */ jsxs("label", {
|
|
35010
|
+
className: "flex items-center gap-1",
|
|
35011
|
+
children: [
|
|
35012
|
+
"Pre-buffer",
|
|
35013
|
+
/* @__PURE__ */ jsx("input", {
|
|
35014
|
+
type: "number",
|
|
35015
|
+
min: 0,
|
|
35016
|
+
value: band.preBufferSec ?? "",
|
|
35017
|
+
placeholder: "0",
|
|
35018
|
+
onChange: (e) => onChange({ preBufferSec: numOrUndef(e.target.value) }),
|
|
35019
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35020
|
+
}),
|
|
35021
|
+
"s"
|
|
35022
|
+
]
|
|
35023
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
35024
|
+
className: "flex items-center gap-1",
|
|
35025
|
+
children: [
|
|
35026
|
+
"Post-buffer",
|
|
35027
|
+
/* @__PURE__ */ jsx("input", {
|
|
35028
|
+
type: "number",
|
|
35029
|
+
min: 0,
|
|
35030
|
+
value: band.postBufferSec ?? "",
|
|
35031
|
+
placeholder: "0",
|
|
35032
|
+
onChange: (e) => onChange({ postBufferSec: numOrUndef(e.target.value) }),
|
|
35033
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35034
|
+
}),
|
|
35035
|
+
"s"
|
|
35036
|
+
]
|
|
35037
|
+
})]
|
|
35038
|
+
})
|
|
35039
|
+
]
|
|
35040
|
+
}) : null
|
|
35041
|
+
]
|
|
35163
35042
|
});
|
|
35164
35043
|
}
|
|
35165
35044
|
//#endregion
|
|
@@ -35183,16 +35062,15 @@ var MODES = [
|
|
|
35183
35062
|
label: "Continuous"
|
|
35184
35063
|
}
|
|
35185
35064
|
];
|
|
35186
|
-
function RecordingSettings({ initial, saving, onSave }) {
|
|
35065
|
+
function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regeneratingStrips }) {
|
|
35187
35066
|
const [tab, setTab] = useState(isAdvancedConfig(initial) ? "advanced" : "base");
|
|
35188
35067
|
const [base, setBase] = useState(formStateFromConfig(initial));
|
|
35189
|
-
const [
|
|
35190
|
-
const [rules, setRules] = useState(initial.rules ? [...initial.rules] : []);
|
|
35068
|
+
const [bands, setBands] = useState([...initial.bands]);
|
|
35191
35069
|
const [common, setCommon] = useState({
|
|
35192
35070
|
profiles: initial.profiles,
|
|
35193
35071
|
segmentSeconds: initial.segmentSeconds,
|
|
35194
35072
|
retention: initial.retention,
|
|
35195
|
-
|
|
35073
|
+
stripsEnabled: initial.stripsEnabled
|
|
35196
35074
|
});
|
|
35197
35075
|
const ret = common.retention ?? {};
|
|
35198
35076
|
const setRet = (patch) => setCommon({
|
|
@@ -35203,10 +35081,6 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35203
35081
|
}
|
|
35204
35082
|
});
|
|
35205
35083
|
const numOrUndef = (v) => v === "" ? void 0 : Number(v);
|
|
35206
|
-
const parsePreset = (v) => {
|
|
35207
|
-
const parsed = ScrubThumbnailPresetSchema.safeParse(v);
|
|
35208
|
-
return parsed.success ? parsed.data : DEFAULT_SCRUB_THUMBNAIL_PRESET;
|
|
35209
|
-
};
|
|
35210
35084
|
const toggleProfile = (p) => {
|
|
35211
35085
|
const cur = common.profiles ?? [...PROFILES];
|
|
35212
35086
|
const next = cur.includes(p) ? cur.filter((x) => x !== p) : [...cur, p];
|
|
@@ -35223,24 +35097,31 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35223
35097
|
}
|
|
35224
35098
|
});
|
|
35225
35099
|
const switchTab = (next) => {
|
|
35226
|
-
if (next === "advanced"
|
|
35100
|
+
if (next === "advanced") setBands(bandsFromFormState(base));
|
|
35101
|
+
else setBase(formStateFromConfig({
|
|
35102
|
+
enabled: bands.length > 0,
|
|
35103
|
+
bands
|
|
35104
|
+
}));
|
|
35227
35105
|
setTab(next);
|
|
35228
35106
|
};
|
|
35229
35107
|
const handleSave = () => {
|
|
35230
|
-
|
|
35231
|
-
...base,
|
|
35232
|
-
profiles: common.profiles,
|
|
35233
|
-
segmentSeconds: common.segmentSeconds,
|
|
35234
|
-
retention: common.retention,
|
|
35235
|
-
scrubThumbnails: common.scrubThumbnails
|
|
35236
|
-
}));
|
|
35237
|
-
else onSave({
|
|
35238
|
-
enabled: advEnabled,
|
|
35239
|
-
rules,
|
|
35108
|
+
const shared = {
|
|
35240
35109
|
profiles: common.profiles ? [...common.profiles] : void 0,
|
|
35241
35110
|
segmentSeconds: common.segmentSeconds,
|
|
35242
35111
|
retention: common.retention,
|
|
35243
|
-
|
|
35112
|
+
...common.stripsEnabled === void 0 ? {} : { stripsEnabled: common.stripsEnabled }
|
|
35113
|
+
};
|
|
35114
|
+
if (tab === "base") onSave({
|
|
35115
|
+
...configFromFormState({
|
|
35116
|
+
...base,
|
|
35117
|
+
...shared
|
|
35118
|
+
}),
|
|
35119
|
+
...shared
|
|
35120
|
+
});
|
|
35121
|
+
else onSave({
|
|
35122
|
+
enabled: bands.length > 0,
|
|
35123
|
+
bands,
|
|
35124
|
+
...shared
|
|
35244
35125
|
});
|
|
35245
35126
|
};
|
|
35246
35127
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -35252,7 +35133,7 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35252
35133
|
type: "button",
|
|
35253
35134
|
onClick: () => switchTab(t),
|
|
35254
35135
|
className: `rounded px-2.5 py-1 ${tab === t ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
35255
|
-
children: t === "base" ? "Base" : "Advanced (
|
|
35136
|
+
children: t === "base" ? "Base" : "Advanced (bands)"
|
|
35256
35137
|
}, t))
|
|
35257
35138
|
}),
|
|
35258
35139
|
tab === "base" ? /* @__PURE__ */ jsxs("div", {
|
|
@@ -35273,16 +35154,17 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35273
35154
|
children: m.label
|
|
35274
35155
|
}, m.value))]
|
|
35275
35156
|
}),
|
|
35276
|
-
base.mode !== "off" ? /* @__PURE__ */ jsxs("
|
|
35277
|
-
className: "
|
|
35278
|
-
children:
|
|
35279
|
-
|
|
35280
|
-
|
|
35281
|
-
|
|
35282
|
-
|
|
35283
|
-
|
|
35284
|
-
|
|
35285
|
-
|
|
35157
|
+
base.mode !== "off" ? /* @__PURE__ */ jsxs("p", {
|
|
35158
|
+
className: "text-[11px] text-foreground-subtle",
|
|
35159
|
+
children: [
|
|
35160
|
+
"Records 24/7. Use ",
|
|
35161
|
+
/* @__PURE__ */ jsx("span", {
|
|
35162
|
+
className: "font-medium",
|
|
35163
|
+
children: "Advanced (bands)"
|
|
35164
|
+
}),
|
|
35165
|
+
" to restrict hours or weekdays, or to mix continuous and event windows."
|
|
35166
|
+
]
|
|
35167
|
+
}) : null,
|
|
35286
35168
|
base.mode === "events" ? /* @__PURE__ */ jsxs("div", {
|
|
35287
35169
|
className: "space-y-2",
|
|
35288
35170
|
children: [
|
|
@@ -35360,22 +35242,22 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35360
35242
|
]
|
|
35361
35243
|
}) : null
|
|
35362
35244
|
]
|
|
35363
|
-
}) : /* @__PURE__ */
|
|
35245
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
35364
35246
|
className: "space-y-4",
|
|
35365
|
-
children:
|
|
35366
|
-
|
|
35367
|
-
|
|
35368
|
-
|
|
35369
|
-
|
|
35370
|
-
|
|
35371
|
-
|
|
35372
|
-
|
|
35373
|
-
|
|
35374
|
-
|
|
35375
|
-
|
|
35376
|
-
|
|
35377
|
-
|
|
35378
|
-
|
|
35247
|
+
children: /* @__PURE__ */ jsxs("div", { children: [
|
|
35248
|
+
/* @__PURE__ */ jsx("div", {
|
|
35249
|
+
className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
|
|
35250
|
+
children: "Recording bands"
|
|
35251
|
+
}),
|
|
35252
|
+
/* @__PURE__ */ jsx(RecordingBandsEditor, {
|
|
35253
|
+
bands,
|
|
35254
|
+
onChange: setBands
|
|
35255
|
+
}),
|
|
35256
|
+
/* @__PURE__ */ jsx("p", {
|
|
35257
|
+
className: "mt-1.5 text-[11px] text-foreground-subtle",
|
|
35258
|
+
children: "A band says WHEN to record and HOW. Nothing is recorded outside every band — an empty table means this camera is off."
|
|
35259
|
+
})
|
|
35260
|
+
] })
|
|
35379
35261
|
}),
|
|
35380
35262
|
/* @__PURE__ */ jsxs("div", {
|
|
35381
35263
|
className: "flex flex-wrap items-center gap-4 text-xs",
|
|
@@ -35414,27 +35296,30 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35414
35296
|
}),
|
|
35415
35297
|
/* @__PURE__ */ jsxs("label", {
|
|
35416
35298
|
className: "flex items-center gap-1",
|
|
35417
|
-
children: [/* @__PURE__ */ jsx("
|
|
35418
|
-
|
|
35419
|
-
|
|
35420
|
-
}), /* @__PURE__ */ jsx("select", {
|
|
35421
|
-
value: common.scrubThumbnails ?? DEFAULT_SCRUB_THUMBNAIL_PRESET,
|
|
35299
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
35300
|
+
type: "checkbox",
|
|
35301
|
+
checked: common.stripsEnabled === true,
|
|
35422
35302
|
onChange: (e) => setCommon({
|
|
35423
35303
|
...common,
|
|
35424
|
-
|
|
35425
|
-
})
|
|
35426
|
-
|
|
35427
|
-
|
|
35428
|
-
|
|
35429
|
-
children: SCRUB_THUMBNAIL_PRESET_LABELS[p]
|
|
35430
|
-
}, p))
|
|
35304
|
+
stripsEnabled: e.target.checked
|
|
35305
|
+
})
|
|
35306
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
35307
|
+
className: "text-foreground-subtle",
|
|
35308
|
+
children: "Scrub thumbnail strips"
|
|
35431
35309
|
})]
|
|
35432
|
-
})
|
|
35310
|
+
}),
|
|
35311
|
+
onRegenerateStrips ? /* @__PURE__ */ jsx("button", {
|
|
35312
|
+
type: "button",
|
|
35313
|
+
onClick: onRegenerateStrips,
|
|
35314
|
+
disabled: regeneratingStrips === true,
|
|
35315
|
+
className: "rounded-md border border-border bg-surface-hover px-2 py-1 text-xs text-foreground-subtle transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
35316
|
+
children: regeneratingStrips === true ? "Regenerating…" : "Regenerate strips"
|
|
35317
|
+
}) : null
|
|
35433
35318
|
]
|
|
35434
35319
|
}),
|
|
35435
35320
|
/* @__PURE__ */ jsx("p", {
|
|
35436
35321
|
className: "text-[11px] text-foreground-subtle",
|
|
35437
|
-
children: "
|
|
35322
|
+
children: "OPT-IN: save every keyframe of the low recording as a JPEG strip for fluid fast scrubbing. Costs disk (a derived cache, reclaimed with the footage). Regenerate clears and rebuilds the recent days from the segments already on disk."
|
|
35438
35323
|
}),
|
|
35439
35324
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
35440
35325
|
className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
|
|
@@ -36683,6 +36568,14 @@ function RecordingPanel({ deviceId }) {
|
|
|
36683
36568
|
const configQuery = useRecordingGetDeviceConfig({ deviceId });
|
|
36684
36569
|
const setConfig = useRecordingSetDeviceConfig();
|
|
36685
36570
|
const rescanStorage = useRecordingRescanStorage();
|
|
36571
|
+
const customAction = useAddonsCustom();
|
|
36572
|
+
const regenerateStrips = useCallback(() => {
|
|
36573
|
+
customAction.mutate({
|
|
36574
|
+
addonId: "recorder",
|
|
36575
|
+
action: "regenerateStrips",
|
|
36576
|
+
input: { deviceId }
|
|
36577
|
+
});
|
|
36578
|
+
}, [customAction, deviceId]);
|
|
36686
36579
|
const saveConfig = (config) => {
|
|
36687
36580
|
setConfig.mutate({
|
|
36688
36581
|
deviceId,
|
|
@@ -36724,7 +36617,9 @@ function RecordingPanel({ deviceId }) {
|
|
|
36724
36617
|
children: resolvedConfig ? /* @__PURE__ */ jsx(RecordingSettings, {
|
|
36725
36618
|
initial: resolvedConfig,
|
|
36726
36619
|
saving: setConfig.isPending,
|
|
36727
|
-
onSave: saveConfig
|
|
36620
|
+
onSave: saveConfig,
|
|
36621
|
+
onRegenerateStrips: regenerateStrips,
|
|
36622
|
+
regeneratingStrips: customAction.isPending
|
|
36728
36623
|
}, JSON.stringify(resolvedConfig)) : /* @__PURE__ */ jsx("div", {
|
|
36729
36624
|
className: "px-1 py-2 text-xs text-foreground-subtle",
|
|
36730
36625
|
children: "Loading settings…"
|
|
@@ -40290,6 +40185,21 @@ function DetectionBoxes({ detections, frameWidth, frameHeight }) {
|
|
|
40290
40185
|
}
|
|
40291
40186
|
//#endregion
|
|
40292
40187
|
//#region src/composites/camera-stream-player.tsx
|
|
40188
|
+
/**
|
|
40189
|
+
* Silence (or restore) a live WebRTC stream FOR REAL.
|
|
40190
|
+
*
|
|
40191
|
+
* `video.muted` alone is not enough: iOS WebKit keeps playing a
|
|
40192
|
+
* `MediaStream`'s audio track through a muted element, which is why live audio
|
|
40193
|
+
* kept sounding under recorded playback on the viewer. Gating the audio TRACK
|
|
40194
|
+
* (`track.enabled`) is what actually stops it, so both are set together — and
|
|
40195
|
+
* re-applied at every stream swap, because a freshly-attached stream arrives
|
|
40196
|
+
* with its tracks enabled whatever the element says.
|
|
40197
|
+
*/
|
|
40198
|
+
function applyStreamMute(video, muted) {
|
|
40199
|
+
video.muted = muted;
|
|
40200
|
+
const stream = video.srcObject;
|
|
40201
|
+
if (stream instanceof MediaStream) for (const track of stream.getAudioTracks()) track.enabled = !muted;
|
|
40202
|
+
}
|
|
40293
40203
|
function isTouchDevice() {
|
|
40294
40204
|
if (typeof window === "undefined") return false;
|
|
40295
40205
|
return window.matchMedia("(hover: none) and (pointer: coarse)").matches || typeof navigator !== "undefined" && navigator.maxTouchPoints > 0 || "ontouchstart" in window;
|
|
@@ -40372,6 +40282,11 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40372
40282
|
const [state, setState] = useState("idle");
|
|
40373
40283
|
const [errorMessage, setErrorMessage] = useState("");
|
|
40374
40284
|
const [isMuted, setIsMuted] = useState(initialMuted);
|
|
40285
|
+
/** Read by the async stream-swap closures: a freshly-promoted stream must
|
|
40286
|
+
* arrive already respecting the CURRENT mute, not the one captured at
|
|
40287
|
+
* connect time. */
|
|
40288
|
+
const isMutedRef = useRef(isMuted);
|
|
40289
|
+
isMutedRef.current = isMuted;
|
|
40375
40290
|
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
40376
40291
|
const [isPipSupported, setIsPipSupported] = useState(false);
|
|
40377
40292
|
const isTouch = isTouchDevice();
|
|
@@ -40501,6 +40416,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40501
40416
|
pcRef.current = pc;
|
|
40502
40417
|
if (videoRef.current) {
|
|
40503
40418
|
videoRef.current.srcObject = combinedStream;
|
|
40419
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40504
40420
|
videoRef.current.play().catch(() => {});
|
|
40505
40421
|
}
|
|
40506
40422
|
if (oldPc && oldPc !== pc) try {
|
|
@@ -40520,6 +40436,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40520
40436
|
}
|
|
40521
40437
|
if (videoRef.current) {
|
|
40522
40438
|
videoRef.current.srcObject = combinedStream;
|
|
40439
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40523
40440
|
videoRef.current.play().catch(() => {});
|
|
40524
40441
|
}
|
|
40525
40442
|
};
|
|
@@ -40606,6 +40523,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40606
40523
|
whepStream.addTrack(event.track);
|
|
40607
40524
|
if (videoRef.current) {
|
|
40608
40525
|
videoRef.current.srcObject = whepStream;
|
|
40526
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40609
40527
|
videoRef.current.play().catch(() => {});
|
|
40610
40528
|
}
|
|
40611
40529
|
};
|
|
@@ -40678,6 +40596,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40678
40596
|
pcRef.current = pc;
|
|
40679
40597
|
if (videoRef.current) {
|
|
40680
40598
|
videoRef.current.srcObject = combinedStream;
|
|
40599
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40681
40600
|
videoRef.current.play().catch(() => {});
|
|
40682
40601
|
}
|
|
40683
40602
|
if (oldPc && oldPc !== pc) try {
|
|
@@ -40698,6 +40617,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40698
40617
|
}
|
|
40699
40618
|
if (videoRef.current) {
|
|
40700
40619
|
videoRef.current.srcObject = combinedStream;
|
|
40620
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40701
40621
|
videoRef.current.play().catch(() => {});
|
|
40702
40622
|
}
|
|
40703
40623
|
};
|
|
@@ -41022,7 +40942,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41022
40942
|
mountedRef.current = false;
|
|
41023
40943
|
cleanup();
|
|
41024
40944
|
};
|
|
41025
|
-
}, [
|
|
40945
|
+
}, []);
|
|
41026
40946
|
const hasSignaledRef = useRef(false);
|
|
41027
40947
|
useEffect(() => {
|
|
41028
40948
|
if (!autoPlay) return;
|
|
@@ -41060,6 +40980,23 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41060
40980
|
}
|
|
41061
40981
|
connect();
|
|
41062
40982
|
};
|
|
40983
|
+
const prevServerUrlRef = useRef(serverUrl);
|
|
40984
|
+
const prevStreamKeyRef = useRef(streamKey);
|
|
40985
|
+
useEffect(() => {
|
|
40986
|
+
const serverChanged = prevServerUrlRef.current !== serverUrl;
|
|
40987
|
+
const keyChanged = prevStreamKeyRef.current !== streamKey;
|
|
40988
|
+
prevServerUrlRef.current = serverUrl;
|
|
40989
|
+
prevStreamKeyRef.current = streamKey;
|
|
40990
|
+
if (!serverChanged && !keyChanged) return;
|
|
40991
|
+
if (!mountedRef.current) return;
|
|
40992
|
+
reconnectAttemptsRef.current = 0;
|
|
40993
|
+
if (serverChanged) {
|
|
40994
|
+
cleanup();
|
|
40995
|
+
connect();
|
|
40996
|
+
return;
|
|
40997
|
+
}
|
|
40998
|
+
handleSeamlessReconnect();
|
|
40999
|
+
}, [serverUrl, streamKey]);
|
|
41063
41000
|
const prevReconnectSignalRef = useRef(reconnectSignal);
|
|
41064
41001
|
useEffect(() => {
|
|
41065
41002
|
if (prevReconnectSignalRef.current === reconnectSignal) return;
|
|
@@ -41069,8 +41006,9 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41069
41006
|
}, [reconnectSignal]);
|
|
41070
41007
|
const toggleMute = () => {
|
|
41071
41008
|
if (videoRef.current) {
|
|
41072
|
-
|
|
41073
|
-
|
|
41009
|
+
const next = !videoRef.current.muted;
|
|
41010
|
+
applyStreamMute(videoRef.current, next);
|
|
41011
|
+
setIsMuted(next);
|
|
41074
41012
|
}
|
|
41075
41013
|
};
|
|
41076
41014
|
const toggleFullscreen = async () => {
|
|
@@ -41298,7 +41236,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41298
41236
|
setIsMuted(initialMuted);
|
|
41299
41237
|
const video = videoRef.current;
|
|
41300
41238
|
if (!video) return;
|
|
41301
|
-
video
|
|
41239
|
+
applyStreamMute(video, initialMuted);
|
|
41302
41240
|
if (!initialMuted) video.play().catch(() => {});
|
|
41303
41241
|
}, [initialMuted]);
|
|
41304
41242
|
const showToolbarBriefly = () => {
|
|
@@ -42410,7 +42348,7 @@ function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIce
|
|
|
42410
42348
|
extraOverlay,
|
|
42411
42349
|
ptzOverlayVisible && ptzOverlay
|
|
42412
42350
|
] }) : void 0
|
|
42413
|
-
}
|
|
42351
|
+
})
|
|
42414
42352
|
}) : /* @__PURE__ */ jsx(SnapshotPreview, {
|
|
42415
42353
|
src: snapshotSrc ?? null,
|
|
42416
42354
|
isLoading: snapshotLoading,
|
|
@@ -46791,6 +46729,15 @@ function useDeviceDetections(trpc, deviceId) {
|
|
|
46791
46729
|
* @param deviceId - numeric device ID (null = disabled)
|
|
46792
46730
|
* @param pollIntervalMs - how often to refresh profile slots (default: 5000)
|
|
46793
46731
|
*/
|
|
46732
|
+
/** TTL for the TURN/STUN credential cache. Short enough that rotated creds
|
|
46733
|
+
* are picked up promptly, long enough to cover a connect + several profile
|
|
46734
|
+
* switches without re-paying the fetch. */
|
|
46735
|
+
var TURN_CACHE_TTL_MS = 5 * 6e4;
|
|
46736
|
+
/** Keyed on the caller's trpc client object (stable per connected system —
|
|
46737
|
+
* NOT on `trpc.turnProvider`, which is a proxy minted fresh on every property
|
|
46738
|
+
* access), so two admin tabs pointed at different hubs never cross-serve
|
|
46739
|
+
* credentials. An unstable key degrades to a cache miss, never to wrong creds. */
|
|
46740
|
+
var turnServersCache = /* @__PURE__ */ new WeakMap();
|
|
46794
46741
|
function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
46795
46742
|
const [remoteStreams, setRemoteStreams] = useState([]);
|
|
46796
46743
|
useEffect(() => {
|
|
@@ -46860,18 +46807,28 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
|
46860
46807
|
}, [deviceId, remoteStreams]);
|
|
46861
46808
|
const getIceServers = useCallback(async () => {
|
|
46862
46809
|
if (!trpc.turnProvider) return void 0;
|
|
46810
|
+
const cached = turnServersCache.get(trpc);
|
|
46811
|
+
if (cached && Date.now() - cached.fetchedAt < TURN_CACHE_TTL_MS) return cached.servers;
|
|
46863
46812
|
try {
|
|
46864
|
-
|
|
46813
|
+
const mapped = (await trpc.turnProvider.getTurnServers.query()).map((s) => {
|
|
46865
46814
|
return {
|
|
46866
46815
|
urls: typeof s.urls === "string" ? s.urls : [...s.urls],
|
|
46867
46816
|
...s.username !== void 0 ? { username: s.username } : {},
|
|
46868
46817
|
...s.credential !== void 0 ? { credential: s.credential } : {}
|
|
46869
46818
|
};
|
|
46870
46819
|
});
|
|
46820
|
+
turnServersCache.set(trpc, {
|
|
46821
|
+
servers: mapped,
|
|
46822
|
+
fetchedAt: Date.now()
|
|
46823
|
+
});
|
|
46824
|
+
return mapped;
|
|
46871
46825
|
} catch {
|
|
46872
|
-
return;
|
|
46826
|
+
return cached?.servers;
|
|
46873
46827
|
}
|
|
46874
46828
|
}, [trpc]);
|
|
46829
|
+
useEffect(() => {
|
|
46830
|
+
getIceServers();
|
|
46831
|
+
}, [getIceServers]);
|
|
46875
46832
|
const createSession = useCallback(async (target, hints) => {
|
|
46876
46833
|
if (deviceId === null) throw new Error("No device selected");
|
|
46877
46834
|
const res = await trpc.webrtcSession.createSession.mutate({
|
|
@@ -47241,4 +47198,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
|
|
|
47241
47198
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
47242
47199
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
47243
47200
|
//#endregion
|
|
47244
|
-
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, 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, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, 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, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, 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, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, 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, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCreateRule, useNotificationRulesDeleteRule, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListRules, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, 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, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, 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, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionClose, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionResize, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
47201
|
+
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, 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, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, 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, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, 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, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, 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, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, 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, useNotificationRulesCreateRule, useNotificationRulesDeleteRule, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListRules, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelMediaRelocate, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMediaRelocateStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, 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, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, 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, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocate, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetRelocateStatus, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionClose, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionResize, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|