@camstack/ui-library 1.2.11 → 1.2.13
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 +28 -0
- package/dist/hooks/use-device-webrtc.d.ts +0 -7
- package/dist/index.cjs +418 -443
- package/dist/index.js +406 -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",
|
|
@@ -18138,6 +18138,12 @@ var useBackupListArchives = trpc.backup.listArchives.useQuery;
|
|
|
18138
18138
|
var useBackupUpsertDestinationPolicy = trpc.backup.upsertDestinationPolicy.useMutation;
|
|
18139
18139
|
/** Generated alias around `trpc.backup.previewSchedule.useQuery`. */
|
|
18140
18140
|
var useBackupPreviewSchedule = trpc.backup.previewSchedule.useQuery;
|
|
18141
|
+
/** Generated alias around `trpc.backup.listSchedules.useQuery`. */
|
|
18142
|
+
var useBackupListSchedules = trpc.backup.listSchedules.useQuery;
|
|
18143
|
+
/** Generated alias around `trpc.backup.upsertSchedule.useMutation`. */
|
|
18144
|
+
var useBackupUpsertSchedule = trpc.backup.upsertSchedule.useMutation;
|
|
18145
|
+
/** Generated alias around `trpc.backup.deleteSchedule.useMutation`. */
|
|
18146
|
+
var useBackupDeleteSchedule = trpc.backup.deleteSchedule.useMutation;
|
|
18141
18147
|
/** Generated alias around `trpc.battery.wakeForStream.useMutation`. */
|
|
18142
18148
|
var useBatteryWakeForStream = trpc.battery.wakeForStream.useMutation;
|
|
18143
18149
|
/** Generated alias around `trpc.battery.getStatus.useQuery`. */
|
|
@@ -18698,6 +18704,10 @@ var useLocalNetworkList = trpc.localNetwork.list.useQuery;
|
|
|
18698
18704
|
var useLocalNetworkGetPreferred = trpc.localNetwork.getPreferred.useQuery;
|
|
18699
18705
|
/** Generated alias around `trpc.localNetwork.getConnectionEndpoints.useQuery`. */
|
|
18700
18706
|
var useLocalNetworkGetConnectionEndpoints = trpc.localNetwork.getConnectionEndpoints.useQuery;
|
|
18707
|
+
/** Generated alias around `trpc.localNetwork.getNotificationEndpoint.useQuery`. */
|
|
18708
|
+
var useLocalNetworkGetNotificationEndpoint = trpc.localNetwork.getNotificationEndpoint.useQuery;
|
|
18709
|
+
/** Generated alias around `trpc.localNetwork.setNotificationEndpoint.useMutation`. */
|
|
18710
|
+
var useLocalNetworkSetNotificationEndpoint = trpc.localNetwork.setNotificationEndpoint.useMutation;
|
|
18701
18711
|
/** Generated alias around `trpc.localNetwork.getAllowedAddresses.useQuery`. */
|
|
18702
18712
|
var useLocalNetworkGetAllowedAddresses = trpc.localNetwork.getAllowedAddresses.useQuery;
|
|
18703
18713
|
/** Generated alias around `trpc.localNetwork.setAllowedAddresses.useMutation`. */
|
|
@@ -18970,6 +18980,12 @@ var usePipelineAnalyticsGetEventStoreFootprint = trpc.pipelineAnalytics.getEvent
|
|
|
18970
18980
|
var usePipelineAnalyticsPruneEvents = trpc.pipelineAnalytics.pruneEvents.useMutation;
|
|
18971
18981
|
/** Generated alias around `trpc.pipelineAnalytics.deleteDeviceEvents.useMutation`. */
|
|
18972
18982
|
var usePipelineAnalyticsDeleteDeviceEvents = trpc.pipelineAnalytics.deleteDeviceEvents.useMutation;
|
|
18983
|
+
/** Generated alias around `trpc.pipelineAnalytics.relocateMedia.useMutation`. */
|
|
18984
|
+
var usePipelineAnalyticsRelocateMedia = trpc.pipelineAnalytics.relocateMedia.useMutation;
|
|
18985
|
+
/** Generated alias around `trpc.pipelineAnalytics.getMediaRelocateStatus.useQuery`. */
|
|
18986
|
+
var usePipelineAnalyticsGetMediaRelocateStatus = trpc.pipelineAnalytics.getMediaRelocateStatus.useQuery;
|
|
18987
|
+
/** Generated alias around `trpc.pipelineAnalytics.cancelMediaRelocate.useMutation`. */
|
|
18988
|
+
var usePipelineAnalyticsCancelMediaRelocate = trpc.pipelineAnalytics.cancelMediaRelocate.useMutation;
|
|
18973
18989
|
/** Generated alias around `trpc.pipelineAnalytics.listOpsLog.useQuery`. */
|
|
18974
18990
|
var usePipelineAnalyticsListOpsLog = trpc.pipelineAnalytics.listOpsLog.useQuery;
|
|
18975
18991
|
/** Generated alias around `trpc.pipelineAnalytics.getEventMedia.useQuery`. */
|
|
@@ -19266,6 +19282,16 @@ var useRecordingPruneFootage = trpc.recording.pruneFootage.useMutation;
|
|
|
19266
19282
|
var useRecordingDeleteFootprint = trpc.recording.deleteFootprint.useMutation;
|
|
19267
19283
|
/** Generated alias around `trpc.recording.listOpsLog.useQuery`. */
|
|
19268
19284
|
var useRecordingListOpsLog = trpc.recording.listOpsLog.useQuery;
|
|
19285
|
+
/** Generated alias around `trpc.recording.renderGif.useMutation`. */
|
|
19286
|
+
var useRecordingRenderGif = trpc.recording.renderGif.useMutation;
|
|
19287
|
+
/** Generated alias around `trpc.recording.renderClip.useMutation`. */
|
|
19288
|
+
var useRecordingRenderClip = trpc.recording.renderClip.useMutation;
|
|
19289
|
+
/** Generated alias around `trpc.recording.relocateFootage.useMutation`. */
|
|
19290
|
+
var useRecordingRelocateFootage = trpc.recording.relocateFootage.useMutation;
|
|
19291
|
+
/** Generated alias around `trpc.recording.getRelocateStatus.useQuery`. */
|
|
19292
|
+
var useRecordingGetRelocateStatus = trpc.recording.getRelocateStatus.useQuery;
|
|
19293
|
+
/** Generated alias around `trpc.recording.cancelRelocate.useMutation`. */
|
|
19294
|
+
var useRecordingCancelRelocate = trpc.recording.cancelRelocate.useMutation;
|
|
19269
19295
|
/** Generated alias around `trpc.recording.getStatus.useQuery`. */
|
|
19270
19296
|
var useRecordingGetStatus = trpc.recording.getStatus.useQuery;
|
|
19271
19297
|
/** Generated alias around `trpc.recording.getDeviceSettingsContribution.useQuery`. */
|
|
@@ -19406,6 +19432,8 @@ var useStreamBrokerRetractCameraStream = trpc.streamBroker.retractCameraStream.u
|
|
|
19406
19432
|
var useStreamBrokerAssignProfile = trpc.streamBroker.assignProfile.useMutation;
|
|
19407
19433
|
/** Generated alias around `trpc.streamBroker.unassignProfile.useMutation`. */
|
|
19408
19434
|
var useStreamBrokerUnassignProfile = trpc.streamBroker.unassignProfile.useMutation;
|
|
19435
|
+
/** Generated alias around `trpc.streamBroker.renderPreBufferClip.useMutation`. */
|
|
19436
|
+
var useStreamBrokerRenderPreBufferClip = trpc.streamBroker.renderPreBufferClip.useMutation;
|
|
19409
19437
|
/** Generated alias around `trpc.streamBroker.listAllCameraStreams.useQuery`. */
|
|
19410
19438
|
var useStreamBrokerListAllCameraStreams = trpc.streamBroker.listAllCameraStreams.useQuery;
|
|
19411
19439
|
/** Generated alias around `trpc.streamBroker.listAllProfileSlots.useQuery`. */
|
|
@@ -34705,315 +34733,108 @@ function AutotrackSection({ deviceId }) {
|
|
|
34705
34733
|
}
|
|
34706
34734
|
//#endregion
|
|
34707
34735
|
//#region src/composites/cap-settings/recording-config-form.ts
|
|
34708
|
-
|
|
34736
|
+
/** Every weekday — the `days` of a band that covers the whole week. */
|
|
34737
|
+
var ALL_WEEKDAYS = [
|
|
34738
|
+
0,
|
|
34739
|
+
1,
|
|
34740
|
+
2,
|
|
34741
|
+
3,
|
|
34742
|
+
4,
|
|
34743
|
+
5,
|
|
34744
|
+
6
|
|
34745
|
+
];
|
|
34746
|
+
/** The full-day span of an always-on band (`HH:MM`, 23:59 = end of day). */
|
|
34747
|
+
var ALL_DAY_START = "00:00";
|
|
34748
|
+
var ALL_DAY_END = "23:59";
|
|
34749
|
+
/** A band covering every day, all day, in `mode` — what the Base tab authors. */
|
|
34750
|
+
function alwaysBand(mode, rest) {
|
|
34709
34751
|
return {
|
|
34710
|
-
|
|
34711
|
-
|
|
34712
|
-
|
|
34713
|
-
|
|
34714
|
-
|
|
34752
|
+
days: [...ALL_WEEKDAYS],
|
|
34753
|
+
start: ALL_DAY_START,
|
|
34754
|
+
end: ALL_DAY_END,
|
|
34755
|
+
mode,
|
|
34756
|
+
...rest
|
|
34715
34757
|
};
|
|
34716
34758
|
}
|
|
34717
|
-
|
|
34718
|
-
|
|
34759
|
+
/** A fresh row for the Advanced band table: every day, office hours, continuous. */
|
|
34760
|
+
function emptyBand() {
|
|
34761
|
+
return {
|
|
34762
|
+
days: [...ALL_WEEKDAYS],
|
|
34763
|
+
start: "09:00",
|
|
34764
|
+
end: "18:00",
|
|
34765
|
+
mode: "continuous"
|
|
34766
|
+
};
|
|
34719
34767
|
}
|
|
34720
|
-
function
|
|
34721
|
-
return
|
|
34722
|
-
...
|
|
34768
|
+
function withBandAt(bands, index, patch) {
|
|
34769
|
+
return bands.map((band, i) => i === index ? {
|
|
34770
|
+
...band,
|
|
34723
34771
|
...patch
|
|
34724
|
-
} :
|
|
34772
|
+
} : band);
|
|
34773
|
+
}
|
|
34774
|
+
function removeBandAt(bands, index) {
|
|
34775
|
+
return bands.filter((_, i) => i !== index);
|
|
34725
34776
|
}
|
|
34726
|
-
|
|
34727
|
-
|
|
34777
|
+
/** Does this band cover the whole week, all day? (the Base-tab shape) */
|
|
34778
|
+
function isAlwaysBand(band) {
|
|
34779
|
+
return (band.days.length === 0 || ALL_WEEKDAYS.every((d) => band.days.includes(d))) && band.start === "00:00" && band.end === "23:59";
|
|
34728
34780
|
}
|
|
34729
|
-
/**
|
|
34730
|
-
*
|
|
34731
|
-
|
|
34732
|
-
|
|
34733
|
-
|
|
34734
|
-
|
|
34781
|
+
/**
|
|
34782
|
+
* A config is "advanced" when its bands cannot be expressed by the Base tab —
|
|
34783
|
+
* i.e. more than one band, or a single band restricted in time or weekday. Such
|
|
34784
|
+
* a config opens directly in the Advanced band table so nothing is silently
|
|
34785
|
+
* flattened by the simpler form.
|
|
34786
|
+
*/
|
|
34787
|
+
function isAdvancedConfig(cfg) {
|
|
34788
|
+
if (cfg.bands.length > 1) return true;
|
|
34789
|
+
const [only] = cfg.bands;
|
|
34790
|
+
return only !== void 0 && !isAlwaysBand(only);
|
|
34735
34791
|
}
|
|
34736
|
-
/**
|
|
34737
|
-
*
|
|
34792
|
+
/**
|
|
34793
|
+
* Read a persisted config into the Basic form state. `mode` is DERIVED from the
|
|
34794
|
+
* bands by the same function the recorder stamps `config.mode` with; the
|
|
34795
|
+
* `events` parameters come from the first events band, so re-opening the form
|
|
34796
|
+
* shows what is actually recorded.
|
|
34797
|
+
*/
|
|
34738
34798
|
function formStateFromConfig(cfg) {
|
|
34799
|
+
const eventsBand = cfg.bands.find((band) => band.mode === "events");
|
|
34739
34800
|
return {
|
|
34740
|
-
mode:
|
|
34801
|
+
mode: deriveRecordingMode(cfg),
|
|
34741
34802
|
profiles: cfg.profiles,
|
|
34742
34803
|
segmentSeconds: cfg.segmentSeconds,
|
|
34743
|
-
|
|
34744
|
-
|
|
34745
|
-
|
|
34746
|
-
postBufferSec: cfg.postBufferSec,
|
|
34804
|
+
triggers: eventsBand?.triggers ?? {},
|
|
34805
|
+
preBufferSec: eventsBand?.preBufferSec,
|
|
34806
|
+
postBufferSec: eventsBand?.postBufferSec,
|
|
34747
34807
|
retention: cfg.retention,
|
|
34748
34808
|
scrubThumbnails: cfg.scrubThumbnails
|
|
34749
34809
|
};
|
|
34750
34810
|
}
|
|
34751
|
-
/**
|
|
34752
|
-
*
|
|
34753
|
-
*
|
|
34811
|
+
/**
|
|
34812
|
+
* Serialize the Basic form state to the wire config: one always-on band of the
|
|
34813
|
+
* chosen mode, none when `off`. `enabled` follows the mode; `mode` itself is
|
|
34814
|
+
* NOT sent — the recorder stamps it as the derived summary of the bands.
|
|
34815
|
+
*/
|
|
34754
34816
|
function configFromFormState(state) {
|
|
34755
34817
|
return {
|
|
34756
34818
|
enabled: state.mode !== "off",
|
|
34757
|
-
|
|
34819
|
+
bands: bandsFromFormState(state),
|
|
34758
34820
|
profiles: state.profiles ? [...state.profiles] : void 0,
|
|
34759
34821
|
segmentSeconds: state.segmentSeconds,
|
|
34760
|
-
schedules: state.schedules.length > 0 ? [...state.schedules] : void 0,
|
|
34761
|
-
triggers: Object.keys(state.triggers).length > 0 ? state.triggers : void 0,
|
|
34762
|
-
preBufferSec: state.preBufferSec,
|
|
34763
|
-
postBufferSec: state.postBufferSec,
|
|
34764
34822
|
retention: state.retention,
|
|
34765
34823
|
scrubThumbnails: state.scrubThumbnails
|
|
34766
34824
|
};
|
|
34767
34825
|
}
|
|
34768
|
-
/**
|
|
34769
|
-
|
|
34770
|
-
|
|
34771
|
-
|
|
34772
|
-
|
|
34773
|
-
|
|
34774
|
-
|
|
34775
|
-
}
|
|
34776
|
-
|
|
34777
|
-
//#region src/composites/cap-settings/RecordingRulesEditor.tsx
|
|
34778
|
-
var DAYS = [
|
|
34779
|
-
{
|
|
34780
|
-
d: 0,
|
|
34781
|
-
label: "S"
|
|
34782
|
-
},
|
|
34783
|
-
{
|
|
34784
|
-
d: 1,
|
|
34785
|
-
label: "M"
|
|
34786
|
-
},
|
|
34787
|
-
{
|
|
34788
|
-
d: 2,
|
|
34789
|
-
label: "T"
|
|
34790
|
-
},
|
|
34791
|
-
{
|
|
34792
|
-
d: 3,
|
|
34793
|
-
label: "W"
|
|
34794
|
-
},
|
|
34795
|
-
{
|
|
34796
|
-
d: 4,
|
|
34797
|
-
label: "T"
|
|
34798
|
-
},
|
|
34799
|
-
{
|
|
34800
|
-
d: 5,
|
|
34801
|
-
label: "F"
|
|
34802
|
-
},
|
|
34803
|
-
{
|
|
34804
|
-
d: 6,
|
|
34805
|
-
label: "S"
|
|
34806
|
-
}
|
|
34807
|
-
];
|
|
34808
|
-
/** Converts a select string value to RecordingMode without a cast. */
|
|
34809
|
-
function toMode(v) {
|
|
34810
|
-
return v === "onMotion" || v === "onAudioThreshold" ? v : "continuous";
|
|
34811
|
-
}
|
|
34812
|
-
/**
|
|
34813
|
-
* The rule patch to apply when the mode changes, normalising the fields that
|
|
34814
|
-
* only apply to certain modes so a saved rule never carries stale values:
|
|
34815
|
-
* `continuous` drops the pre/post buffers + threshold; trigger modes drop the
|
|
34816
|
-
* threshold unless it's `onAudioThreshold`, which is seeded to -30 dBFS when
|
|
34817
|
-
* unset so the displayed default is the value actually persisted.
|
|
34818
|
-
*/
|
|
34819
|
-
function modePatch(rule, mode) {
|
|
34820
|
-
if (mode === "onAudioThreshold") return {
|
|
34821
|
-
mode,
|
|
34822
|
-
thresholdDbfs: rule.thresholdDbfs ?? -30
|
|
34823
|
-
};
|
|
34824
|
-
if (mode === "onMotion") return {
|
|
34825
|
-
mode,
|
|
34826
|
-
thresholdDbfs: void 0
|
|
34827
|
-
};
|
|
34828
|
-
return {
|
|
34829
|
-
mode,
|
|
34830
|
-
preBufferSec: 0,
|
|
34831
|
-
postBufferSec: 0,
|
|
34832
|
-
thresholdDbfs: void 0
|
|
34833
|
-
};
|
|
34834
|
-
}
|
|
34835
|
-
function TimeOfDayRow({ schedule, onChange }) {
|
|
34836
|
-
const toggleDay = (d) => {
|
|
34837
|
-
const cur = schedule.days ?? [
|
|
34838
|
-
0,
|
|
34839
|
-
1,
|
|
34840
|
-
2,
|
|
34841
|
-
3,
|
|
34842
|
-
4,
|
|
34843
|
-
5,
|
|
34844
|
-
6
|
|
34845
|
-
];
|
|
34846
|
-
const days = cur.includes(d) ? cur.filter((x) => x !== d) : [...cur, d].toSorted((a, b) => a - b);
|
|
34847
|
-
onChange({
|
|
34848
|
-
...schedule,
|
|
34849
|
-
days
|
|
34850
|
-
});
|
|
34851
|
-
};
|
|
34852
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
34853
|
-
className: "flex flex-wrap items-center gap-2 text-xs",
|
|
34854
|
-
children: [
|
|
34855
|
-
/* @__PURE__ */ jsx("input", {
|
|
34856
|
-
type: "time",
|
|
34857
|
-
value: schedule.start,
|
|
34858
|
-
onChange: (e) => onChange({
|
|
34859
|
-
...schedule,
|
|
34860
|
-
start: e.target.value
|
|
34861
|
-
}),
|
|
34862
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs"
|
|
34863
|
-
}),
|
|
34864
|
-
/* @__PURE__ */ jsx("span", { children: "–" }),
|
|
34865
|
-
/* @__PURE__ */ jsx("input", {
|
|
34866
|
-
type: "time",
|
|
34867
|
-
value: schedule.end,
|
|
34868
|
-
onChange: (e) => onChange({
|
|
34869
|
-
...schedule,
|
|
34870
|
-
end: e.target.value
|
|
34871
|
-
}),
|
|
34872
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs"
|
|
34873
|
-
}),
|
|
34874
|
-
/* @__PURE__ */ jsx("div", {
|
|
34875
|
-
className: "flex gap-1",
|
|
34876
|
-
children: DAYS.map(({ d, label }) => {
|
|
34877
|
-
return /* @__PURE__ */ jsx("button", {
|
|
34878
|
-
type: "button",
|
|
34879
|
-
onClick: () => toggleDay(d),
|
|
34880
|
-
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"}`,
|
|
34881
|
-
children: label
|
|
34882
|
-
}, d);
|
|
34883
|
-
})
|
|
34884
|
-
})
|
|
34885
|
-
]
|
|
34886
|
-
});
|
|
34887
|
-
}
|
|
34888
|
-
function RecordingRulesEditor({ rules, onChange }) {
|
|
34889
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
34890
|
-
className: "space-y-2",
|
|
34891
|
-
children: [
|
|
34892
|
-
rules.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
34893
|
-
className: "text-xs text-foreground-subtle",
|
|
34894
|
-
children: "No rules — recording is continuous (always) when enabled."
|
|
34895
|
-
}) : null,
|
|
34896
|
-
rules.map((rule, i) => /* @__PURE__ */ jsxs("div", {
|
|
34897
|
-
className: "space-y-2 rounded-lg border border-border bg-surface p-3",
|
|
34898
|
-
children: [
|
|
34899
|
-
/* @__PURE__ */ jsxs("div", {
|
|
34900
|
-
className: "flex items-center justify-between gap-2",
|
|
34901
|
-
children: [/* @__PURE__ */ jsxs("select", {
|
|
34902
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs",
|
|
34903
|
-
value: rule.schedule.kind,
|
|
34904
|
-
onChange: (e) => {
|
|
34905
|
-
onChange(withRuleAt(rules, i, { schedule: e.target.value === "timeOfDay" ? {
|
|
34906
|
-
kind: "timeOfDay",
|
|
34907
|
-
start: "00:00",
|
|
34908
|
-
end: "23:59"
|
|
34909
|
-
} : { kind: "always" } }));
|
|
34910
|
-
},
|
|
34911
|
-
children: [/* @__PURE__ */ jsx("option", {
|
|
34912
|
-
value: "always",
|
|
34913
|
-
children: "Always"
|
|
34914
|
-
}), /* @__PURE__ */ jsx("option", {
|
|
34915
|
-
value: "timeOfDay",
|
|
34916
|
-
children: "Time of day"
|
|
34917
|
-
})]
|
|
34918
|
-
}), /* @__PURE__ */ jsx("button", {
|
|
34919
|
-
type: "button",
|
|
34920
|
-
onClick: () => onChange(removeRuleAt(rules, i)),
|
|
34921
|
-
className: "text-foreground-subtle hover:text-red-500",
|
|
34922
|
-
children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
|
|
34923
|
-
})]
|
|
34924
|
-
}),
|
|
34925
|
-
rule.schedule.kind === "timeOfDay" ? /* @__PURE__ */ jsx(TimeOfDayRow, {
|
|
34926
|
-
schedule: rule.schedule,
|
|
34927
|
-
onChange: (schedule) => onChange(withRuleAt(rules, i, { schedule }))
|
|
34928
|
-
}) : null,
|
|
34929
|
-
/* @__PURE__ */ jsxs("div", {
|
|
34930
|
-
className: "flex flex-wrap items-center gap-2 text-xs",
|
|
34931
|
-
children: [
|
|
34932
|
-
/* @__PURE__ */ jsxs("select", {
|
|
34933
|
-
className: "rounded-md border border-border bg-background px-2 py-1 text-xs",
|
|
34934
|
-
value: rule.mode,
|
|
34935
|
-
onChange: (e) => onChange(withRuleAt(rules, i, modePatch(rule, toMode(e.target.value)))),
|
|
34936
|
-
children: [
|
|
34937
|
-
/* @__PURE__ */ jsx("option", {
|
|
34938
|
-
value: "continuous",
|
|
34939
|
-
children: "Continuous"
|
|
34940
|
-
}),
|
|
34941
|
-
/* @__PURE__ */ jsx("option", {
|
|
34942
|
-
value: "onMotion",
|
|
34943
|
-
children: "On motion"
|
|
34944
|
-
}),
|
|
34945
|
-
/* @__PURE__ */ jsx("option", {
|
|
34946
|
-
value: "onAudioThreshold",
|
|
34947
|
-
children: "On audio"
|
|
34948
|
-
})
|
|
34949
|
-
]
|
|
34950
|
-
}),
|
|
34951
|
-
isTriggerMode(rule.mode) ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
34952
|
-
/* @__PURE__ */ jsxs("label", {
|
|
34953
|
-
className: "flex items-center gap-1",
|
|
34954
|
-
children: [
|
|
34955
|
-
"pre",
|
|
34956
|
-
/* @__PURE__ */ jsx("input", {
|
|
34957
|
-
type: "number",
|
|
34958
|
-
min: 0,
|
|
34959
|
-
value: rule.preBufferSec,
|
|
34960
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { preBufferSec: Number(e.target.value) })),
|
|
34961
|
-
className: "w-14 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
34962
|
-
}),
|
|
34963
|
-
"s"
|
|
34964
|
-
]
|
|
34965
|
-
}),
|
|
34966
|
-
/* @__PURE__ */ jsxs("label", {
|
|
34967
|
-
className: "flex items-center gap-1",
|
|
34968
|
-
children: [
|
|
34969
|
-
"post",
|
|
34970
|
-
/* @__PURE__ */ jsx("input", {
|
|
34971
|
-
type: "number",
|
|
34972
|
-
min: 0,
|
|
34973
|
-
value: rule.postBufferSec,
|
|
34974
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { postBufferSec: Number(e.target.value) })),
|
|
34975
|
-
className: "w-14 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
34976
|
-
}),
|
|
34977
|
-
"s"
|
|
34978
|
-
]
|
|
34979
|
-
}),
|
|
34980
|
-
/* @__PURE__ */ jsxs("label", {
|
|
34981
|
-
className: "flex items-center gap-1",
|
|
34982
|
-
children: [/* @__PURE__ */ jsx("input", {
|
|
34983
|
-
type: "checkbox",
|
|
34984
|
-
checked: rule.resetTimeoutOnNewEvent,
|
|
34985
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { resetTimeoutOnNewEvent: e.target.checked }))
|
|
34986
|
-
}), "reset"]
|
|
34987
|
-
})
|
|
34988
|
-
] }) : null,
|
|
34989
|
-
rule.mode === "onAudioThreshold" ? /* @__PURE__ */ jsxs("label", {
|
|
34990
|
-
className: "flex items-center gap-1",
|
|
34991
|
-
children: [
|
|
34992
|
-
"thr",
|
|
34993
|
-
/* @__PURE__ */ jsx("input", {
|
|
34994
|
-
type: "number",
|
|
34995
|
-
value: rule.thresholdDbfs ?? -30,
|
|
34996
|
-
onChange: (e) => onChange(withRuleAt(rules, i, { thresholdDbfs: Number(e.target.value) })),
|
|
34997
|
-
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
34998
|
-
}),
|
|
34999
|
-
"dBFS"
|
|
35000
|
-
]
|
|
35001
|
-
}) : null
|
|
35002
|
-
]
|
|
35003
|
-
})
|
|
35004
|
-
]
|
|
35005
|
-
}, i)),
|
|
35006
|
-
/* @__PURE__ */ jsxs("button", {
|
|
35007
|
-
type: "button",
|
|
35008
|
-
onClick: () => onChange([...rules, emptyRule()]),
|
|
35009
|
-
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",
|
|
35010
|
-
children: [/* @__PURE__ */ jsx(Plus, { className: "h-3.5 w-3.5" }), " Add rule"]
|
|
35011
|
-
})
|
|
35012
|
-
]
|
|
35013
|
-
});
|
|
34826
|
+
/** The Base tab's bands: one always-on band of the chosen mode (none = off). */
|
|
34827
|
+
function bandsFromFormState(state) {
|
|
34828
|
+
if (state.mode === "off") return [];
|
|
34829
|
+
if (state.mode === "continuous") return [alwaysBand("continuous")];
|
|
34830
|
+
return [alwaysBand("events", {
|
|
34831
|
+
...Object.keys(state.triggers).length > 0 ? { triggers: state.triggers } : {},
|
|
34832
|
+
...state.preBufferSec !== void 0 ? { preBufferSec: state.preBufferSec } : {},
|
|
34833
|
+
...state.postBufferSec !== void 0 ? { postBufferSec: state.postBufferSec } : {}
|
|
34834
|
+
})];
|
|
35014
34835
|
}
|
|
35015
34836
|
//#endregion
|
|
35016
|
-
//#region src/composites/cap-settings/
|
|
34837
|
+
//#region src/composites/cap-settings/RecordingBandsEditor.tsx
|
|
35017
34838
|
/** Weekday chips in display order (Mon→Sun); value is `Date.getDay()` (0=Sun). */
|
|
35018
34839
|
var WEEKDAYS = [
|
|
35019
34840
|
{
|
|
@@ -35045,115 +34866,177 @@ var WEEKDAYS = [
|
|
|
35045
34866
|
label: "Sun"
|
|
35046
34867
|
}
|
|
35047
34868
|
];
|
|
35048
|
-
|
|
35049
|
-
|
|
35050
|
-
|
|
35051
|
-
|
|
35052
|
-
|
|
35053
|
-
|
|
35054
|
-
}
|
|
35055
|
-
|
|
35056
|
-
|
|
35057
|
-
|
|
35058
|
-
|
|
34869
|
+
var BAND_MODES = [{
|
|
34870
|
+
value: "continuous",
|
|
34871
|
+
label: "Continuous"
|
|
34872
|
+
}, {
|
|
34873
|
+
value: "events",
|
|
34874
|
+
label: "Events"
|
|
34875
|
+
}];
|
|
34876
|
+
/**
|
|
34877
|
+
* The band table — the ONLY authoring surface for recording intent since the
|
|
34878
|
+
* legacy mode/schedules/triggers/rules model was retired (2026-07-30).
|
|
34879
|
+
*
|
|
34880
|
+
* Each row is one `RecordingBand`: when it applies (weekdays + `HH:MM` span,
|
|
34881
|
+
* `end <= start` wraps past midnight) and how it records (continuous, or events
|
|
34882
|
+
* with its own triggers and pre/post buffers). No band covering *now* = nothing
|
|
34883
|
+
* is recorded then; "off" is the absence of a band, never a band value.
|
|
34884
|
+
*/
|
|
34885
|
+
function RecordingBandsEditor({ bands, onChange }) {
|
|
35059
34886
|
return /* @__PURE__ */ jsxs("div", {
|
|
35060
34887
|
className: "space-y-2",
|
|
35061
|
-
children: [
|
|
34888
|
+
children: [bands.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
35062
34889
|
className: "text-[11px] text-foreground-subtle",
|
|
35063
|
-
children: "
|
|
35064
|
-
}) :
|
|
34890
|
+
children: "No bands — nothing is recorded. Add one to start."
|
|
34891
|
+
}) : bands.map((band, i) => /* @__PURE__ */ jsx(BandRow, {
|
|
35065
34892
|
band,
|
|
35066
|
-
onChange: (
|
|
35067
|
-
onRemove: () =>
|
|
34893
|
+
onChange: (patch) => onChange(withBandAt(bands, i, patch)),
|
|
34894
|
+
onRemove: () => onChange(removeBandAt(bands, i))
|
|
35068
34895
|
}, i)), /* @__PURE__ */ jsxs("button", {
|
|
35069
34896
|
type: "button",
|
|
35070
|
-
onClick:
|
|
34897
|
+
onClick: () => onChange([...bands, emptyBand()]),
|
|
35071
34898
|
className: "flex items-center gap-1 rounded-md bg-surface-hover px-2 py-1 text-[11px] text-foreground-subtle hover:text-foreground",
|
|
35072
34899
|
children: [/* @__PURE__ */ jsx(Plus, { className: "h-3 w-3" }), " Add band"]
|
|
35073
34900
|
})]
|
|
35074
34901
|
});
|
|
35075
34902
|
}
|
|
34903
|
+
function numOrUndef(value) {
|
|
34904
|
+
return value === "" ? void 0 : Number(value);
|
|
34905
|
+
}
|
|
35076
34906
|
function BandRow({ band, onChange, onRemove }) {
|
|
35077
|
-
if (band.kind === "always") return /* @__PURE__ */ jsxs("div", {
|
|
35078
|
-
className: "flex items-center gap-2 text-xs",
|
|
35079
|
-
children: [
|
|
35080
|
-
/* @__PURE__ */ jsx("span", {
|
|
35081
|
-
className: "flex-1",
|
|
35082
|
-
children: "Always"
|
|
35083
|
-
}),
|
|
35084
|
-
/* @__PURE__ */ jsx("button", {
|
|
35085
|
-
type: "button",
|
|
35086
|
-
onClick: () => onChange(newBand()),
|
|
35087
|
-
className: "text-foreground-subtle hover:text-foreground underline",
|
|
35088
|
-
children: "Set band"
|
|
35089
|
-
}),
|
|
35090
|
-
/* @__PURE__ */ jsx("button", {
|
|
35091
|
-
type: "button",
|
|
35092
|
-
onClick: onRemove,
|
|
35093
|
-
"aria-label": "Remove band",
|
|
35094
|
-
className: "text-foreground-subtle hover:text-red-500",
|
|
35095
|
-
children: /* @__PURE__ */ jsx(Trash2, { className: "h-3.5 w-3.5" })
|
|
35096
|
-
})
|
|
35097
|
-
]
|
|
35098
|
-
});
|
|
35099
|
-
const days = band.days ?? [];
|
|
35100
34907
|
const toggleDay = (value) => {
|
|
35101
|
-
const
|
|
35102
|
-
onChange({
|
|
35103
|
-
...band,
|
|
35104
|
-
days: next.length > 0 ? next : void 0
|
|
35105
|
-
});
|
|
34908
|
+
const current = band.days.length === 0 ? WEEKDAYS.map((d) => d.value) : band.days;
|
|
34909
|
+
onChange({ days: current.includes(value) ? current.filter((d) => d !== value) : [...current, value] });
|
|
35106
34910
|
};
|
|
34911
|
+
const setTriggers = (patch) => onChange({ triggers: {
|
|
34912
|
+
...band.triggers,
|
|
34913
|
+
...patch
|
|
34914
|
+
} });
|
|
35107
34915
|
return /* @__PURE__ */ jsxs("div", {
|
|
35108
34916
|
className: "space-y-1.5 rounded-md border border-border p-2",
|
|
35109
|
-
children: [
|
|
35110
|
-
|
|
35111
|
-
|
|
35112
|
-
|
|
35113
|
-
|
|
35114
|
-
|
|
35115
|
-
|
|
35116
|
-
|
|
35117
|
-
start: e.target.value
|
|
34917
|
+
children: [
|
|
34918
|
+
/* @__PURE__ */ jsxs("div", {
|
|
34919
|
+
className: "flex flex-wrap items-center gap-2 text-xs",
|
|
34920
|
+
children: [
|
|
34921
|
+
/* @__PURE__ */ jsx("input", {
|
|
34922
|
+
type: "time",
|
|
34923
|
+
"aria-label": "Band start",
|
|
34924
|
+
value: band.start,
|
|
34925
|
+
onChange: (e) => onChange({ start: e.target.value }),
|
|
34926
|
+
className: "rounded-md border border-border bg-background px-1 py-0.5"
|
|
35118
34927
|
}),
|
|
35119
|
-
|
|
35120
|
-
|
|
35121
|
-
|
|
35122
|
-
className: "text-foreground-subtle",
|
|
35123
|
-
children: "→"
|
|
35124
|
-
}),
|
|
35125
|
-
/* @__PURE__ */ jsx("input", {
|
|
35126
|
-
type: "time",
|
|
35127
|
-
value: band.end,
|
|
35128
|
-
onChange: (e) => onChange({
|
|
35129
|
-
...band,
|
|
35130
|
-
end: e.target.value
|
|
34928
|
+
/* @__PURE__ */ jsx("span", {
|
|
34929
|
+
className: "text-foreground-subtle",
|
|
34930
|
+
children: "→"
|
|
35131
34931
|
}),
|
|
35132
|
-
|
|
35133
|
-
|
|
35134
|
-
|
|
35135
|
-
|
|
35136
|
-
|
|
35137
|
-
|
|
35138
|
-
|
|
35139
|
-
|
|
35140
|
-
|
|
35141
|
-
|
|
35142
|
-
|
|
35143
|
-
|
|
35144
|
-
|
|
35145
|
-
|
|
35146
|
-
|
|
35147
|
-
|
|
35148
|
-
|
|
35149
|
-
|
|
35150
|
-
|
|
35151
|
-
|
|
35152
|
-
|
|
35153
|
-
|
|
35154
|
-
|
|
35155
|
-
|
|
35156
|
-
|
|
34932
|
+
/* @__PURE__ */ jsx("input", {
|
|
34933
|
+
type: "time",
|
|
34934
|
+
"aria-label": "Band end",
|
|
34935
|
+
value: band.end,
|
|
34936
|
+
onChange: (e) => onChange({ end: e.target.value }),
|
|
34937
|
+
className: "rounded-md border border-border bg-background px-1 py-0.5"
|
|
34938
|
+
}),
|
|
34939
|
+
/* @__PURE__ */ jsx("span", {
|
|
34940
|
+
className: "flex gap-1",
|
|
34941
|
+
children: BAND_MODES.map((m) => /* @__PURE__ */ jsx("button", {
|
|
34942
|
+
type: "button",
|
|
34943
|
+
onClick: () => onChange({ mode: m.value }),
|
|
34944
|
+
className: `rounded px-2 py-0.5 ${band.mode === m.value ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
34945
|
+
children: m.label
|
|
34946
|
+
}, m.value))
|
|
34947
|
+
}),
|
|
34948
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1" }),
|
|
34949
|
+
/* @__PURE__ */ jsx("button", {
|
|
34950
|
+
type: "button",
|
|
34951
|
+
onClick: onRemove,
|
|
34952
|
+
"aria-label": "Remove band",
|
|
34953
|
+
className: "text-foreground-subtle hover:text-red-500",
|
|
34954
|
+
children: /* @__PURE__ */ jsx(Trash2, { className: "h-3.5 w-3.5" })
|
|
34955
|
+
})
|
|
34956
|
+
]
|
|
34957
|
+
}),
|
|
34958
|
+
/* @__PURE__ */ jsxs("div", {
|
|
34959
|
+
className: "flex flex-wrap gap-1",
|
|
34960
|
+
children: [WEEKDAYS.map((d) => {
|
|
34961
|
+
return /* @__PURE__ */ jsx("button", {
|
|
34962
|
+
type: "button",
|
|
34963
|
+
onClick: () => toggleDay(d.value),
|
|
34964
|
+
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"}`,
|
|
34965
|
+
children: d.label
|
|
34966
|
+
}, d.value);
|
|
34967
|
+
}), band.days.length === 0 ? /* @__PURE__ */ jsx("span", {
|
|
34968
|
+
className: "self-center text-[10px] text-foreground-subtle",
|
|
34969
|
+
children: "every day"
|
|
34970
|
+
}) : null]
|
|
34971
|
+
}),
|
|
34972
|
+
band.mode === "events" ? /* @__PURE__ */ jsxs("div", {
|
|
34973
|
+
className: "space-y-1.5 border-t border-border pt-1.5",
|
|
34974
|
+
children: [
|
|
34975
|
+
/* @__PURE__ */ jsxs("label", {
|
|
34976
|
+
className: "flex items-center gap-2 text-xs",
|
|
34977
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
34978
|
+
type: "checkbox",
|
|
34979
|
+
checked: band.triggers?.motion ?? false,
|
|
34980
|
+
onChange: (e) => setTriggers({ motion: e.target.checked ? true : void 0 })
|
|
34981
|
+
}), "Motion"]
|
|
34982
|
+
}),
|
|
34983
|
+
/* @__PURE__ */ jsxs("label", {
|
|
34984
|
+
className: "flex items-center gap-2 text-xs",
|
|
34985
|
+
children: [
|
|
34986
|
+
/* @__PURE__ */ jsx("input", {
|
|
34987
|
+
type: "checkbox",
|
|
34988
|
+
checked: band.triggers?.audioThresholdDbfs != null,
|
|
34989
|
+
onChange: (e) => setTriggers({ audioThresholdDbfs: e.target.checked ? -30 : void 0 })
|
|
34990
|
+
}),
|
|
34991
|
+
"Audio above threshold",
|
|
34992
|
+
band.triggers?.audioThresholdDbfs != null ? /* @__PURE__ */ jsx("input", {
|
|
34993
|
+
type: "number",
|
|
34994
|
+
"aria-label": "Audio threshold dBFS",
|
|
34995
|
+
value: band.triggers.audioThresholdDbfs,
|
|
34996
|
+
onChange: (e) => setTriggers({ audioThresholdDbfs: numOrUndef(e.target.value) }),
|
|
34997
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-0.5 text-xs"
|
|
34998
|
+
}) : null,
|
|
34999
|
+
/* @__PURE__ */ jsx("span", {
|
|
35000
|
+
className: "text-foreground-subtle",
|
|
35001
|
+
children: "dBFS"
|
|
35002
|
+
})
|
|
35003
|
+
]
|
|
35004
|
+
}),
|
|
35005
|
+
/* @__PURE__ */ jsxs("div", {
|
|
35006
|
+
className: "flex flex-wrap items-center gap-3 text-xs",
|
|
35007
|
+
children: [/* @__PURE__ */ jsxs("label", {
|
|
35008
|
+
className: "flex items-center gap-1",
|
|
35009
|
+
children: [
|
|
35010
|
+
"Pre-buffer",
|
|
35011
|
+
/* @__PURE__ */ jsx("input", {
|
|
35012
|
+
type: "number",
|
|
35013
|
+
min: 0,
|
|
35014
|
+
value: band.preBufferSec ?? "",
|
|
35015
|
+
placeholder: "0",
|
|
35016
|
+
onChange: (e) => onChange({ preBufferSec: numOrUndef(e.target.value) }),
|
|
35017
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35018
|
+
}),
|
|
35019
|
+
"s"
|
|
35020
|
+
]
|
|
35021
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
35022
|
+
className: "flex items-center gap-1",
|
|
35023
|
+
children: [
|
|
35024
|
+
"Post-buffer",
|
|
35025
|
+
/* @__PURE__ */ jsx("input", {
|
|
35026
|
+
type: "number",
|
|
35027
|
+
min: 0,
|
|
35028
|
+
value: band.postBufferSec ?? "",
|
|
35029
|
+
placeholder: "0",
|
|
35030
|
+
onChange: (e) => onChange({ postBufferSec: numOrUndef(e.target.value) }),
|
|
35031
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35032
|
+
}),
|
|
35033
|
+
"s"
|
|
35034
|
+
]
|
|
35035
|
+
})]
|
|
35036
|
+
})
|
|
35037
|
+
]
|
|
35038
|
+
}) : null
|
|
35039
|
+
]
|
|
35157
35040
|
});
|
|
35158
35041
|
}
|
|
35159
35042
|
//#endregion
|
|
@@ -35177,16 +35060,15 @@ var MODES = [
|
|
|
35177
35060
|
label: "Continuous"
|
|
35178
35061
|
}
|
|
35179
35062
|
];
|
|
35180
|
-
function RecordingSettings({ initial, saving, onSave }) {
|
|
35063
|
+
function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regeneratingStrips }) {
|
|
35181
35064
|
const [tab, setTab] = useState(isAdvancedConfig(initial) ? "advanced" : "base");
|
|
35182
35065
|
const [base, setBase] = useState(formStateFromConfig(initial));
|
|
35183
|
-
const [
|
|
35184
|
-
const [rules, setRules] = useState(initial.rules ? [...initial.rules] : []);
|
|
35066
|
+
const [bands, setBands] = useState([...initial.bands]);
|
|
35185
35067
|
const [common, setCommon] = useState({
|
|
35186
35068
|
profiles: initial.profiles,
|
|
35187
35069
|
segmentSeconds: initial.segmentSeconds,
|
|
35188
35070
|
retention: initial.retention,
|
|
35189
|
-
|
|
35071
|
+
stripsEnabled: initial.stripsEnabled
|
|
35190
35072
|
});
|
|
35191
35073
|
const ret = common.retention ?? {};
|
|
35192
35074
|
const setRet = (patch) => setCommon({
|
|
@@ -35197,10 +35079,6 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35197
35079
|
}
|
|
35198
35080
|
});
|
|
35199
35081
|
const numOrUndef = (v) => v === "" ? void 0 : Number(v);
|
|
35200
|
-
const parsePreset = (v) => {
|
|
35201
|
-
const parsed = ScrubThumbnailPresetSchema.safeParse(v);
|
|
35202
|
-
return parsed.success ? parsed.data : DEFAULT_SCRUB_THUMBNAIL_PRESET;
|
|
35203
|
-
};
|
|
35204
35082
|
const toggleProfile = (p) => {
|
|
35205
35083
|
const cur = common.profiles ?? [...PROFILES];
|
|
35206
35084
|
const next = cur.includes(p) ? cur.filter((x) => x !== p) : [...cur, p];
|
|
@@ -35217,24 +35095,31 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35217
35095
|
}
|
|
35218
35096
|
});
|
|
35219
35097
|
const switchTab = (next) => {
|
|
35220
|
-
if (next === "advanced"
|
|
35098
|
+
if (next === "advanced") setBands(bandsFromFormState(base));
|
|
35099
|
+
else setBase(formStateFromConfig({
|
|
35100
|
+
enabled: bands.length > 0,
|
|
35101
|
+
bands
|
|
35102
|
+
}));
|
|
35221
35103
|
setTab(next);
|
|
35222
35104
|
};
|
|
35223
35105
|
const handleSave = () => {
|
|
35224
|
-
|
|
35225
|
-
...base,
|
|
35226
|
-
profiles: common.profiles,
|
|
35227
|
-
segmentSeconds: common.segmentSeconds,
|
|
35228
|
-
retention: common.retention,
|
|
35229
|
-
scrubThumbnails: common.scrubThumbnails
|
|
35230
|
-
}));
|
|
35231
|
-
else onSave({
|
|
35232
|
-
enabled: advEnabled,
|
|
35233
|
-
rules,
|
|
35106
|
+
const shared = {
|
|
35234
35107
|
profiles: common.profiles ? [...common.profiles] : void 0,
|
|
35235
35108
|
segmentSeconds: common.segmentSeconds,
|
|
35236
35109
|
retention: common.retention,
|
|
35237
|
-
|
|
35110
|
+
...common.stripsEnabled === void 0 ? {} : { stripsEnabled: common.stripsEnabled }
|
|
35111
|
+
};
|
|
35112
|
+
if (tab === "base") onSave({
|
|
35113
|
+
...configFromFormState({
|
|
35114
|
+
...base,
|
|
35115
|
+
...shared
|
|
35116
|
+
}),
|
|
35117
|
+
...shared
|
|
35118
|
+
});
|
|
35119
|
+
else onSave({
|
|
35120
|
+
enabled: bands.length > 0,
|
|
35121
|
+
bands,
|
|
35122
|
+
...shared
|
|
35238
35123
|
});
|
|
35239
35124
|
};
|
|
35240
35125
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -35246,7 +35131,7 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35246
35131
|
type: "button",
|
|
35247
35132
|
onClick: () => switchTab(t),
|
|
35248
35133
|
className: `rounded px-2.5 py-1 ${tab === t ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
35249
|
-
children: t === "base" ? "Base" : "Advanced (
|
|
35134
|
+
children: t === "base" ? "Base" : "Advanced (bands)"
|
|
35250
35135
|
}, t))
|
|
35251
35136
|
}),
|
|
35252
35137
|
tab === "base" ? /* @__PURE__ */ jsxs("div", {
|
|
@@ -35267,16 +35152,17 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35267
35152
|
children: m.label
|
|
35268
35153
|
}, m.value))]
|
|
35269
35154
|
}),
|
|
35270
|
-
base.mode !== "off" ? /* @__PURE__ */ jsxs("
|
|
35271
|
-
className: "
|
|
35272
|
-
children:
|
|
35273
|
-
|
|
35274
|
-
|
|
35275
|
-
|
|
35276
|
-
|
|
35277
|
-
|
|
35278
|
-
|
|
35279
|
-
|
|
35155
|
+
base.mode !== "off" ? /* @__PURE__ */ jsxs("p", {
|
|
35156
|
+
className: "text-[11px] text-foreground-subtle",
|
|
35157
|
+
children: [
|
|
35158
|
+
"Records 24/7. Use ",
|
|
35159
|
+
/* @__PURE__ */ jsx("span", {
|
|
35160
|
+
className: "font-medium",
|
|
35161
|
+
children: "Advanced (bands)"
|
|
35162
|
+
}),
|
|
35163
|
+
" to restrict hours or weekdays, or to mix continuous and event windows."
|
|
35164
|
+
]
|
|
35165
|
+
}) : null,
|
|
35280
35166
|
base.mode === "events" ? /* @__PURE__ */ jsxs("div", {
|
|
35281
35167
|
className: "space-y-2",
|
|
35282
35168
|
children: [
|
|
@@ -35354,22 +35240,22 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35354
35240
|
]
|
|
35355
35241
|
}) : null
|
|
35356
35242
|
]
|
|
35357
|
-
}) : /* @__PURE__ */
|
|
35243
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
35358
35244
|
className: "space-y-4",
|
|
35359
|
-
children:
|
|
35360
|
-
|
|
35361
|
-
|
|
35362
|
-
|
|
35363
|
-
|
|
35364
|
-
|
|
35365
|
-
|
|
35366
|
-
|
|
35367
|
-
|
|
35368
|
-
|
|
35369
|
-
|
|
35370
|
-
|
|
35371
|
-
|
|
35372
|
-
|
|
35245
|
+
children: /* @__PURE__ */ jsxs("div", { children: [
|
|
35246
|
+
/* @__PURE__ */ jsx("div", {
|
|
35247
|
+
className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
|
|
35248
|
+
children: "Recording bands"
|
|
35249
|
+
}),
|
|
35250
|
+
/* @__PURE__ */ jsx(RecordingBandsEditor, {
|
|
35251
|
+
bands,
|
|
35252
|
+
onChange: setBands
|
|
35253
|
+
}),
|
|
35254
|
+
/* @__PURE__ */ jsx("p", {
|
|
35255
|
+
className: "mt-1.5 text-[11px] text-foreground-subtle",
|
|
35256
|
+
children: "A band says WHEN to record and HOW. Nothing is recorded outside every band — an empty table means this camera is off."
|
|
35257
|
+
})
|
|
35258
|
+
] })
|
|
35373
35259
|
}),
|
|
35374
35260
|
/* @__PURE__ */ jsxs("div", {
|
|
35375
35261
|
className: "flex flex-wrap items-center gap-4 text-xs",
|
|
@@ -35408,27 +35294,30 @@ function RecordingSettings({ initial, saving, onSave }) {
|
|
|
35408
35294
|
}),
|
|
35409
35295
|
/* @__PURE__ */ jsxs("label", {
|
|
35410
35296
|
className: "flex items-center gap-1",
|
|
35411
|
-
children: [/* @__PURE__ */ jsx("
|
|
35412
|
-
|
|
35413
|
-
|
|
35414
|
-
}), /* @__PURE__ */ jsx("select", {
|
|
35415
|
-
value: common.scrubThumbnails ?? DEFAULT_SCRUB_THUMBNAIL_PRESET,
|
|
35297
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
35298
|
+
type: "checkbox",
|
|
35299
|
+
checked: common.stripsEnabled === true,
|
|
35416
35300
|
onChange: (e) => setCommon({
|
|
35417
35301
|
...common,
|
|
35418
|
-
|
|
35419
|
-
})
|
|
35420
|
-
|
|
35421
|
-
|
|
35422
|
-
|
|
35423
|
-
children: SCRUB_THUMBNAIL_PRESET_LABELS[p]
|
|
35424
|
-
}, p))
|
|
35302
|
+
stripsEnabled: e.target.checked
|
|
35303
|
+
})
|
|
35304
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
35305
|
+
className: "text-foreground-subtle",
|
|
35306
|
+
children: "Scrub thumbnail strips"
|
|
35425
35307
|
})]
|
|
35426
|
-
})
|
|
35308
|
+
}),
|
|
35309
|
+
onRegenerateStrips ? /* @__PURE__ */ jsx("button", {
|
|
35310
|
+
type: "button",
|
|
35311
|
+
onClick: onRegenerateStrips,
|
|
35312
|
+
disabled: regeneratingStrips === true,
|
|
35313
|
+
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",
|
|
35314
|
+
children: regeneratingStrips === true ? "Regenerating…" : "Regenerate strips"
|
|
35315
|
+
}) : null
|
|
35427
35316
|
]
|
|
35428
35317
|
}),
|
|
35429
35318
|
/* @__PURE__ */ jsx("p", {
|
|
35430
35319
|
className: "text-[11px] text-foreground-subtle",
|
|
35431
|
-
children: "
|
|
35320
|
+
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."
|
|
35432
35321
|
}),
|
|
35433
35322
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
35434
35323
|
className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
|
|
@@ -36677,6 +36566,14 @@ function RecordingPanel({ deviceId }) {
|
|
|
36677
36566
|
const configQuery = useRecordingGetDeviceConfig({ deviceId });
|
|
36678
36567
|
const setConfig = useRecordingSetDeviceConfig();
|
|
36679
36568
|
const rescanStorage = useRecordingRescanStorage();
|
|
36569
|
+
const customAction = useAddonsCustom();
|
|
36570
|
+
const regenerateStrips = useCallback(() => {
|
|
36571
|
+
customAction.mutate({
|
|
36572
|
+
addonId: "recorder",
|
|
36573
|
+
action: "regenerateStrips",
|
|
36574
|
+
input: { deviceId }
|
|
36575
|
+
});
|
|
36576
|
+
}, [customAction, deviceId]);
|
|
36680
36577
|
const saveConfig = (config) => {
|
|
36681
36578
|
setConfig.mutate({
|
|
36682
36579
|
deviceId,
|
|
@@ -36718,7 +36615,9 @@ function RecordingPanel({ deviceId }) {
|
|
|
36718
36615
|
children: resolvedConfig ? /* @__PURE__ */ jsx(RecordingSettings, {
|
|
36719
36616
|
initial: resolvedConfig,
|
|
36720
36617
|
saving: setConfig.isPending,
|
|
36721
|
-
onSave: saveConfig
|
|
36618
|
+
onSave: saveConfig,
|
|
36619
|
+
onRegenerateStrips: regenerateStrips,
|
|
36620
|
+
regeneratingStrips: customAction.isPending
|
|
36722
36621
|
}, JSON.stringify(resolvedConfig)) : /* @__PURE__ */ jsx("div", {
|
|
36723
36622
|
className: "px-1 py-2 text-xs text-foreground-subtle",
|
|
36724
36623
|
children: "Loading settings…"
|
|
@@ -40284,6 +40183,21 @@ function DetectionBoxes({ detections, frameWidth, frameHeight }) {
|
|
|
40284
40183
|
}
|
|
40285
40184
|
//#endregion
|
|
40286
40185
|
//#region src/composites/camera-stream-player.tsx
|
|
40186
|
+
/**
|
|
40187
|
+
* Silence (or restore) a live WebRTC stream FOR REAL.
|
|
40188
|
+
*
|
|
40189
|
+
* `video.muted` alone is not enough: iOS WebKit keeps playing a
|
|
40190
|
+
* `MediaStream`'s audio track through a muted element, which is why live audio
|
|
40191
|
+
* kept sounding under recorded playback on the viewer. Gating the audio TRACK
|
|
40192
|
+
* (`track.enabled`) is what actually stops it, so both are set together — and
|
|
40193
|
+
* re-applied at every stream swap, because a freshly-attached stream arrives
|
|
40194
|
+
* with its tracks enabled whatever the element says.
|
|
40195
|
+
*/
|
|
40196
|
+
function applyStreamMute(video, muted) {
|
|
40197
|
+
video.muted = muted;
|
|
40198
|
+
const stream = video.srcObject;
|
|
40199
|
+
if (stream instanceof MediaStream) for (const track of stream.getAudioTracks()) track.enabled = !muted;
|
|
40200
|
+
}
|
|
40287
40201
|
function isTouchDevice() {
|
|
40288
40202
|
if (typeof window === "undefined") return false;
|
|
40289
40203
|
return window.matchMedia("(hover: none) and (pointer: coarse)").matches || typeof navigator !== "undefined" && navigator.maxTouchPoints > 0 || "ontouchstart" in window;
|
|
@@ -40366,6 +40280,11 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40366
40280
|
const [state, setState] = useState("idle");
|
|
40367
40281
|
const [errorMessage, setErrorMessage] = useState("");
|
|
40368
40282
|
const [isMuted, setIsMuted] = useState(initialMuted);
|
|
40283
|
+
/** Read by the async stream-swap closures: a freshly-promoted stream must
|
|
40284
|
+
* arrive already respecting the CURRENT mute, not the one captured at
|
|
40285
|
+
* connect time. */
|
|
40286
|
+
const isMutedRef = useRef(isMuted);
|
|
40287
|
+
isMutedRef.current = isMuted;
|
|
40369
40288
|
const [isFullscreen, setIsFullscreen] = useState(false);
|
|
40370
40289
|
const [isPipSupported, setIsPipSupported] = useState(false);
|
|
40371
40290
|
const isTouch = isTouchDevice();
|
|
@@ -40495,6 +40414,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40495
40414
|
pcRef.current = pc;
|
|
40496
40415
|
if (videoRef.current) {
|
|
40497
40416
|
videoRef.current.srcObject = combinedStream;
|
|
40417
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40498
40418
|
videoRef.current.play().catch(() => {});
|
|
40499
40419
|
}
|
|
40500
40420
|
if (oldPc && oldPc !== pc) try {
|
|
@@ -40514,6 +40434,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40514
40434
|
}
|
|
40515
40435
|
if (videoRef.current) {
|
|
40516
40436
|
videoRef.current.srcObject = combinedStream;
|
|
40437
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40517
40438
|
videoRef.current.play().catch(() => {});
|
|
40518
40439
|
}
|
|
40519
40440
|
};
|
|
@@ -40600,6 +40521,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40600
40521
|
whepStream.addTrack(event.track);
|
|
40601
40522
|
if (videoRef.current) {
|
|
40602
40523
|
videoRef.current.srcObject = whepStream;
|
|
40524
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40603
40525
|
videoRef.current.play().catch(() => {});
|
|
40604
40526
|
}
|
|
40605
40527
|
};
|
|
@@ -40672,6 +40594,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40672
40594
|
pcRef.current = pc;
|
|
40673
40595
|
if (videoRef.current) {
|
|
40674
40596
|
videoRef.current.srcObject = combinedStream;
|
|
40597
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40675
40598
|
videoRef.current.play().catch(() => {});
|
|
40676
40599
|
}
|
|
40677
40600
|
if (oldPc && oldPc !== pc) try {
|
|
@@ -40692,6 +40615,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40692
40615
|
}
|
|
40693
40616
|
if (videoRef.current) {
|
|
40694
40617
|
videoRef.current.srcObject = combinedStream;
|
|
40618
|
+
applyStreamMute(videoRef.current, isMutedRef.current);
|
|
40695
40619
|
videoRef.current.play().catch(() => {});
|
|
40696
40620
|
}
|
|
40697
40621
|
};
|
|
@@ -41016,7 +40940,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41016
40940
|
mountedRef.current = false;
|
|
41017
40941
|
cleanup();
|
|
41018
40942
|
};
|
|
41019
|
-
}, [
|
|
40943
|
+
}, []);
|
|
41020
40944
|
const hasSignaledRef = useRef(false);
|
|
41021
40945
|
useEffect(() => {
|
|
41022
40946
|
if (!autoPlay) return;
|
|
@@ -41054,6 +40978,23 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41054
40978
|
}
|
|
41055
40979
|
connect();
|
|
41056
40980
|
};
|
|
40981
|
+
const prevServerUrlRef = useRef(serverUrl);
|
|
40982
|
+
const prevStreamKeyRef = useRef(streamKey);
|
|
40983
|
+
useEffect(() => {
|
|
40984
|
+
const serverChanged = prevServerUrlRef.current !== serverUrl;
|
|
40985
|
+
const keyChanged = prevStreamKeyRef.current !== streamKey;
|
|
40986
|
+
prevServerUrlRef.current = serverUrl;
|
|
40987
|
+
prevStreamKeyRef.current = streamKey;
|
|
40988
|
+
if (!serverChanged && !keyChanged) return;
|
|
40989
|
+
if (!mountedRef.current) return;
|
|
40990
|
+
reconnectAttemptsRef.current = 0;
|
|
40991
|
+
if (serverChanged) {
|
|
40992
|
+
cleanup();
|
|
40993
|
+
connect();
|
|
40994
|
+
return;
|
|
40995
|
+
}
|
|
40996
|
+
handleSeamlessReconnect();
|
|
40997
|
+
}, [serverUrl, streamKey]);
|
|
41057
40998
|
const prevReconnectSignalRef = useRef(reconnectSignal);
|
|
41058
40999
|
useEffect(() => {
|
|
41059
41000
|
if (prevReconnectSignalRef.current === reconnectSignal) return;
|
|
@@ -41063,8 +41004,9 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41063
41004
|
}, [reconnectSignal]);
|
|
41064
41005
|
const toggleMute = () => {
|
|
41065
41006
|
if (videoRef.current) {
|
|
41066
|
-
|
|
41067
|
-
|
|
41007
|
+
const next = !videoRef.current.muted;
|
|
41008
|
+
applyStreamMute(videoRef.current, next);
|
|
41009
|
+
setIsMuted(next);
|
|
41068
41010
|
}
|
|
41069
41011
|
};
|
|
41070
41012
|
const toggleFullscreen = async () => {
|
|
@@ -41292,7 +41234,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41292
41234
|
setIsMuted(initialMuted);
|
|
41293
41235
|
const video = videoRef.current;
|
|
41294
41236
|
if (!video) return;
|
|
41295
|
-
video
|
|
41237
|
+
applyStreamMute(video, initialMuted);
|
|
41296
41238
|
if (!initialMuted) video.play().catch(() => {});
|
|
41297
41239
|
}, [initialMuted]);
|
|
41298
41240
|
const showToolbarBriefly = () => {
|
|
@@ -42404,7 +42346,7 @@ function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIce
|
|
|
42404
42346
|
extraOverlay,
|
|
42405
42347
|
ptzOverlayVisible && ptzOverlay
|
|
42406
42348
|
] }) : void 0
|
|
42407
|
-
}
|
|
42349
|
+
})
|
|
42408
42350
|
}) : /* @__PURE__ */ jsx(SnapshotPreview, {
|
|
42409
42351
|
src: snapshotSrc ?? null,
|
|
42410
42352
|
isLoading: snapshotLoading,
|
|
@@ -46785,6 +46727,15 @@ function useDeviceDetections(trpc, deviceId) {
|
|
|
46785
46727
|
* @param deviceId - numeric device ID (null = disabled)
|
|
46786
46728
|
* @param pollIntervalMs - how often to refresh profile slots (default: 5000)
|
|
46787
46729
|
*/
|
|
46730
|
+
/** TTL for the TURN/STUN credential cache. Short enough that rotated creds
|
|
46731
|
+
* are picked up promptly, long enough to cover a connect + several profile
|
|
46732
|
+
* switches without re-paying the fetch. */
|
|
46733
|
+
var TURN_CACHE_TTL_MS = 5 * 6e4;
|
|
46734
|
+
/** Keyed on the caller's trpc client object (stable per connected system —
|
|
46735
|
+
* NOT on `trpc.turnProvider`, which is a proxy minted fresh on every property
|
|
46736
|
+
* access), so two admin tabs pointed at different hubs never cross-serve
|
|
46737
|
+
* credentials. An unstable key degrades to a cache miss, never to wrong creds. */
|
|
46738
|
+
var turnServersCache = /* @__PURE__ */ new WeakMap();
|
|
46788
46739
|
function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
46789
46740
|
const [remoteStreams, setRemoteStreams] = useState([]);
|
|
46790
46741
|
useEffect(() => {
|
|
@@ -46854,18 +46805,28 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
|
46854
46805
|
}, [deviceId, remoteStreams]);
|
|
46855
46806
|
const getIceServers = useCallback(async () => {
|
|
46856
46807
|
if (!trpc.turnProvider) return void 0;
|
|
46808
|
+
const cached = turnServersCache.get(trpc);
|
|
46809
|
+
if (cached && Date.now() - cached.fetchedAt < TURN_CACHE_TTL_MS) return cached.servers;
|
|
46857
46810
|
try {
|
|
46858
|
-
|
|
46811
|
+
const mapped = (await trpc.turnProvider.getTurnServers.query()).map((s) => {
|
|
46859
46812
|
return {
|
|
46860
46813
|
urls: typeof s.urls === "string" ? s.urls : [...s.urls],
|
|
46861
46814
|
...s.username !== void 0 ? { username: s.username } : {},
|
|
46862
46815
|
...s.credential !== void 0 ? { credential: s.credential } : {}
|
|
46863
46816
|
};
|
|
46864
46817
|
});
|
|
46818
|
+
turnServersCache.set(trpc, {
|
|
46819
|
+
servers: mapped,
|
|
46820
|
+
fetchedAt: Date.now()
|
|
46821
|
+
});
|
|
46822
|
+
return mapped;
|
|
46865
46823
|
} catch {
|
|
46866
|
-
return;
|
|
46824
|
+
return cached?.servers;
|
|
46867
46825
|
}
|
|
46868
46826
|
}, [trpc]);
|
|
46827
|
+
useEffect(() => {
|
|
46828
|
+
getIceServers();
|
|
46829
|
+
}, [getIceServers]);
|
|
46869
46830
|
const createSession = useCallback(async (target, hints) => {
|
|
46870
46831
|
if (deviceId === null) throw new Error("No device selected");
|
|
46871
46832
|
const res = await trpc.webrtcSession.createSession.mutate({
|
|
@@ -47235,4 +47196,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
|
|
|
47235
47196
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
47236
47197
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
47237
47198
|
//#endregion
|
|
47238
|
-
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, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, 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 };
|
|
47199
|
+
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, 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 };
|