@camstack/ui-library 1.2.16 → 1.2.17
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/hooks/turn-server-cache.d.ts +77 -0
- package/dist/index.cjs +401 -151
- package/dist/index.js +392 -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";
|
|
@@ -29409,7 +29548,7 @@ function DeviceItemTableRow(props) {
|
|
|
29409
29548
|
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
29549
|
children: [
|
|
29411
29550
|
/* @__PURE__ */ jsx("td", {
|
|
29412
|
-
className: cn("
|
|
29551
|
+
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
29552
|
children: /* @__PURE__ */ jsxs("div", {
|
|
29414
29553
|
className: "flex items-center gap-1.5",
|
|
29415
29554
|
children: [selection && /* @__PURE__ */ jsx("input", {
|
|
@@ -30412,7 +30551,7 @@ function TableLayout({ rows, accessoriesByParent, autoExpandedParents, devices,
|
|
|
30412
30551
|
children: [
|
|
30413
30552
|
/* @__PURE__ */ jsx("th", {
|
|
30414
30553
|
"aria-sort": ariaSortFor(sort, "name"),
|
|
30415
|
-
className:
|
|
30554
|
+
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
30555
|
children: /* @__PURE__ */ jsx(SortableHeaderButton, {
|
|
30417
30556
|
columnId: "name",
|
|
30418
30557
|
label: "Name",
|
|
@@ -35062,15 +35201,14 @@ var MODES = [
|
|
|
35062
35201
|
label: "Continuous"
|
|
35063
35202
|
}
|
|
35064
35203
|
];
|
|
35065
|
-
function RecordingSettings({ initial, saving, onSave
|
|
35204
|
+
function RecordingSettings({ initial, saving, onSave }) {
|
|
35066
35205
|
const [tab, setTab] = useState(isAdvancedConfig(initial) ? "advanced" : "base");
|
|
35067
35206
|
const [base, setBase] = useState(formStateFromConfig(initial));
|
|
35068
35207
|
const [bands, setBands] = useState([...initial.bands]);
|
|
35069
35208
|
const [common, setCommon] = useState({
|
|
35070
35209
|
profiles: initial.profiles,
|
|
35071
35210
|
segmentSeconds: initial.segmentSeconds,
|
|
35072
|
-
retention: initial.retention
|
|
35073
|
-
stripsEnabled: initial.stripsEnabled
|
|
35211
|
+
retention: initial.retention
|
|
35074
35212
|
});
|
|
35075
35213
|
const ret = common.retention ?? {};
|
|
35076
35214
|
const setRet = (patch) => setCommon({
|
|
@@ -35108,8 +35246,7 @@ function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regene
|
|
|
35108
35246
|
const shared = {
|
|
35109
35247
|
profiles: common.profiles ? [...common.profiles] : void 0,
|
|
35110
35248
|
segmentSeconds: common.segmentSeconds,
|
|
35111
|
-
retention: common.retention
|
|
35112
|
-
...common.stripsEnabled === void 0 ? {} : { stripsEnabled: common.stripsEnabled }
|
|
35249
|
+
retention: common.retention
|
|
35113
35250
|
};
|
|
35114
35251
|
if (tab === "base") onSave({
|
|
35115
35252
|
...configFromFormState({
|
|
@@ -35261,65 +35398,37 @@ function RecordingSettings({ initial, saving, onSave, onRegenerateStrips, regene
|
|
|
35261
35398
|
}),
|
|
35262
35399
|
/* @__PURE__ */ jsxs("div", {
|
|
35263
35400
|
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,
|
|
35401
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
35402
|
+
className: "flex items-center gap-2",
|
|
35403
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
35404
|
+
className: "text-foreground-subtle",
|
|
35405
|
+
children: "Profiles:"
|
|
35406
|
+
}), PROFILES.map((p) => {
|
|
35407
|
+
return /* @__PURE__ */ jsx("button", {
|
|
35408
|
+
type: "button",
|
|
35409
|
+
onClick: () => toggleProfile(p),
|
|
35410
|
+
className: `rounded px-2 py-1 ${common.profiles == null || common.profiles.includes(p) ? "bg-primary text-primary-foreground" : "bg-surface-hover text-foreground-subtle"}`,
|
|
35411
|
+
children: p
|
|
35412
|
+
}, p);
|
|
35413
|
+
})]
|
|
35414
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
35415
|
+
className: "flex items-center gap-1",
|
|
35416
|
+
children: [
|
|
35417
|
+
"Segment",
|
|
35418
|
+
/* @__PURE__ */ jsx("input", {
|
|
35419
|
+
type: "number",
|
|
35420
|
+
min: 1,
|
|
35421
|
+
value: common.segmentSeconds ?? "",
|
|
35422
|
+
placeholder: "default",
|
|
35302
35423
|
onChange: (e) => setCommon({
|
|
35303
35424
|
...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."
|
|
35425
|
+
segmentSeconds: numOrUndef(e.target.value)
|
|
35426
|
+
}),
|
|
35427
|
+
className: "w-16 rounded-md border border-border bg-background px-1 py-1 text-xs"
|
|
35428
|
+
}),
|
|
35429
|
+
"s"
|
|
35430
|
+
]
|
|
35431
|
+
})]
|
|
35323
35432
|
}),
|
|
35324
35433
|
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
35325
35434
|
className: "mb-1.5 text-[11px] font-semibold uppercase tracking-wider text-foreground-subtle",
|
|
@@ -36568,14 +36677,6 @@ function RecordingPanel({ deviceId }) {
|
|
|
36568
36677
|
const configQuery = useRecordingGetDeviceConfig({ deviceId });
|
|
36569
36678
|
const setConfig = useRecordingSetDeviceConfig();
|
|
36570
36679
|
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
36680
|
const saveConfig = (config) => {
|
|
36580
36681
|
setConfig.mutate({
|
|
36581
36682
|
deviceId,
|
|
@@ -36617,9 +36718,7 @@ function RecordingPanel({ deviceId }) {
|
|
|
36617
36718
|
children: resolvedConfig ? /* @__PURE__ */ jsx(RecordingSettings, {
|
|
36618
36719
|
initial: resolvedConfig,
|
|
36619
36720
|
saving: setConfig.isPending,
|
|
36620
|
-
onSave: saveConfig
|
|
36621
|
-
onRegenerateStrips: regenerateStrips,
|
|
36622
|
-
regeneratingStrips: customAction.isPending
|
|
36721
|
+
onSave: saveConfig
|
|
36623
36722
|
}, JSON.stringify(resolvedConfig)) : /* @__PURE__ */ jsx("div", {
|
|
36624
36723
|
className: "px-1 py-2 text-xs text-foreground-subtle",
|
|
36625
36724
|
children: "Loading settings…"
|
|
@@ -38955,9 +39054,9 @@ function ObjectArrayField({ field }) {
|
|
|
38955
39054
|
className: "rounded-md border border-border bg-surface-subtle px-3 py-2 text-xs text-foreground-subtle",
|
|
38956
39055
|
children: field.emptyMessage ?? "No entries"
|
|
38957
39056
|
}) : /* @__PURE__ */ jsx("div", {
|
|
38958
|
-
className: "rounded-md border border-border overflow-
|
|
39057
|
+
className: "rounded-md border border-border overflow-x-auto",
|
|
38959
39058
|
children: /* @__PURE__ */ jsxs("table", {
|
|
38960
|
-
className: "w-full text-xs",
|
|
39059
|
+
className: "w-full min-w-[28rem] text-xs",
|
|
38961
39060
|
children: [/* @__PURE__ */ jsx("thead", {
|
|
38962
39061
|
className: "bg-surface-subtle border-b border-border",
|
|
38963
39062
|
children: /* @__PURE__ */ jsx("tr", { children: field.columns.map((col) => /* @__PURE__ */ jsx("th", {
|
|
@@ -40184,6 +40283,31 @@ function DetectionBoxes({ detections, frameWidth, frameHeight }) {
|
|
|
40184
40283
|
}) });
|
|
40185
40284
|
}
|
|
40186
40285
|
//#endregion
|
|
40286
|
+
//#region src/composites/reconnect-schedule.ts
|
|
40287
|
+
/** Exponential backoff, ±20% jitter, bounded attempts. The bound exists so a
|
|
40288
|
+
* permanently-dead stream stops consuming signaling; the EXHAUSTED action is
|
|
40289
|
+
* the caller's cue to surface a hard error (never to go silent). */
|
|
40290
|
+
var RECONNECT_POLICY = {
|
|
40291
|
+
baseDelayMs: 1500,
|
|
40292
|
+
maxDelayMs: 15e3,
|
|
40293
|
+
maxAttempts: 40
|
|
40294
|
+
};
|
|
40295
|
+
/**
|
|
40296
|
+
* Decide what attempt number `attempt` (0-based) should do. `random` is the
|
|
40297
|
+
* jitter source (unit interval), injectable for tests.
|
|
40298
|
+
*/
|
|
40299
|
+
function nextReconnectAction(attempt, random = Math.random) {
|
|
40300
|
+
if (attempt >= RECONNECT_POLICY.maxAttempts) return {
|
|
40301
|
+
kind: "exhausted",
|
|
40302
|
+
attempts: attempt
|
|
40303
|
+
};
|
|
40304
|
+
const base = Math.min(RECONNECT_POLICY.maxDelayMs, RECONNECT_POLICY.baseDelayMs * 2 ** attempt);
|
|
40305
|
+
return {
|
|
40306
|
+
kind: "retry",
|
|
40307
|
+
delayMs: Math.round(base * (.8 + random() * .4))
|
|
40308
|
+
};
|
|
40309
|
+
}
|
|
40310
|
+
//#endregion
|
|
40187
40311
|
//#region src/composites/camera-stream-player.tsx
|
|
40188
40312
|
/**
|
|
40189
40313
|
* Silence (or restore) a live WebRTC stream FOR REAL.
|
|
@@ -40246,11 +40370,8 @@ function computeClientHints(container) {
|
|
|
40246
40370
|
}
|
|
40247
40371
|
return hints;
|
|
40248
40372
|
}
|
|
40249
|
-
var RECONNECT_BASE_DELAY_MS = 1500;
|
|
40250
|
-
var RECONNECT_MAX_DELAY_MS = 15e3;
|
|
40251
|
-
var MAX_RECONNECT_ATTEMPTS = 40;
|
|
40252
40373
|
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 }) {
|
|
40374
|
+
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
40375
|
const videoRef = useRef(null);
|
|
40255
40376
|
const containerRef = useRef(null);
|
|
40256
40377
|
const pcRef = useRef(null);
|
|
@@ -40266,6 +40387,14 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40266
40387
|
* consumer, without re-creating the connect callback on every render. */
|
|
40267
40388
|
const onControlChannelRef = useRef(onControlChannel);
|
|
40268
40389
|
onControlChannelRef.current = onControlChannel;
|
|
40390
|
+
/** Same pattern for the video-element handle: delivered once on mount, null
|
|
40391
|
+
* on unmount — the ref keeps the latest consumer without re-running. */
|
|
40392
|
+
const onVideoElementRef = useRef(onVideoElement);
|
|
40393
|
+
onVideoElementRef.current = onVideoElement;
|
|
40394
|
+
useEffect(() => {
|
|
40395
|
+
onVideoElementRef.current?.(videoRef.current);
|
|
40396
|
+
return () => onVideoElementRef.current?.(null);
|
|
40397
|
+
}, []);
|
|
40269
40398
|
/** The live session being polled for `pendingRenegotiation` (client-offer). */
|
|
40270
40399
|
const activeSessionIdRef = useRef(null);
|
|
40271
40400
|
/** Timer for the session-state (renegotiation) poll loop. */
|
|
@@ -40654,6 +40783,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40654
40783
|
iceConnectedMs: timing.iceConnectedMs,
|
|
40655
40784
|
firstTrackMs: timing.firstTrackMs
|
|
40656
40785
|
});
|
|
40786
|
+
reportHardErrorRef.current("no decoded frame after connect");
|
|
40787
|
+
scheduleReconnect();
|
|
40657
40788
|
}, FIRST_FRAME_TIMEOUT_MS);
|
|
40658
40789
|
}
|
|
40659
40790
|
}
|
|
@@ -40922,17 +41053,32 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40922
41053
|
]);
|
|
40923
41054
|
const connect = useClientOffer ? connectClientOffer : useServerOffer ? connectServerOffer : connectWhep;
|
|
40924
41055
|
const connectRef = useRef(() => {});
|
|
41056
|
+
const onReconnectAttemptRef = useRef(onReconnectAttempt);
|
|
41057
|
+
onReconnectAttemptRef.current = onReconnectAttempt;
|
|
41058
|
+
const reportHardErrorRef = useRef(() => {});
|
|
41059
|
+
reportHardErrorRef.current = (msg) => {
|
|
41060
|
+
console.warn("[WebRTC] hard error", {
|
|
41061
|
+
streamKey,
|
|
41062
|
+
msg
|
|
41063
|
+
});
|
|
41064
|
+
setErrorMessage(msg);
|
|
41065
|
+
onError?.(msg);
|
|
41066
|
+
updateState("error");
|
|
41067
|
+
};
|
|
40925
41068
|
connectRef.current = connect;
|
|
40926
41069
|
const scheduleReconnect = useCallback(() => {
|
|
40927
41070
|
if (!mountedRef.current) return;
|
|
40928
|
-
if (reconnectAttemptsRef.current >= MAX_RECONNECT_ATTEMPTS) return;
|
|
40929
41071
|
const attempt = reconnectAttemptsRef.current;
|
|
41072
|
+
const action = nextReconnectAction(attempt);
|
|
41073
|
+
onReconnectAttemptRef.current?.(action);
|
|
41074
|
+
if (action.kind === "exhausted") {
|
|
41075
|
+
reportHardErrorRef.current(`reconnect attempts exhausted (${action.attempts})`);
|
|
41076
|
+
return;
|
|
41077
|
+
}
|
|
40930
41078
|
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
41079
|
reconnectTimerRef.current = setTimeout(() => {
|
|
40934
41080
|
if (mountedRef.current) connectRef.current();
|
|
40935
|
-
},
|
|
41081
|
+
}, action.delayMs);
|
|
40936
41082
|
}, []);
|
|
40937
41083
|
useEffect(() => {
|
|
40938
41084
|
mountedRef.current = true;
|
|
@@ -41313,7 +41459,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41313
41459
|
children: statsText
|
|
41314
41460
|
}),
|
|
41315
41461
|
overlay,
|
|
41316
|
-
!stillImg && state === "connecting" && /* @__PURE__ */ jsxs("div", {
|
|
41462
|
+
showControls && !stillImg && state === "connecting" && /* @__PURE__ */ jsxs("div", {
|
|
41317
41463
|
className: "absolute inset-0 z-10 transform-gpu flex flex-col items-center justify-center bg-black/70 gap-2",
|
|
41318
41464
|
children: [/* @__PURE__ */ jsx("svg", {
|
|
41319
41465
|
className: "h-6 w-6 text-white/60 animate-spin",
|
|
@@ -41335,7 +41481,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41335
41481
|
children: "Connecting…"
|
|
41336
41482
|
})]
|
|
41337
41483
|
}),
|
|
41338
|
-
!stillImg && (state === "error" || state === "disconnected") && /* @__PURE__ */ jsxs("div", {
|
|
41484
|
+
showControls && !stillImg && (state === "error" || state === "disconnected") && /* @__PURE__ */ jsxs("div", {
|
|
41339
41485
|
className: "absolute inset-0 z-10 transform-gpu flex flex-col items-center justify-center bg-black/70 gap-2",
|
|
41340
41486
|
children: [
|
|
41341
41487
|
/* @__PURE__ */ jsx("svg", {
|
|
@@ -41360,7 +41506,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41360
41506
|
})
|
|
41361
41507
|
]
|
|
41362
41508
|
}),
|
|
41363
|
-
stillImg && (state === "connecting" || state === "disconnected") && /* @__PURE__ */ jsx("div", {
|
|
41509
|
+
showControls && stillImg && (state === "connecting" || state === "disconnected") && /* @__PURE__ */ jsx("div", {
|
|
41364
41510
|
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
41511
|
children: /* @__PURE__ */ jsx("svg", {
|
|
41366
41512
|
className: "h-3.5 w-3.5 text-white/90 animate-spin",
|
|
@@ -41379,7 +41525,7 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
41379
41525
|
})
|
|
41380
41526
|
})
|
|
41381
41527
|
}),
|
|
41382
|
-
stillImg && state === "error" && /* @__PURE__ */ jsx("button", {
|
|
41528
|
+
showControls && stillImg && state === "error" && /* @__PURE__ */ jsx("button", {
|
|
41383
41529
|
onClick: handleReconnect,
|
|
41384
41530
|
title: errorMessage || "Reconnect",
|
|
41385
41531
|
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 +42639,7 @@ function StreamBrokerSelector({ deviceId, value, onChange, disabled, label, clas
|
|
|
42493
42639
|
* needs a one-click copy affordance (export setup panels, etc.).
|
|
42494
42640
|
*/
|
|
42495
42641
|
var COPIED_RESET_MS = 2e3;
|
|
42496
|
-
function CopyButton({ value, label, className, disabled }) {
|
|
42642
|
+
function CopyButton({ value, label, srLabel, className, disabled }) {
|
|
42497
42643
|
const [copied, setCopied] = useState(false);
|
|
42498
42644
|
const handleCopy = useCallback(() => {
|
|
42499
42645
|
if (!value) return;
|
|
@@ -42509,7 +42655,7 @@ function CopyButton({ value, label, className, disabled }) {
|
|
|
42509
42655
|
disabled: disabled || value.length === 0,
|
|
42510
42656
|
onClick: handleCopy,
|
|
42511
42657
|
className: cn(className),
|
|
42512
|
-
"aria-label": copied ? "Copied" : `Copy ${label ?? "value"}`,
|
|
42658
|
+
"aria-label": copied ? "Copied" : `Copy ${srLabel ?? label ?? "value"}`,
|
|
42513
42659
|
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
42660
|
className: "ml-1",
|
|
42515
42661
|
children: copied ? "Copied" : label
|
|
@@ -42578,35 +42724,30 @@ function capitaliseLinkState(state) {
|
|
|
42578
42724
|
/**
|
|
42579
42725
|
* A single label/value row in the Setup section. `secret` rows mask the
|
|
42580
42726
|
* value behind a reveal toggle; every row gets a copy button.
|
|
42727
|
+
*
|
|
42728
|
+
* Layout — including the L1 stack that keeps a long token readable on a phone
|
|
42729
|
+
* — is owned by the shared `<SettingRow>`; this component only decides what
|
|
42730
|
+
* the value and the affordances are.
|
|
42581
42731
|
*/
|
|
42582
42732
|
function SetupFieldRow({ field }) {
|
|
42583
42733
|
const [revealed, setRevealed] = useState(false);
|
|
42584
42734
|
const isSecret = field.secret === true;
|
|
42585
42735
|
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
|
-
]
|
|
42736
|
+
return /* @__PURE__ */ jsx(SettingRow, {
|
|
42737
|
+
label: field.label,
|
|
42738
|
+
valueClassName: "font-mono",
|
|
42739
|
+
actions: /* @__PURE__ */ jsxs(Fragment$1, { children: [isSecret && /* @__PURE__ */ jsx(Button, {
|
|
42740
|
+
size: "sm",
|
|
42741
|
+
variant: "ghost",
|
|
42742
|
+
type: "button",
|
|
42743
|
+
"aria-label": revealed ? "Hide value" : "Reveal value",
|
|
42744
|
+
onClick: () => setRevealed((v) => !v),
|
|
42745
|
+
children: revealed ? /* @__PURE__ */ jsx(EyeOff, { className: "h-3.5 w-3.5" }) : /* @__PURE__ */ jsx(Eye, { className: "h-3.5 w-3.5" })
|
|
42746
|
+
}), /* @__PURE__ */ jsx(CopyButton, {
|
|
42747
|
+
value: field.value,
|
|
42748
|
+
srLabel: field.label
|
|
42749
|
+
})] }),
|
|
42750
|
+
children: displayValue || "—"
|
|
42610
42751
|
});
|
|
42611
42752
|
}
|
|
42612
42753
|
/**
|
|
@@ -46712,6 +46853,112 @@ function useDeviceDetections(trpc, deviceId) {
|
|
|
46712
46853
|
};
|
|
46713
46854
|
}
|
|
46714
46855
|
//#endregion
|
|
46856
|
+
//#region src/hooks/turn-server-cache.ts
|
|
46857
|
+
/** Short enough that rotated credentials are picked up promptly. */
|
|
46858
|
+
var DEFAULT_FRESH_TTL_MS = 5 * 6e4;
|
|
46859
|
+
/** Half of the shortest provider credential lifetime in the fleet (24 h). */
|
|
46860
|
+
var DEFAULT_STALE_CAP_MS = 720 * 6e4;
|
|
46861
|
+
var DEFAULT_STORAGE_KEY = "camstack:turn-servers:v1";
|
|
46862
|
+
function defaultStorage() {
|
|
46863
|
+
const g = globalThis;
|
|
46864
|
+
try {
|
|
46865
|
+
return g.localStorage ?? null;
|
|
46866
|
+
} catch {
|
|
46867
|
+
return null;
|
|
46868
|
+
}
|
|
46869
|
+
}
|
|
46870
|
+
/** Type guard for a persisted entry — storage content is external data. */
|
|
46871
|
+
function isCacheEntry(value) {
|
|
46872
|
+
if (typeof value !== "object" || value === null) return false;
|
|
46873
|
+
const v = value;
|
|
46874
|
+
if (typeof v.fetchedAt !== "number" || !Array.isArray(v.servers)) return false;
|
|
46875
|
+
return v.servers.every((s) => {
|
|
46876
|
+
if (typeof s !== "object" || s === null) return false;
|
|
46877
|
+
const srv = s;
|
|
46878
|
+
if (!(typeof srv.urls === "string" || Array.isArray(srv.urls) && srv.urls.every((u) => typeof u === "string"))) return false;
|
|
46879
|
+
if (srv.username !== void 0 && typeof srv.username !== "string") return false;
|
|
46880
|
+
if (srv.credential !== void 0 && typeof srv.credential !== "string") return false;
|
|
46881
|
+
return true;
|
|
46882
|
+
});
|
|
46883
|
+
}
|
|
46884
|
+
var TurnServerCache = class {
|
|
46885
|
+
freshTtlMs;
|
|
46886
|
+
staleCapMs;
|
|
46887
|
+
storage;
|
|
46888
|
+
now;
|
|
46889
|
+
storageKey;
|
|
46890
|
+
/** Keyed on the caller's tRPC client object (stable per connected system). */
|
|
46891
|
+
memory = /* @__PURE__ */ new WeakMap();
|
|
46892
|
+
/** In-flight fetch per key — concurrent callers share one round trip. */
|
|
46893
|
+
inflight = /* @__PURE__ */ new WeakMap();
|
|
46894
|
+
constructor(options = {}) {
|
|
46895
|
+
this.freshTtlMs = options.freshTtlMs ?? DEFAULT_FRESH_TTL_MS;
|
|
46896
|
+
this.staleCapMs = options.staleCapMs ?? DEFAULT_STALE_CAP_MS;
|
|
46897
|
+
this.storage = "storage" in options ? options.storage ?? null : defaultStorage();
|
|
46898
|
+
this.now = options.now ?? (() => Date.now());
|
|
46899
|
+
this.storageKey = options.storageKey ?? DEFAULT_STORAGE_KEY;
|
|
46900
|
+
}
|
|
46901
|
+
/**
|
|
46902
|
+
* Resolve the ICE servers for `key`, fetching via `fetch` only when no
|
|
46903
|
+
* fresh-enough entry exists. Never rejects: a failed fetch resolves to the
|
|
46904
|
+
* stale entry when one exists, else `undefined`.
|
|
46905
|
+
*/
|
|
46906
|
+
async getOrFetch(key, fetch) {
|
|
46907
|
+
const at = this.now();
|
|
46908
|
+
const entry = this.memory.get(key) ?? this.readStorage();
|
|
46909
|
+
if (entry) {
|
|
46910
|
+
const age = at - entry.fetchedAt;
|
|
46911
|
+
if (age < this.freshTtlMs) return entry.servers;
|
|
46912
|
+
if (age < this.staleCapMs) {
|
|
46913
|
+
this.startFetch(key, fetch, entry);
|
|
46914
|
+
return entry.servers;
|
|
46915
|
+
}
|
|
46916
|
+
}
|
|
46917
|
+
return this.startFetch(key, fetch, entry);
|
|
46918
|
+
}
|
|
46919
|
+
startFetch(key, fetch, stale) {
|
|
46920
|
+
const pending = this.inflight.get(key);
|
|
46921
|
+
if (pending) return pending;
|
|
46922
|
+
const run = (async () => {
|
|
46923
|
+
try {
|
|
46924
|
+
const servers = await fetch();
|
|
46925
|
+
if (servers.length > 0) {
|
|
46926
|
+
const entry = {
|
|
46927
|
+
servers,
|
|
46928
|
+
fetchedAt: this.now()
|
|
46929
|
+
};
|
|
46930
|
+
this.memory.set(key, entry);
|
|
46931
|
+
this.writeStorage(entry);
|
|
46932
|
+
}
|
|
46933
|
+
return servers;
|
|
46934
|
+
} catch {
|
|
46935
|
+
return stale?.servers;
|
|
46936
|
+
}
|
|
46937
|
+
})().finally(() => {
|
|
46938
|
+
this.inflight.delete(key);
|
|
46939
|
+
});
|
|
46940
|
+
this.inflight.set(key, run);
|
|
46941
|
+
return run;
|
|
46942
|
+
}
|
|
46943
|
+
readStorage() {
|
|
46944
|
+
if (!this.storage) return void 0;
|
|
46945
|
+
try {
|
|
46946
|
+
const raw = this.storage.getItem(this.storageKey);
|
|
46947
|
+
if (raw === null) return void 0;
|
|
46948
|
+
const parsed = JSON.parse(raw);
|
|
46949
|
+
return isCacheEntry(parsed) ? parsed : void 0;
|
|
46950
|
+
} catch {
|
|
46951
|
+
return;
|
|
46952
|
+
}
|
|
46953
|
+
}
|
|
46954
|
+
writeStorage(entry) {
|
|
46955
|
+
if (!this.storage) return;
|
|
46956
|
+
try {
|
|
46957
|
+
this.storage.setItem(this.storageKey, JSON.stringify(entry));
|
|
46958
|
+
} catch {}
|
|
46959
|
+
}
|
|
46960
|
+
};
|
|
46961
|
+
//#endregion
|
|
46715
46962
|
//#region src/hooks/use-device-webrtc.ts
|
|
46716
46963
|
/**
|
|
46717
46964
|
* useDeviceWebrtc — WebRTC signaling hook for device-scoped streaming.
|
|
@@ -46729,15 +46976,16 @@ function useDeviceDetections(trpc, deviceId) {
|
|
|
46729
46976
|
* @param deviceId - numeric device ID (null = disabled)
|
|
46730
46977
|
* @param pollIntervalMs - how often to refresh profile slots (default: 5000)
|
|
46731
46978
|
*/
|
|
46732
|
-
/**
|
|
46733
|
-
*
|
|
46734
|
-
*
|
|
46735
|
-
|
|
46736
|
-
|
|
46737
|
-
*
|
|
46738
|
-
*
|
|
46739
|
-
*
|
|
46740
|
-
|
|
46979
|
+
/** Module-level TURN/STUN credential cache. Keyed on the caller's trpc client
|
|
46980
|
+
* object (stable per connected system — NOT on `trpc.turnProvider`, which is
|
|
46981
|
+
* a proxy minted fresh on every property access), so two admin tabs pointed
|
|
46982
|
+
* at different hubs never cross-serve credentials from the memory layer; the
|
|
46983
|
+
* storage layer is per-origin, and the page's origin IS the hub. Coalesces
|
|
46984
|
+
* concurrent fetches (the mount prefetch and the connect's own call used to
|
|
46985
|
+
* race into TWO round trips) and persists across page loads so a fresh embed
|
|
46986
|
+
* page — one per camera open on native — finds warm credentials instead of
|
|
46987
|
+
* re-paying the measured 0.2–3.6 s serialized fetch. See turn-server-cache.ts. */
|
|
46988
|
+
var turnServersCache = new TurnServerCache();
|
|
46741
46989
|
function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
46742
46990
|
const [remoteStreams, setRemoteStreams] = useState([]);
|
|
46743
46991
|
useEffect(() => {
|
|
@@ -46806,25 +47054,17 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
|
46806
47054
|
};
|
|
46807
47055
|
}, [deviceId, remoteStreams]);
|
|
46808
47056
|
const getIceServers = useCallback(async () => {
|
|
46809
|
-
|
|
46810
|
-
|
|
46811
|
-
|
|
46812
|
-
|
|
46813
|
-
const mapped = (await trpc.turnProvider.getTurnServers.query()).map((s) => {
|
|
47057
|
+
const provider = trpc.turnProvider;
|
|
47058
|
+
if (!provider) return void 0;
|
|
47059
|
+
return turnServersCache.getOrFetch(trpc, async () => {
|
|
47060
|
+
return (await provider.getTurnServers.query()).map((s) => {
|
|
46814
47061
|
return {
|
|
46815
47062
|
urls: typeof s.urls === "string" ? s.urls : [...s.urls],
|
|
46816
47063
|
...s.username !== void 0 ? { username: s.username } : {},
|
|
46817
47064
|
...s.credential !== void 0 ? { credential: s.credential } : {}
|
|
46818
47065
|
};
|
|
46819
47066
|
});
|
|
46820
|
-
|
|
46821
|
-
servers: mapped,
|
|
46822
|
-
fetchedAt: Date.now()
|
|
46823
|
-
});
|
|
46824
|
-
return mapped;
|
|
46825
|
-
} catch {
|
|
46826
|
-
return cached?.servers;
|
|
46827
|
-
}
|
|
47067
|
+
});
|
|
46828
47068
|
}, [trpc]);
|
|
46829
47069
|
useEffect(() => {
|
|
46830
47070
|
getIceServers();
|
|
@@ -47198,4 +47438,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
|
|
|
47198
47438
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
47199
47439
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
47200
47440
|
//#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 };
|
|
47441
|
+
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, 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 };
|