@camstack/ui-library 1.2.16 → 1.2.18
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/camera-stream-player.d.ts +16 -1
- package/dist/composites/cap-settings/RecordingSettings.d.ts +1 -5
- package/dist/composites/copy-button.d.ts +11 -2
- package/dist/composites/data-table-layout.d.ts +35 -0
- package/dist/composites/data-table.d.ts +9 -1
- package/dist/composites/device-list/columns.d.ts +27 -2
- package/dist/composites/index.d.ts +6 -0
- package/dist/composites/key-value-list.d.ts +8 -0
- package/dist/composites/reconnect-schedule.d.ts +32 -0
- package/dist/composites/setting-row.d.ts +24 -0
- package/dist/generated/system-hooks.d.ts +4 -0
- package/dist/hooks/turn-server-cache.d.ts +77 -0
- package/dist/index.cjs +407 -151
- package/dist/index.js +396 -152
- package/dist/lib/responsive.d.ts +28 -0
- package/dist/lib/tailwind-variants.d.ts +27 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3656,6 +3656,34 @@ var GRID_PAIRED = "grid grid-cols-1 lg:grid-cols-2";
|
|
|
3656
3656
|
var SPLIT_PANEL_OUTER = "flex flex-col-reverse md:flex-row";
|
|
3657
3657
|
/** Sidebar narrow lane in a SPLIT_PANEL_OUTER layout. */
|
|
3658
3658
|
var SPLIT_PANEL_SIDE = "w-full md:w-44 lg:w-52 md:flex-shrink-0 border-b md:border-b-0 md:border-l border-border";
|
|
3659
|
+
/**
|
|
3660
|
+
* The tier boundary at which a settings label/value row stops stacking.
|
|
3661
|
+
*
|
|
3662
|
+
* Below it (L1 — compact) the row is ONE column: label on its own line, value
|
|
3663
|
+
* on the next at full width. Above it the row is label-left / value-right as
|
|
3664
|
+
* before. The two-column form needs `SETTING_ROW_LABEL`'s lane plus a readable
|
|
3665
|
+
* value beside it; a phone has neither, and the failure mode is not "cramped"
|
|
3666
|
+
* but "the value is the part that gets cut" — the one thing the operator
|
|
3667
|
+
* opened the page to read.
|
|
3668
|
+
*/
|
|
3669
|
+
var SETTING_ROW_STACK_BREAKPOINT = "sm";
|
|
3670
|
+
/** Outer row: single column at L1, label/value columns from `sm` up. */
|
|
3671
|
+
var SETTING_ROW = "flex min-w-0 flex-col gap-0.5 py-1.5 sm:flex-row sm:items-center";
|
|
3672
|
+
/** Label lane. Full width (and free to wrap) at L1; a fixed lane from `sm` up. */
|
|
3673
|
+
var SETTING_ROW_LABEL = "min-w-0 text-[11px] leading-tight text-foreground-subtle sm:w-32 sm:shrink-0 sm:pr-2";
|
|
3674
|
+
/**
|
|
3675
|
+
* Value lane — the value text plus its trailing affordances (copy / reveal).
|
|
3676
|
+
* `w-full` at L1 so the value owns the whole row once the label is above it;
|
|
3677
|
+
* `sm:flex-1` makes it share the row again from `sm` up.
|
|
3678
|
+
*/
|
|
3679
|
+
var SETTING_ROW_VALUE = "flex w-full min-w-0 items-center gap-1 sm:flex-1";
|
|
3680
|
+
/**
|
|
3681
|
+
* The value text itself. `break-all` lets an opaque token (a key, a URL) wrap
|
|
3682
|
+
* at L1 instead of being cut mid-word; `sm:truncate` restores the single-line
|
|
3683
|
+
* desktop form, where the row is wide enough for truncation to be a choice
|
|
3684
|
+
* rather than data loss.
|
|
3685
|
+
*/
|
|
3686
|
+
var SETTING_ROW_VALUE_TEXT = "min-w-0 break-all text-xs text-foreground sm:truncate";
|
|
3659
3687
|
/** Section header label (uppercase tracking-wider). */
|
|
3660
3688
|
var TEXT_SECTION_LABEL = "text-[10px] sm:text-[11px] font-semibold text-foreground uppercase tracking-wider";
|
|
3661
3689
|
/** Field label inside a row. */
|
|
@@ -13201,15 +13229,27 @@ var MOBILE_QUERY = "(max-width: 767px)";
|
|
|
13201
13229
|
* so sidebar fans out at the same point grids switch to multi-column.
|
|
13202
13230
|
*/
|
|
13203
13231
|
var MID_QUERY = "(min-width: 768px) and (max-width: 1023px)";
|
|
13232
|
+
/**
|
|
13233
|
+
* `matchMedia` is universal in browsers but absent in bare DOM environments.
|
|
13234
|
+
* These hooks are called from shared primitives (`DataTable` picks its narrow
|
|
13235
|
+
* layout with one), so throwing here takes down the whole page that merely
|
|
13236
|
+
* rendered a table. Where the capability is missing, report the desktop
|
|
13237
|
+
* layout — a widescreen rendering is wrong-looking; a crashed page is gone.
|
|
13238
|
+
*/
|
|
13239
|
+
function matchQuery(query) {
|
|
13240
|
+
if (typeof window.matchMedia !== "function") return null;
|
|
13241
|
+
return window.matchMedia(query);
|
|
13242
|
+
}
|
|
13204
13243
|
function subscribeQuery(query) {
|
|
13205
13244
|
return (callback) => {
|
|
13206
|
-
const mql =
|
|
13245
|
+
const mql = matchQuery(query);
|
|
13246
|
+
if (mql === null) return () => {};
|
|
13207
13247
|
mql.addEventListener("change", callback);
|
|
13208
13248
|
return () => mql.removeEventListener("change", callback);
|
|
13209
13249
|
};
|
|
13210
13250
|
}
|
|
13211
13251
|
function getSnapshot(query) {
|
|
13212
|
-
return () =>
|
|
13252
|
+
return () => matchQuery(query)?.matches ?? false;
|
|
13213
13253
|
}
|
|
13214
13254
|
function getServerSnapshot() {
|
|
13215
13255
|
return false;
|
|
@@ -13627,18 +13667,75 @@ function Breadcrumb({ items, className }) {
|
|
|
13627
13667
|
});
|
|
13628
13668
|
}
|
|
13629
13669
|
//#endregion
|
|
13670
|
+
//#region src/composites/data-table-layout.ts
|
|
13671
|
+
/**
|
|
13672
|
+
* At this many columns and above, `auto` switches a narrow viewport to cards.
|
|
13673
|
+
* Three columns still fit a phone at a readable size; four do not.
|
|
13674
|
+
*/
|
|
13675
|
+
var CARD_MODE_MIN_COLUMNS = 4;
|
|
13676
|
+
function resolveTableLayout({ mode, columnCount, isNarrow }) {
|
|
13677
|
+
if (!isNarrow) return "table";
|
|
13678
|
+
if (mode === "scroll") return "table";
|
|
13679
|
+
if (mode === "cards") return "cards";
|
|
13680
|
+
if (columnCount === 0) return "table";
|
|
13681
|
+
return columnCount >= 4 ? "cards" : "table";
|
|
13682
|
+
}
|
|
13683
|
+
//#endregion
|
|
13684
|
+
//#region src/composites/setting-row.tsx
|
|
13685
|
+
function SettingRow({ label, children, actions, elements = "plain", className, valueClassName }) {
|
|
13686
|
+
const LabelTag = elements === "description" ? "dt" : "span";
|
|
13687
|
+
const ValueTag = elements === "description" ? "dd" : "div";
|
|
13688
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
13689
|
+
"data-setting-row": "",
|
|
13690
|
+
className: cn(SETTING_ROW, className),
|
|
13691
|
+
children: [/* @__PURE__ */ jsx(LabelTag, {
|
|
13692
|
+
"data-setting-row-label": "",
|
|
13693
|
+
className: SETTING_ROW_LABEL,
|
|
13694
|
+
children: label
|
|
13695
|
+
}), /* @__PURE__ */ jsxs(ValueTag, {
|
|
13696
|
+
"data-setting-row-value": "",
|
|
13697
|
+
className: SETTING_ROW_VALUE,
|
|
13698
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
13699
|
+
"data-setting-row-value-text": "",
|
|
13700
|
+
className: cn(SETTING_ROW_VALUE_TEXT, valueClassName),
|
|
13701
|
+
children
|
|
13702
|
+
}), actions !== void 0 && /* @__PURE__ */ jsx("span", {
|
|
13703
|
+
className: "flex shrink-0 items-center gap-0.5",
|
|
13704
|
+
children: actions
|
|
13705
|
+
})]
|
|
13706
|
+
})]
|
|
13707
|
+
});
|
|
13708
|
+
}
|
|
13709
|
+
//#endregion
|
|
13630
13710
|
//#region src/composites/data-table.tsx
|
|
13631
13711
|
var ALIGN_CLASS = {
|
|
13632
13712
|
left: "text-left",
|
|
13633
13713
|
right: "text-right",
|
|
13634
13714
|
center: "text-center"
|
|
13635
13715
|
};
|
|
13636
|
-
function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyMessage, className, bordered = true, rowClassName }) {
|
|
13716
|
+
function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyMessage, className, bordered = true, rowClassName, mobileMode = "auto" }) {
|
|
13717
|
+
const isNarrow = useIsMobile();
|
|
13718
|
+
const layout = resolveTableLayout({
|
|
13719
|
+
mode: mobileMode,
|
|
13720
|
+
columnCount: columns.length,
|
|
13721
|
+
isNarrow
|
|
13722
|
+
});
|
|
13637
13723
|
if (rows.length === 0 && emptyMessage) return /* @__PURE__ */ jsx("div", {
|
|
13638
13724
|
className: `rounded-lg ${bordered ? "border border-border" : ""} bg-surface px-3 py-4 text-xs text-foreground-subtle text-center ${className ?? ""}`,
|
|
13639
13725
|
children: emptyMessage
|
|
13640
13726
|
});
|
|
13641
13727
|
if (rows.length === 0) return null;
|
|
13728
|
+
if (layout === "cards") return /* @__PURE__ */ jsx("div", {
|
|
13729
|
+
className: `space-y-2 ${className ?? ""}`,
|
|
13730
|
+
children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx(DataTableCard, {
|
|
13731
|
+
row,
|
|
13732
|
+
rowIndex,
|
|
13733
|
+
columns,
|
|
13734
|
+
bordered,
|
|
13735
|
+
onRowClick,
|
|
13736
|
+
rowClassName
|
|
13737
|
+
}, rowKey ? rowKey(row, rowIndex) : rowIndex))
|
|
13738
|
+
});
|
|
13642
13739
|
return /* @__PURE__ */ jsx("div", {
|
|
13643
13740
|
className: `rounded-lg ${bordered ? "border border-border" : ""} bg-surface overflow-x-auto ${className ?? ""}`,
|
|
13644
13741
|
children: /* @__PURE__ */ jsxs("table", {
|
|
@@ -13683,6 +13780,36 @@ function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyM
|
|
|
13683
13780
|
})
|
|
13684
13781
|
});
|
|
13685
13782
|
}
|
|
13783
|
+
/**
|
|
13784
|
+
* One row as a card. Columns that carry a plain-text `header` become labelled
|
|
13785
|
+
* `SettingRow`s — the label is the column title and the value gets the full
|
|
13786
|
+
* card width. Columns with no text header (an actions column, a
|
|
13787
|
+
* `headerRender`-only column) have no label to show, so they render as a
|
|
13788
|
+
* full-width strip at the foot of the card.
|
|
13789
|
+
*/
|
|
13790
|
+
function DataTableCard({ row, rowIndex, columns, bordered, onRowClick, rowClassName }) {
|
|
13791
|
+
const labelled = columns.filter((col) => col.header !== void 0 && col.header !== "");
|
|
13792
|
+
const unlabelled = columns.filter((col) => col.header === void 0 || col.header === "");
|
|
13793
|
+
const interactive = onRowClick !== void 0;
|
|
13794
|
+
const extra = rowClassName?.(row, rowIndex) ?? "";
|
|
13795
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
13796
|
+
"data-data-table-card": "",
|
|
13797
|
+
onClick: interactive ? () => onRowClick(row, rowIndex) : void 0,
|
|
13798
|
+
className: [
|
|
13799
|
+
"rounded-lg bg-surface px-3 py-1.5 divide-y divide-border-subtle",
|
|
13800
|
+
bordered ? "border border-border" : "",
|
|
13801
|
+
interactive ? "cursor-pointer hover:bg-primary/5" : "",
|
|
13802
|
+
extra
|
|
13803
|
+
].filter(Boolean).join(" "),
|
|
13804
|
+
children: [labelled.map((col) => /* @__PURE__ */ jsx(SettingRow, {
|
|
13805
|
+
label: col.header,
|
|
13806
|
+
children: col.render(row, rowIndex)
|
|
13807
|
+
}, col.key)), unlabelled.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
13808
|
+
className: "flex flex-wrap items-center justify-end gap-2 py-1.5",
|
|
13809
|
+
children: unlabelled.map((col) => /* @__PURE__ */ jsx("div", { children: col.render(row, rowIndex) }, col.key))
|
|
13810
|
+
})]
|
|
13811
|
+
});
|
|
13812
|
+
}
|
|
13686
13813
|
//#endregion
|
|
13687
13814
|
//#region src/composites/slide-over-panel.tsx
|
|
13688
13815
|
/**
|
|
@@ -15815,18 +15942,21 @@ function StatCard({ value, label, trend, className }) {
|
|
|
15815
15942
|
}
|
|
15816
15943
|
//#endregion
|
|
15817
15944
|
//#region src/composites/key-value-list.tsx
|
|
15945
|
+
/**
|
|
15946
|
+
* A `<dl>` of label/value rows. Layout (including the L1 stacking) is owned by
|
|
15947
|
+
* `SettingRow`; this composite only supplies the description-list semantics.
|
|
15948
|
+
*
|
|
15949
|
+
* The rows used to be `flex items-center h-7` with a `w-1/3` term, so a label
|
|
15950
|
+
* could neither wrap nor stack: on a phone it took a third of the width and
|
|
15951
|
+
* the value took whatever was left.
|
|
15952
|
+
*/
|
|
15818
15953
|
function KeyValueList({ items, className }) {
|
|
15819
15954
|
return /* @__PURE__ */ jsx("dl", {
|
|
15820
15955
|
className: cn("flex flex-col", className),
|
|
15821
|
-
children: items.map((item) => /* @__PURE__ */
|
|
15822
|
-
|
|
15823
|
-
|
|
15824
|
-
|
|
15825
|
-
children: item.key
|
|
15826
|
-
}), /* @__PURE__ */ jsx("dd", {
|
|
15827
|
-
className: "text-foreground text-xs",
|
|
15828
|
-
children: item.value
|
|
15829
|
-
})]
|
|
15956
|
+
children: items.map((item) => /* @__PURE__ */ jsx(SettingRow, {
|
|
15957
|
+
elements: "description",
|
|
15958
|
+
label: item.key,
|
|
15959
|
+
children: item.value
|
|
15830
15960
|
}, item.key))
|
|
15831
15961
|
});
|
|
15832
15962
|
}
|
|
@@ -16194,7 +16324,8 @@ function DeviceGrid({ children, minCardWidth = 220, gap = 3, className }) {
|
|
|
16194
16324
|
* longest). So as the viewport shrinks the HIGHEST-priority-number column
|
|
16195
16325
|
* drops first.
|
|
16196
16326
|
*
|
|
16197
|
-
* name (0) — never hidden;
|
|
16327
|
+
* name (0) — never hidden; pinned left from `md` up (see
|
|
16328
|
+
* `NAME_COLUMN_PIN_CLASS`), scrolls below it
|
|
16198
16329
|
* previewActions (1) — never hidden; carries the live control + status dot
|
|
16199
16330
|
* icon (2) — integration badge; rendered INSIDE the name cell,
|
|
16200
16331
|
* not a standalone column, so it has no breakpoint
|
|
@@ -16246,7 +16377,7 @@ function columnsForContext(ctx) {
|
|
|
16246
16377
|
}
|
|
16247
16378
|
/**
|
|
16248
16379
|
* Lower number = higher priority (kept longest as width shrinks). `name` = 0
|
|
16249
|
-
* (
|
|
16380
|
+
* (never dropped); `previewActions` = 1 (always visible). The optional
|
|
16250
16381
|
* columns drop in REVERSE priority order as width shrinks — highest number
|
|
16251
16382
|
* (`type`) hides first, then `features`. `icon` is a name-cell badge, not a
|
|
16252
16383
|
* standalone column. See `COLUMN_BREAKPOINT_CLASS` for the derived classes.
|
|
@@ -16282,6 +16413,14 @@ var COLUMN_BREAKPOINT_CLASS = {
|
|
|
16282
16413
|
type: "hidden lg:table-cell",
|
|
16283
16414
|
manufacturer: "hidden xl:table-cell"
|
|
16284
16415
|
};
|
|
16416
|
+
/** Pin classes for the NAME `<th>`/`<td>` — never unconditional. */
|
|
16417
|
+
var NAME_COLUMN_PIN_CLASS = "md:sticky md:left-0 md:z-[1]";
|
|
16418
|
+
/**
|
|
16419
|
+
* NAME column width. Narrower below the pin breakpoint so NAME + Preview fit a
|
|
16420
|
+
* phone viewport without a horizontal scroll at all; the roomier desktop width
|
|
16421
|
+
* returns with the pin.
|
|
16422
|
+
*/
|
|
16423
|
+
var NAME_COLUMN_WIDTH_CLASS = "w-44 max-w-[11rem] md:w-64 md:max-w-[16rem]";
|
|
16285
16424
|
//#endregion
|
|
16286
16425
|
//#region src/composites/device-list/hardware.ts
|
|
16287
16426
|
var MANUFACTURER_KEY = "manufacturer";
|
|
@@ -19358,6 +19497,10 @@ var useSettingsStoreInsert = trpc.settingsStore.insert.useMutation;
|
|
|
19358
19497
|
var useSettingsStoreUpdate = trpc.settingsStore.update.useMutation;
|
|
19359
19498
|
/** Generated alias around `trpc.settingsStore.delete.useMutation`. */
|
|
19360
19499
|
var useSettingsStoreDelete = trpc.settingsStore.delete.useMutation;
|
|
19500
|
+
/** Generated alias around `trpc.settingsStore.deleteWhere.useMutation`. */
|
|
19501
|
+
var useSettingsStoreDeleteWhere = trpc.settingsStore.deleteWhere.useMutation;
|
|
19502
|
+
/** Generated alias around `trpc.settingsStore.updateWhere.useMutation`. */
|
|
19503
|
+
var useSettingsStoreUpdateWhere = trpc.settingsStore.updateWhere.useMutation;
|
|
19361
19504
|
/** Generated alias around `trpc.settingsStore.count.useQuery`. */
|
|
19362
19505
|
var useSettingsStoreCount = trpc.settingsStore.count.useQuery;
|
|
19363
19506
|
/** Generated alias around `trpc.settingsStore.histogram.useQuery`. */
|
|
@@ -29409,7 +29552,7 @@ function DeviceItemTableRow(props) {
|
|
|
29409
29552
|
className: cn("group cursor-pointer hover:bg-surface-hover transition-colors", !hasChildren && "border-b border-border-subtle/40", isAccessoryRow && "bg-foreground-subtle/[0.03]", rowSelected && "bg-primary/10", className),
|
|
29410
29553
|
children: [
|
|
29411
29554
|
/* @__PURE__ */ jsx("td", {
|
|
29412
|
-
className: cn("
|
|
29555
|
+
className: cn(NAME_COLUMN_PIN_CLASS, "py-1.5 align-middle pr-2 transition-colors", rowSelected ? "bg-primary/10 group-hover:bg-surface-hover" : isAccessoryRow ? "bg-surface-subtle group-hover:bg-surface-hover" : "bg-surface group-hover:bg-surface-hover", NAME_COLUMN_WIDTH_CLASS, "min-w-0 overflow-hidden", INDENT_CLASS[indentLevel]),
|
|
29413
29556
|
children: /* @__PURE__ */ jsxs("div", {
|
|
29414
29557
|
className: "flex items-center gap-1.5",
|
|
29415
29558
|
children: [selection && /* @__PURE__ */ jsx("input", {
|
|
@@ -30412,7 +30555,7 @@ function TableLayout({ rows, accessoriesByParent, autoExpandedParents, devices,
|
|
|
30412
30555
|
children: [
|
|
30413
30556
|
/* @__PURE__ */ jsx("th", {
|
|
30414
30557
|
"aria-sort": ariaSortFor(sort, "name"),
|
|
30415
|
-
className:
|
|
30558
|
+
className: cn(NAME_COLUMN_PIN_CLASS, NAME_COLUMN_WIDTH_CLASS, "bg-surface text-left px-2 py-2 text-[9.5px] font-medium uppercase tracking-wider text-foreground-subtle"),
|
|
30416
30559
|
children: /* @__PURE__ */ jsx(SortableHeaderButton, {
|
|
30417
30560
|
columnId: "name",
|
|
30418
30561
|
label: "Name",
|
|
@@ -35062,15 +35205,14 @@ var MODES = [
|
|
|
35062
35205
|
label: "Continuous"
|
|
35063
35206
|
}
|
|
35064
35207
|
];
|
|
35065
|
-
function RecordingSettings({ initial, saving, onSave
|
|
35208
|
+
function RecordingSettings({ initial, saving, onSave }) {
|
|
35066
35209
|
const [tab, setTab] = useState(isAdvancedConfig(initial) ? "advanced" : "base");
|
|
35067
35210
|
const [base, setBase] = useState(formStateFromConfig(initial));
|
|
35068
35211
|
const [bands, setBands] = useState([...initial.bands]);
|
|
35069
35212
|
const [common, setCommon] = useState({
|
|
35070
35213
|
profiles: initial.profiles,
|
|
35071
35214
|
segmentSeconds: initial.segmentSeconds,
|
|
35072
|
-
retention: initial.retention
|
|
35073
|
-
stripsEnabled: initial.stripsEnabled
|
|
35215
|
+
retention: initial.retention
|
|
35074
35216
|
});
|
|
35075
35217
|
const ret = common.retention ?? {};
|
|
35076
35218
|
const setRet = (patch) => setCommon({
|
|
@@ -35108,8 +35250,7 @@ function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regene
|
|
|
35108
35250
|
const shared = {
|
|
35109
35251
|
profiles: common.profiles ? [...common.profiles] : void 0,
|
|
35110
35252
|
segmentSeconds: common.segmentSeconds,
|
|
35111
|
-
retention: common.retention
|
|
35112
|
-
...common.stripsEnabled === void 0 ? {} : { stripsEnabled: common.stripsEnabled }
|
|
35253
|
+
retention: common.retention
|
|
35113
35254
|
};
|
|
35114
35255
|
if (tab === "base") onSave({
|
|
35115
35256
|
...configFromFormState({
|
|
@@ -35261,65 +35402,37 @@ function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regene
|
|
|
35261
35402
|
}),
|
|
35262
35403
|
/* @__PURE__ */ jsxs("div", {
|
|
35263
35404
|
className: "flex flex-wrap items-center gap-4 text-xs",
|
|
35264
|
-
children: [
|
|
35265
|
-
|
|
35266
|
-
|
|
35267
|
-
|
|
35268
|
-
|
|
35269
|
-
|
|
35270
|
-
|
|
35271
|
-
|
|
35272
|
-
|
|
35273
|
-
|
|
35274
|
-
|
|
35275
|
-
|
|
35276
|
-
|
|
35277
|
-
|
|
35278
|
-
|
|
35279
|
-
|
|
35280
|
-
|
|
35281
|
-
|
|
35282
|
-
"
|
|
35283
|
-
|
|
35284
|
-
|
|
35285
|
-
|
|
35286
|
-
value: common.segmentSeconds ?? "",
|
|
35287
|
-
placeholder: "default",
|
|
35288
|
-
onChange: (e) => setCommon({
|
|
35289
|
-
...common,
|
|
35290
|
-
segmentSeconds: numOrUndef(e.target.value)
|
|
35291
|
-
}),
|
|
35292
|
-
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35293
|
-
}),
|
|
35294
|
-
"s"
|
|
35295
|
-
]
|
|
35296
|
-
}),
|
|
35297
|
-
/* @__PURE__ */ jsxs("label", {
|
|
35298
|
-
className: "flex items-center gap-1",
|
|
35299
|
-
children: [/* @__PURE__ */ jsx("input", {
|
|
35300
|
-
type: "checkbox",
|
|
35301
|
-
checked: common.stripsEnabled === true,
|
|
35405
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
35406
|
+
className: "flex items-center gap-2",
|
|
35407
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
35408
|
+
className: "text-foreground-subtle",
|
|
35409
|
+
children: "Profiles:"
|
|
35410
|
+
}), PROFILES.map((p) => {
|
|
35411
|
+
return /* @__PURE__ */ jsx("button", {
|
|
35412
|
+
type: "button",
|
|
35413
|
+
onClick: () => toggleProfile(p),
|
|
35414
|
+
className: `rounded px-2 py-1 ${common.profiles == null || common.profiles.includes(p) ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
35415
|
+
children: p
|
|
35416
|
+
}, p);
|
|
35417
|
+
})]
|
|
35418
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
35419
|
+
className: "flex items-center gap-1",
|
|
35420
|
+
children: [
|
|
35421
|
+
"Segment",
|
|
35422
|
+
/* @__PURE__ */ jsx("input", {
|
|
35423
|
+
type: "number",
|
|
35424
|
+
min: 1,
|
|
35425
|
+
value: common.segmentSeconds ?? "",
|
|
35426
|
+
placeholder: "default",
|
|
35302
35427
|
onChange: (e) => setCommon({
|
|
35303
35428
|
...common,
|
|
35304
|
-
|
|
35305
|
-
})
|
|
35306
|
-
|
|
35307
|
-
|
|
35308
|
-
|
|
35309
|
-
|
|
35310
|
-
|
|
35311
|
-
onRegenerateStrips ? /* @__PURE__ */ jsx("button", {
|
|
35312
|
-
type: "button",
|
|
35313
|
-
onClick: onRegenerateStrips,
|
|
35314
|
-
disabled: regeneratingStrips === true,
|
|
35315
|
-
className: "rounded-md border border-border bg-surface-hover px-2 py-1 text-xs text-foreground-subtle transition-colors hover:text-foreground disabled:cursor-not-allowed disabled:opacity-50",
|
|
35316
|
-
children: regeneratingStrips === true ? "Regenerating…" : "Regenerate strips"
|
|
35317
|
-
}) : null
|
|
35318
|
-
]
|
|
35319
|
-
}),
|
|
35320
|
-
/* @__PURE__ */ jsx("p", {
|
|
35321
|
-
className: "text-[11px] text-foreground-subtle",
|
|
35322
|
-
children: "OPT-IN: save every keyframe of the low recording as a JPEG strip for fluid fast scrubbing. Costs disk (a derived cache, reclaimed with the footage). Regenerate clears and rebuilds the recent days from the segments already on disk."
|
|
35429
|
+
segmentSeconds: numOrUndef(e.target.value)
|
|
35430
|
+
}),
|
|
35431
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35432
|
+
}),
|
|
35433
|
+
"s"
|
|
35434
|
+
]
|
|
35435
|
+
})]
|
|
35323
35436
|
}),
|
|
35324
35437
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
35325
35438
|
className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
|
|
@@ -36568,14 +36681,6 @@ function RecordingPanel({ deviceId }) {
|
|
|
36568
36681
|
const configQuery = useRecordingGetDeviceConfig({ deviceId });
|
|
36569
36682
|
const setConfig = useRecordingSetDeviceConfig();
|
|
36570
36683
|
const rescanStorage = useRecordingRescanStorage();
|
|
36571
|
-
const customAction = useAddonsCustom();
|
|
36572
|
-
const regenerateStrips = useCallback(() => {
|
|
36573
|
-
customAction.mutate({
|
|
36574
|
-
addonId: "recorder",
|
|
36575
|
-
action: "regenerateStrips",
|
|
36576
|
-
input: { deviceId }
|
|
36577
|
-
});
|
|
36578
|
-
}, [customAction, deviceId]);
|
|
36579
36684
|
const saveConfig = (config) => {
|
|
36580
36685
|
setConfig.mutate({
|
|
36581
36686
|
deviceId,
|
|
@@ -36617,9 +36722,7 @@ function RecordingPanel({ deviceId }) {
|
|
|
36617
36722
|
children: resolvedConfig ? /* @__PURE__ */ jsx(RecordingSettings, {
|
|
36618
36723
|
initial: resolvedConfig,
|
|
36619
36724
|
saving: setConfig.isPending,
|
|
36620
|
-
onSave: saveConfig
|
|
36621
|
-
onRegenerateStrips: regenerateStrips,
|
|
36622
|
-
regeneratingStrips: customAction.isPending
|
|
36725
|
+
onSave: saveConfig
|
|
36623
36726
|
}, JSON.stringify(resolvedConfig)) : /* @__PURE__ */ jsx("div", {
|
|
36624
36727
|
className: "px-1 py-2 text-xs text-foreground-subtle",
|
|
36625
36728
|
children: "Loading settings…"
|
|
@@ -38955,9 +39058,9 @@ function ObjectArrayField({ field }) {
|
|
|
38955
39058
|
className: "rounded-md border border-border bg-surface-subtle px-3 py-2 text-xs text-foreground-subtle",
|
|
38956
39059
|
children: field.emptyMessage ?? "No entries"
|
|
38957
39060
|
}) : /* @__PURE__ */ jsx("div", {
|
|
38958
|
-
className: "rounded-md border border-border overflow-
|
|
39061
|
+
className: "rounded-md border border-border overflow-x-auto",
|
|
38959
39062
|
children: /* @__PURE__ */ jsxs("table", {
|
|
38960
|
-
className: "w-full text-xs",
|
|
39063
|
+
className: "w-full min-w-[28rem] text-xs",
|
|
38961
39064
|
children: [/* @__PURE__ */ jsx("thead", {
|
|
38962
39065
|
className: "bg-surface-subtle border-b border-border",
|
|
38963
39066
|
children: /* @__PURE__ */ jsx("tr", { children: field.columns.map((col) => /* @__PURE__ */ jsx("th", {
|
|
@@ -40184,6 +40287,31 @@ function DetectionBoxes({ detections, frameWidth, frameHeight }) {
|
|
|
40184
40287
|
}) });
|
|
40185
40288
|
}
|
|
40186
40289
|
//#endregion
|
|
40290
|
+
//#region src/composites/reconnect-schedule.ts
|
|
40291
|
+
/** Exponential backoff, ±20% jitter, bounded attempts. The bound exists so a
|
|
40292
|
+
* permanently-dead stream stops consuming signaling; the EXHAUSTED action is
|
|
40293
|
+
* the caller's cue to surface a hard error (never to go silent). */
|
|
40294
|
+
var RECONNECT_POLICY = {
|
|
40295
|
+
baseDelayMs: 1500,
|
|
40296
|
+
maxDelayMs: 15e3,
|
|
40297
|
+
maxAttempts: 40
|
|
40298
|
+
};
|
|
40299
|
+
/**
|
|
40300
|
+
* Decide what attempt number `attempt` (0-based) should do. `random` is the
|
|
40301
|
+
* jitter source (unit interval), injectable for tests.
|
|
40302
|
+
*/
|
|
40303
|
+
function nextReconnectAction(attempt, random = Math.random) {
|
|
40304
|
+
if (attempt >= RECONNECT_POLICY.maxAttempts) return {
|
|
40305
|
+
kind: "exhausted",
|
|
40306
|
+
attempts: attempt
|
|
40307
|
+
};
|
|
40308
|
+
const base = Math.min(RECONNECT_POLICY.maxDelayMs, RECONNECT_POLICY.baseDelayMs * 2 ** attempt);
|
|
40309
|
+
return {
|
|
40310
|
+
kind: "retry",
|
|
40311
|
+
delayMs: Math.round(base * (.8 + random() * .4))
|
|
40312
|
+
};
|
|
40313
|
+
}
|
|
40314
|
+
//#endregion
|
|
40187
40315
|
//#region src/composites/camera-stream-player.tsx
|
|
40188
40316
|
/**
|
|
40189
40317
|
* Silence (or restore) a live WebRTC stream FOR REAL.
|
|
@@ -40246,11 +40374,8 @@ function computeClientHints(container) {
|
|
|
40246
40374
|
}
|
|
40247
40375
|
return hints;
|
|
40248
40376
|
}
|
|
40249
|
-
var RECONNECT_BASE_DELAY_MS = 1500;
|
|
40250
|
-
var RECONNECT_MAX_DELAY_MS = 15e3;
|
|
40251
|
-
var MAX_RECONNECT_ATTEMPTS = 40;
|
|
40252
40377
|
var FIRST_FRAME_TIMEOUT_MS = 8e3;
|
|
40253
|
-
function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel }) {
|
|
40378
|
+
function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, onVideoElement }) {
|
|
40254
40379
|
const videoRef = useRef(null);
|
|
40255
40380
|
const containerRef = useRef(null);
|
|
40256
40381
|
const pcRef = useRef(null);
|
|
@@ -40266,6 +40391,14 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40266
40391
|
* consumer, without re-creating the connect callback on every render. */
|
|
40267
40392
|
const onControlChannelRef = useRef(onControlChannel);
|
|
40268
40393
|
onControlChannelRef.current = onControlChannel;
|
|
40394
|
+
/** Same pattern for the video-element handle: delivered once on mount, null
|
|
40395
|
+
* on unmount — the ref keeps the latest consumer without re-running. */
|
|
40396
|
+
const onVideoElementRef = useRef(onVideoElement);
|
|
40397
|
+
onVideoElementRef.current = onVideoElement;
|
|
40398
|
+
useEffect(() => {
|
|
40399
|
+
onVideoElementRef.current?.(videoRef.current);
|
|
40400
|
+
return () => onVideoElementRef.current?.(null);
|
|
40401
|
+
}, []);
|
|
40269
40402
|
/** The live session being polled for `pendingRenegotiation` (client-offer). */
|
|
40270
40403
|
const activeSessionIdRef = useRef(null);
|
|
40271
40404
|
/** Timer for the session-state (renegotiation) poll loop. */
|
|
@@ -40654,6 +40787,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40654
40787
|
iceConnectedMs: timing.iceConnectedMs,
|
|
40655
40788
|
firstTrackMs: timing.firstTrackMs
|
|
40656
40789
|
});
|
|
40790
|
+
reportHardErrorRef.current("no decoded frame after connect");
|
|
40791
|
+
scheduleReconnect();
|
|
40657
40792
|
}, FIRST_FRAME_TIMEOUT_MS);
|
|
40658
40793
|
}
|
|
40659
40794
|
}
|
|
@@ -40922,17 +41057,32 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40922
41057
|
]);
|
|
40923
41058
|
const connect = useClientOffer ? connectClientOffer : useServerOffer ? connectServerOffer : connectWhep;
|
|
40924
41059
|
const connectRef = useRef(() => {});
|
|
41060
|
+
const onReconnectAttemptRef = useRef(onReconnectAttempt);
|
|
41061
|
+
onReconnectAttemptRef.current = onReconnectAttempt;
|
|
41062
|
+
const reportHardErrorRef = useRef(() => {});
|
|
41063
|
+
reportHardErrorRef.current = (msg) => {
|
|
41064
|
+
console.warn("[WebRTC] hard error", {
|
|
41065
|
+
streamKey,
|
|
41066
|
+
msg
|
|
41067
|
+
});
|
|
41068
|
+
setErrorMessage(msg);
|
|
41069
|
+
onError?.(msg);
|
|
41070
|
+
updateState("error");
|
|
41071
|
+
};
|
|
40925
41072
|
connectRef.current = connect;
|
|
40926
41073
|
const scheduleReconnect = useCallback(() => {
|
|
40927
41074
|
if (!mountedRef.current) return;
|
|
40928
|
-
if (reconnectAttemptsRef.current >= MAX_RECONNECT_ATTEMPTS) return;
|
|
40929
41075
|
const attempt = reconnectAttemptsRef.current;
|
|
41076
|
+
const action = nextReconnectAction(attempt);
|
|
41077
|
+
onReconnectAttemptRef.current?.(action);
|
|
41078
|
+
if (action.kind === "exhausted") {
|
|
41079
|
+
reportHardErrorRef.current(`reconnect attempts exhausted (${action.attempts})`);
|
|
41080
|
+
return;
|
|
41081
|
+
}
|
|
40930
41082
|
reconnectAttemptsRef.current += 1;
|
|
40931
|
-
const base = Math.min(RECONNECT_MAX_DELAY_MS, RECONNECT_BASE_DELAY_MS * 2 ** attempt);
|
|
40932
|
-
const delay = Math.round(base * (.8 + Math.random() * .4));
|
|
40933
41083
|
reconnectTimerRef.current = setTimeout(() => {
|
|
40934
41084
|
if (mountedRef.current) connectRef.current();
|
|
40935
|
-
},
|
|
41085
|
+
}, action.delayMs);
|
|
40936
41086
|
}, []);
|
|
40937
41087
|
useEffect(() => {
|
|
40938
41088
|
mountedRef.current = true;
|
|
@@ -41313,7 +41463,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41313
41463
|
children: statsText
|
|
41314
41464
|
}),
|
|
41315
41465
|
overlay,
|
|
41316
|
-
!stillImg && state === "connecting" && /* @__PURE__ */ jsxs("div", {
|
|
41466
|
+
showControls && !stillImg && state === "connecting" && /* @__PURE__ */ jsxs("div", {
|
|
41317
41467
|
className: "absolute inset-0 z-10 transform-gpu flex flex-col items-center justify-center bg-black/70 gap-2",
|
|
41318
41468
|
children: [/* @__PURE__ */ jsx("svg", {
|
|
41319
41469
|
className: "h-6 w-6 text-white/60 animate-spin",
|
|
@@ -41335,7 +41485,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41335
41485
|
children: "Connecting…"
|
|
41336
41486
|
})]
|
|
41337
41487
|
}),
|
|
41338
|
-
!stillImg && (state === "error" || state === "disconnected") && /* @__PURE__ */ jsxs("div", {
|
|
41488
|
+
showControls && !stillImg && (state === "error" || state === "disconnected") && /* @__PURE__ */ jsxs("div", {
|
|
41339
41489
|
className: "absolute inset-0 z-10 transform-gpu flex flex-col items-center justify-center bg-black/70 gap-2",
|
|
41340
41490
|
children: [
|
|
41341
41491
|
/* @__PURE__ */ jsx("svg", {
|
|
@@ -41360,7 +41510,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41360
41510
|
})
|
|
41361
41511
|
]
|
|
41362
41512
|
}),
|
|
41363
|
-
stillImg && (state === "connecting" || state === "disconnected") && /* @__PURE__ */ jsx("div", {
|
|
41513
|
+
showControls && stillImg && (state === "connecting" || state === "disconnected") && /* @__PURE__ */ jsx("div", {
|
|
41364
41514
|
className: "absolute top-2 left-2 z-10 transform-gpu flex h-6 w-6 items-center justify-center rounded-full bg-black/55",
|
|
41365
41515
|
children: /* @__PURE__ */ jsx("svg", {
|
|
41366
41516
|
className: "h-3.5 w-3.5 text-white/90 animate-spin",
|
|
@@ -41379,7 +41529,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41379
41529
|
})
|
|
41380
41530
|
})
|
|
41381
41531
|
}),
|
|
41382
|
-
stillImg && state === "error" && /* @__PURE__ */ jsx("button", {
|
|
41532
|
+
showControls && stillImg && state === "error" && /* @__PURE__ */ jsx("button", {
|
|
41383
41533
|
onClick: handleReconnect,
|
|
41384
41534
|
title: errorMessage || "Reconnect",
|
|
41385
41535
|
className: "absolute top-2 left-2 z-10 transform-gpu flex h-6 w-6 items-center justify-center rounded-full bg-black/55 text-white/90 hover:bg-black/75 transition-colors",
|
|
@@ -42493,7 +42643,7 @@ function StreamBrokerSelector({ deviceId, value, onChange, disabled, label, clas
|
|
|
42493
42643
|
* needs a one-click copy affordance (export setup panels, etc.).
|
|
42494
42644
|
*/
|
|
42495
42645
|
var COPIED_RESET_MS = 2e3;
|
|
42496
|
-
function CopyButton({ value, label, className, disabled }) {
|
|
42646
|
+
function CopyButton({ value, label, srLabel, className, disabled }) {
|
|
42497
42647
|
const [copied, setCopied] = useState(false);
|
|
42498
42648
|
const handleCopy = useCallback(() => {
|
|
42499
42649
|
if (!value) return;
|
|
@@ -42509,7 +42659,7 @@ function CopyButton({ value, label, className, disabled }) {
|
|
|
42509
42659
|
disabled: disabled || value.length === 0,
|
|
42510
42660
|
onClick: handleCopy,
|
|
42511
42661
|
className: cn(className),
|
|
42512
|
-
"aria-label": copied ? "Copied" : `Copy ${label ?? "value"}`,
|
|
42662
|
+
"aria-label": copied ? "Copied" : `Copy ${srLabel ?? label ?? "value"}`,
|
|
42513
42663
|
children: [copied ? /* @__PURE__ */ jsx(Check, { className: "h-3.5 w-3.5 text-success" }) : /* @__PURE__ */ jsx(Copy, { className: "h-3.5 w-3.5" }), label ? /* @__PURE__ */ jsx("span", {
|
|
42514
42664
|
className: "ml-1",
|
|
42515
42665
|
children: copied ? "Copied" : label
|
|
@@ -42578,35 +42728,30 @@ function capitaliseLinkState(state) {
|
|
|
42578
42728
|
/**
|
|
42579
42729
|
* A single label/value row in the Setup section. `secret` rows mask the
|
|
42580
42730
|
* value behind a reveal toggle; every row gets a copy button.
|
|
42731
|
+
*
|
|
42732
|
+
* Layout — including the L1 stack that keeps a long token readable on a phone
|
|
42733
|
+
* — is owned by the shared `<SettingRow>`; this component only decides what
|
|
42734
|
+
* the value and the affordances are.
|
|
42581
42735
|
*/
|
|
42582
42736
|
function SetupFieldRow({ field }) {
|
|
42583
42737
|
const [revealed, setRevealed] = useState(false);
|
|
42584
42738
|
const isSecret = field.secret === true;
|
|
42585
42739
|
const displayValue = isSecret && !revealed ? "•".repeat(Math.min(field.value.length, 24)) : field.value;
|
|
42586
|
-
return /* @__PURE__ */
|
|
42587
|
-
|
|
42588
|
-
|
|
42589
|
-
|
|
42590
|
-
|
|
42591
|
-
|
|
42592
|
-
|
|
42593
|
-
|
|
42594
|
-
|
|
42595
|
-
|
|
42596
|
-
|
|
42597
|
-
|
|
42598
|
-
|
|
42599
|
-
|
|
42600
|
-
|
|
42601
|
-
"aria-label": revealed ? "Hide value" : "Reveal value",
|
|
42602
|
-
onClick: () => setRevealed((v) => !v),
|
|
42603
|
-
children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5" })
|
|
42604
|
-
}),
|
|
42605
|
-
/* @__PURE__ */ jsx(CopyButton, {
|
|
42606
|
-
value: field.value,
|
|
42607
|
-
label: field.label
|
|
42608
|
-
})
|
|
42609
|
-
]
|
|
42740
|
+
return /* @__PURE__ */ jsx(SettingRow, {
|
|
42741
|
+
label: field.label,
|
|
42742
|
+
valueClassName: "font-mono",
|
|
42743
|
+
actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [isSecret && /* @__PURE__ */ jsx(Button, {
|
|
42744
|
+
size: "sm",
|
|
42745
|
+
variant: "ghost",
|
|
42746
|
+
type: "button",
|
|
42747
|
+
"aria-label": revealed ? "Hide value" : "Reveal value",
|
|
42748
|
+
onClick: () => setRevealed((v) => !v),
|
|
42749
|
+
children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5" })
|
|
42750
|
+
}), /* @__PURE__ */ jsx(CopyButton, {
|
|
42751
|
+
value: field.value,
|
|
42752
|
+
srLabel: field.label
|
|
42753
|
+
})] }),
|
|
42754
|
+
children: displayValue || "—"
|
|
42610
42755
|
});
|
|
42611
42756
|
}
|
|
42612
42757
|
/**
|
|
@@ -46712,6 +46857,112 @@ function useDeviceDetections(trpc, deviceId) {
|
|
|
46712
46857
|
};
|
|
46713
46858
|
}
|
|
46714
46859
|
//#endregion
|
|
46860
|
+
//#region src/hooks/turn-server-cache.ts
|
|
46861
|
+
/** Short enough that rotated credentials are picked up promptly. */
|
|
46862
|
+
var DEFAULT_FRESH_TTL_MS = 5 * 6e4;
|
|
46863
|
+
/** Half of the shortest provider credential lifetime in the fleet (24 h). */
|
|
46864
|
+
var DEFAULT_STALE_CAP_MS = 720 * 6e4;
|
|
46865
|
+
var DEFAULT_STORAGE_KEY = "camstack:turn-servers:v1";
|
|
46866
|
+
function defaultStorage() {
|
|
46867
|
+
const g = globalThis;
|
|
46868
|
+
try {
|
|
46869
|
+
return g.localStorage ?? null;
|
|
46870
|
+
} catch {
|
|
46871
|
+
return null;
|
|
46872
|
+
}
|
|
46873
|
+
}
|
|
46874
|
+
/** Type guard for a persisted entry — storage content is external data. */
|
|
46875
|
+
function isCacheEntry(value) {
|
|
46876
|
+
if (typeof value !== "object" || value === null) return false;
|
|
46877
|
+
const v = value;
|
|
46878
|
+
if (typeof v.fetchedAt !== "number" || !Array.isArray(v.servers)) return false;
|
|
46879
|
+
return v.servers.every((s) => {
|
|
46880
|
+
if (typeof s !== "object" || s === null) return false;
|
|
46881
|
+
const srv = s;
|
|
46882
|
+
if (!(typeof srv.urls === "string" || Array.isArray(srv.urls) && srv.urls.every((u) => typeof u === "string"))) return false;
|
|
46883
|
+
if (srv.username !== void 0 && typeof srv.username !== "string") return false;
|
|
46884
|
+
if (srv.credential !== void 0 && typeof srv.credential !== "string") return false;
|
|
46885
|
+
return true;
|
|
46886
|
+
});
|
|
46887
|
+
}
|
|
46888
|
+
var TurnServerCache = class {
|
|
46889
|
+
freshTtlMs;
|
|
46890
|
+
staleCapMs;
|
|
46891
|
+
storage;
|
|
46892
|
+
now;
|
|
46893
|
+
storageKey;
|
|
46894
|
+
/** Keyed on the caller's tRPC client object (stable per connected system). */
|
|
46895
|
+
memory = /* @__PURE__ */ new WeakMap();
|
|
46896
|
+
/** In-flight fetch per key — concurrent callers share one round trip. */
|
|
46897
|
+
inflight = /* @__PURE__ */ new WeakMap();
|
|
46898
|
+
constructor(options = {}) {
|
|
46899
|
+
this.freshTtlMs = options.freshTtlMs ?? DEFAULT_FRESH_TTL_MS;
|
|
46900
|
+
this.staleCapMs = options.staleCapMs ?? DEFAULT_STALE_CAP_MS;
|
|
46901
|
+
this.storage = "storage" in options ? options.storage ?? null : defaultStorage();
|
|
46902
|
+
this.now = options.now ?? (() => Date.now());
|
|
46903
|
+
this.storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
|
|
46904
|
+
}
|
|
46905
|
+
/**
|
|
46906
|
+
* Resolve the ICE servers for `key`, fetching via `fetch` only when no
|
|
46907
|
+
* fresh-enough entry exists. Never rejects: a failed fetch resolves to the
|
|
46908
|
+
* stale entry when one exists, else `undefined`.
|
|
46909
|
+
*/
|
|
46910
|
+
async getOrFetch(key, fetch) {
|
|
46911
|
+
const at = this.now();
|
|
46912
|
+
const entry = this.memory.get(key) ?? this.readStorage();
|
|
46913
|
+
if (entry) {
|
|
46914
|
+
const age = at - entry.fetchedAt;
|
|
46915
|
+
if (age < this.freshTtlMs) return entry.servers;
|
|
46916
|
+
if (age < this.staleCapMs) {
|
|
46917
|
+
this.startFetch(key, fetch, entry);
|
|
46918
|
+
return entry.servers;
|
|
46919
|
+
}
|
|
46920
|
+
}
|
|
46921
|
+
return this.startFetch(key, fetch, entry);
|
|
46922
|
+
}
|
|
46923
|
+
startFetch(key, fetch, stale) {
|
|
46924
|
+
const pending = this.inflight.get(key);
|
|
46925
|
+
if (pending) return pending;
|
|
46926
|
+
const run = (async () => {
|
|
46927
|
+
try {
|
|
46928
|
+
const servers = await fetch();
|
|
46929
|
+
if (servers.length > 0) {
|
|
46930
|
+
const entry = {
|
|
46931
|
+
servers,
|
|
46932
|
+
fetchedAt: this.now()
|
|
46933
|
+
};
|
|
46934
|
+
this.memory.set(key, entry);
|
|
46935
|
+
this.writeStorage(entry);
|
|
46936
|
+
}
|
|
46937
|
+
return servers;
|
|
46938
|
+
} catch {
|
|
46939
|
+
return stale?.servers;
|
|
46940
|
+
}
|
|
46941
|
+
})().finally(() => {
|
|
46942
|
+
this.inflight.delete(key);
|
|
46943
|
+
});
|
|
46944
|
+
this.inflight.set(key, run);
|
|
46945
|
+
return run;
|
|
46946
|
+
}
|
|
46947
|
+
readStorage() {
|
|
46948
|
+
if (!this.storage) return void 0;
|
|
46949
|
+
try {
|
|
46950
|
+
const raw = this.storage.getItem(this.storageKey);
|
|
46951
|
+
if (raw === null) return void 0;
|
|
46952
|
+
const parsed = JSON.parse(raw);
|
|
46953
|
+
return isCacheEntry(parsed) ? parsed : void 0;
|
|
46954
|
+
} catch {
|
|
46955
|
+
return;
|
|
46956
|
+
}
|
|
46957
|
+
}
|
|
46958
|
+
writeStorage(entry) {
|
|
46959
|
+
if (!this.storage) return;
|
|
46960
|
+
try {
|
|
46961
|
+
this.storage.setItem(this.storageKey, JSON.stringify(entry));
|
|
46962
|
+
} catch {}
|
|
46963
|
+
}
|
|
46964
|
+
};
|
|
46965
|
+
//#endregion
|
|
46715
46966
|
//#region src/hooks/use-device-webrtc.ts
|
|
46716
46967
|
/**
|
|
46717
46968
|
* useDeviceWebrtc — WebRTC signaling hook for device-scoped streaming.
|
|
@@ -46729,15 +46980,16 @@ function useDeviceDetections(trpc, deviceId) {
|
|
|
46729
46980
|
* @param deviceId - numeric device ID (null = disabled)
|
|
46730
46981
|
* @param pollIntervalMs - how often to refresh profile slots (default: 5000)
|
|
46731
46982
|
*/
|
|
46732
|
-
/**
|
|
46733
|
-
*
|
|
46734
|
-
*
|
|
46735
|
-
|
|
46736
|
-
|
|
46737
|
-
*
|
|
46738
|
-
*
|
|
46739
|
-
*
|
|
46740
|
-
|
|
46983
|
+
/** Module-level TURN/STUN credential cache. Keyed on the caller's trpc client
|
|
46984
|
+
* object (stable per connected system — NOT on `trpc.turnProvider`, which is
|
|
46985
|
+
* a proxy minted fresh on every property access), so two admin tabs pointed
|
|
46986
|
+
* at different hubs never cross-serve credentials from the memory layer; the
|
|
46987
|
+
* storage layer is per-origin, and the page's origin IS the hub. Coalesces
|
|
46988
|
+
* concurrent fetches (the mount prefetch and the connect's own call used to
|
|
46989
|
+
* race into TWO round trips) and persists across page loads so a fresh embed
|
|
46990
|
+
* page — one per camera open on native — finds warm credentials instead of
|
|
46991
|
+
* re-paying the measured 0.2–3.6 s serialized fetch. See turn-server-cache.ts. */
|
|
46992
|
+
var turnServersCache = new TurnServerCache();
|
|
46741
46993
|
function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
46742
46994
|
const [remoteStreams, setRemoteStreams] = useState([]);
|
|
46743
46995
|
useEffect(() => {
|
|
@@ -46806,25 +47058,17 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
|
46806
47058
|
};
|
|
46807
47059
|
}, [deviceId, remoteStreams]);
|
|
46808
47060
|
const getIceServers = useCallback(async () => {
|
|
46809
|
-
|
|
46810
|
-
|
|
46811
|
-
|
|
46812
|
-
|
|
46813
|
-
const mapped = (await trpc.turnProvider.getTurnServers.query()).map((s) => {
|
|
47061
|
+
const provider = trpc.turnProvider;
|
|
47062
|
+
if (!provider) return void 0;
|
|
47063
|
+
return turnServersCache.getOrFetch(trpc, async () => {
|
|
47064
|
+
return (await provider.getTurnServers.query()).map((s) => {
|
|
46814
47065
|
return {
|
|
46815
47066
|
urls: typeof s.urls === "string" ? s.urls : [...s.urls],
|
|
46816
47067
|
...s.username !== void 0 ? { username: s.username } : {},
|
|
46817
47068
|
...s.credential !== void 0 ? { credential: s.credential } : {}
|
|
46818
47069
|
};
|
|
46819
47070
|
});
|
|
46820
|
-
|
|
46821
|
-
servers: mapped,
|
|
46822
|
-
fetchedAt: Date.now()
|
|
46823
|
-
});
|
|
46824
|
-
return mapped;
|
|
46825
|
-
} catch {
|
|
46826
|
-
return cached?.servers;
|
|
46827
|
-
}
|
|
47071
|
+
});
|
|
46828
47072
|
}, [trpc]);
|
|
46829
47073
|
useEffect(() => {
|
|
46830
47074
|
getIceServers();
|
|
@@ -47198,4 +47442,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
|
|
|
47198
47442
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
47199
47443
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
47200
47444
|
//#endregion
|
|
47201
|
-
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCreateRule, useNotificationRulesDeleteRule, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListRules, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelMediaRelocate, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMediaRelocateStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocate, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetRelocateStatus, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionClose, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionResize, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
47445
|
+
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, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, 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, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, 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, nextReconnectAction, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesCreateRule, useNotificationRulesDeleteRule, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListRules, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelMediaRelocate, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMediaRelocateStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocate, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetRelocateStatus, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, 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 };
|