@camstack/ui-library 1.2.46 → 1.2.48
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/data-table.d.ts +17 -1
- package/dist/composites/device-selector-picker.d.ts +37 -0
- package/dist/composites/index.d.ts +2 -0
- package/dist/composites/scope-picker.d.ts +7 -2
- package/dist/index.cjs +553 -91
- package/dist/index.js +549 -93
- package/dist/primitives/dialog.d.ts +14 -0
- package/dist/primitives/tabs.d.ts +17 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as __mfHostReact from "react";
|
|
|
3
3
|
import React, { Fragment, Suspense, createContext, createElement, forwardRef, lazy, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
|
|
4
4
|
import * as __mfHostReactJsxRuntime from "react/jsx-runtime";
|
|
5
5
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { ALL_CAPABILITY_DEFINITIONS, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveVariantModelId, tryConvertUnit } from "@camstack/types";
|
|
6
|
+
import { ALL_CAPABILITY_DEFINITIONS, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEFAULT_EVENT_COLOR, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, createDeviceProxy, createLazyTrpcSource, createSliceHandle, deriveRecordingMode, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveVariantModelId, resolveViewableDeviceIds, tryConvertUnit } from "@camstack/types";
|
|
7
7
|
import * as __mfHostReactDOM from "react-dom";
|
|
8
8
|
import { createPortal } from "react-dom";
|
|
9
9
|
import * as __mfHostReactDOMClient from "react-dom/client";
|
|
@@ -10338,6 +10338,29 @@ var Lightbulb = createLucideIcon("lightbulb", [
|
|
|
10338
10338
|
* This source code is licensed under the ISC license.
|
|
10339
10339
|
* See the LICENSE file in the root directory of this source tree.
|
|
10340
10340
|
*/
|
|
10341
|
+
var Link2 = createLucideIcon("link-2", [
|
|
10342
|
+
["path", {
|
|
10343
|
+
d: "M9 17H7A5 5 0 0 1 7 7h2",
|
|
10344
|
+
key: "8i5ue5"
|
|
10345
|
+
}],
|
|
10346
|
+
["path", {
|
|
10347
|
+
d: "M15 7h2a5 5 0 1 1 0 10h-2",
|
|
10348
|
+
key: "1b9ql8"
|
|
10349
|
+
}],
|
|
10350
|
+
["line", {
|
|
10351
|
+
x1: "8",
|
|
10352
|
+
x2: "16",
|
|
10353
|
+
y1: "12",
|
|
10354
|
+
y2: "12",
|
|
10355
|
+
key: "1jonct"
|
|
10356
|
+
}]
|
|
10357
|
+
]);
|
|
10358
|
+
/**
|
|
10359
|
+
* @license lucide-react v0.576.0 - ISC
|
|
10360
|
+
*
|
|
10361
|
+
* This source code is licensed under the ISC license.
|
|
10362
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
10363
|
+
*/
|
|
10341
10364
|
var ListChecks = createLucideIcon("list-checks", [
|
|
10342
10365
|
["path", {
|
|
10343
10366
|
d: "M13 5h8",
|
|
@@ -13050,13 +13073,33 @@ function DialogTrigger({ children, ...props }) {
|
|
|
13050
13073
|
* whenever they are asymmetric (they are: ~59px top vs ~34px bottom). Every
|
|
13051
13074
|
* term collapses to the previous `100dvh - 2rem` where the insets are 0.
|
|
13052
13075
|
*/
|
|
13053
|
-
var contentVariants = cva("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 m-0 w-[calc(100vw-2rem)] bg-background-elevated text-foreground border border-border rounded-lg p-4 backdrop:bg-black/50 backdrop:backdrop-blur-sm max-h-[calc(100dvh-2rem-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))]
|
|
13076
|
+
var contentVariants = cva("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 m-0 w-[calc(100vw-2rem)] bg-background-elevated text-foreground border border-border rounded-lg p-4 backdrop:bg-black/50 backdrop:backdrop-blur-sm max-h-[calc(100dvh-2rem-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))] [&:not([open])]:hidden", {
|
|
13054
13077
|
variants: {
|
|
13055
13078
|
width: {
|
|
13056
13079
|
sm: "max-w-sm",
|
|
13057
13080
|
md: "max-w-md",
|
|
13058
13081
|
lg: "max-w-lg"
|
|
13059
13082
|
},
|
|
13083
|
+
/**
|
|
13084
|
+
* WHICH box scrolls when the content is taller than the height cap.
|
|
13085
|
+
*
|
|
13086
|
+
* `content` (default) scrolls the whole dialog: the title, any tab strip
|
|
13087
|
+
* and the Save/Cancel row travel with the fields. That is fine for a
|
|
13088
|
+
* short form and wrong for a long one — the operator scrolls to the
|
|
13089
|
+
* bottom of a rule editor and the buttons are somewhere above him, the
|
|
13090
|
+
* tab strip is gone, and the only way back to either is to scroll the
|
|
13091
|
+
* form he was reading.
|
|
13092
|
+
*
|
|
13093
|
+
* `body` makes the dialog a flex column that does not scroll at all and
|
|
13094
|
+
* hands the scrolling to `<DialogBody>`. The chrome around the body —
|
|
13095
|
+
* header, tab strip, footer — stays put at every height. The dialog
|
|
13096
|
+
* keeps its own padding either way, so `sheet-on-mobile`'s
|
|
13097
|
+
* safe-area bottom padding still applies to the footer.
|
|
13098
|
+
*/
|
|
13099
|
+
scroll: {
|
|
13100
|
+
content: "overflow-y-auto",
|
|
13101
|
+
body: "flex flex-col overflow-hidden"
|
|
13102
|
+
},
|
|
13060
13103
|
placement: {
|
|
13061
13104
|
center: "",
|
|
13062
13105
|
"sheet-on-mobile": "bottom-0 left-0 right-0 top-auto w-full max-w-full translate-x-0 translate-y-0 rounded-b-none max-h-[92dvh] pb-[calc(1rem+env(safe-area-inset-bottom))] md:left-1/2 md:top-1/2 md:-translate-x-1/2 md:-translate-y-1/2 md:rounded-lg md:bottom-auto md:pb-4 md:max-h-[calc(100dvh-2rem-2*max(env(safe-area-inset-top),env(safe-area-inset-bottom)))]"
|
|
@@ -13081,10 +13124,11 @@ var contentVariants = cva("fixed left-1/2 top-1/2 -translate-x-1/2 -translate-y-
|
|
|
13081
13124
|
],
|
|
13082
13125
|
defaultVariants: {
|
|
13083
13126
|
width: "md",
|
|
13084
|
-
placement: "center"
|
|
13127
|
+
placement: "center",
|
|
13128
|
+
scroll: "content"
|
|
13085
13129
|
}
|
|
13086
13130
|
});
|
|
13087
|
-
var DialogContent = forwardRef(({ className, width, placement, children, ...props }, ref) => {
|
|
13131
|
+
var DialogContent = forwardRef(({ className, width, placement, scroll, children, ...props }, ref) => {
|
|
13088
13132
|
const { open, setOpen, contentId } = useDialogContext();
|
|
13089
13133
|
const innerRef = useRef(null);
|
|
13090
13134
|
const dialogRef = ref ?? innerRef;
|
|
@@ -13102,7 +13146,8 @@ var DialogContent = forwardRef(({ className, width, placement, children, ...prop
|
|
|
13102
13146
|
id: contentId,
|
|
13103
13147
|
className: cn(contentVariants({
|
|
13104
13148
|
width,
|
|
13105
|
-
placement
|
|
13149
|
+
placement,
|
|
13150
|
+
scroll
|
|
13106
13151
|
}), className),
|
|
13107
13152
|
onClick: handleClick,
|
|
13108
13153
|
onClose: () => setOpen(false),
|
|
@@ -13111,15 +13156,33 @@ var DialogContent = forwardRef(({ className, width, placement, children, ...prop
|
|
|
13111
13156
|
});
|
|
13112
13157
|
});
|
|
13113
13158
|
DialogContent.displayName = "DialogContent";
|
|
13159
|
+
/** `shrink-0` is inert outside a flex column and load-bearing inside one:
|
|
13160
|
+
* under `scroll="body"` the header must keep its height while the body gives
|
|
13161
|
+
* ground, or a long form squeezes its own title to nothing. */
|
|
13114
13162
|
function DialogHeader({ className, ...props }) {
|
|
13115
13163
|
return /* @__PURE__ */ jsx("div", {
|
|
13116
|
-
className: cn("flex flex-col gap-1 mb-3", className),
|
|
13164
|
+
className: cn("flex flex-col gap-1 mb-3 shrink-0", className),
|
|
13165
|
+
...props
|
|
13166
|
+
});
|
|
13167
|
+
}
|
|
13168
|
+
/**
|
|
13169
|
+
* The scrolling middle of a `scroll="body"` dialog.
|
|
13170
|
+
*
|
|
13171
|
+
* `min-h-0` is what makes it work: a flex item's default `min-height: auto`
|
|
13172
|
+
* refuses to shrink below its content, so without it the body pushes the
|
|
13173
|
+
* footer out of the dialog instead of scrolling — the exact failure this
|
|
13174
|
+
* variant exists to remove. Anything sticky INSIDE a dialog body pins against
|
|
13175
|
+
* this element, since it is the scroll container.
|
|
13176
|
+
*/
|
|
13177
|
+
function DialogBody({ className, ...props }) {
|
|
13178
|
+
return /* @__PURE__ */ jsx("div", {
|
|
13179
|
+
className: cn("flex-1 min-h-0 overflow-y-auto", className),
|
|
13117
13180
|
...props
|
|
13118
13181
|
});
|
|
13119
13182
|
}
|
|
13120
13183
|
function DialogFooter({ className, ...props }) {
|
|
13121
13184
|
return /* @__PURE__ */ jsx("div", {
|
|
13122
|
-
className: cn("flex justify-end gap-2 mt-4", className),
|
|
13185
|
+
className: cn("flex justify-end gap-2 mt-4 shrink-0", className),
|
|
13123
13186
|
...props
|
|
13124
13187
|
});
|
|
13125
13188
|
}
|
|
@@ -13520,10 +13583,27 @@ function Tabs({ value: controlledValue, onValueChange, defaultValue = "", classN
|
|
|
13520
13583
|
})
|
|
13521
13584
|
});
|
|
13522
13585
|
}
|
|
13586
|
+
/**
|
|
13587
|
+
* The strip SCROLLS sideways; it never squashes and never clips.
|
|
13588
|
+
*
|
|
13589
|
+
* Before this, the bar was a bare `flex flex-row`: every trigger was a
|
|
13590
|
+
* shrinkable flex item with no `whitespace-nowrap`, so past ~4 tabs on a narrow
|
|
13591
|
+
* viewport the labels wrapped inside a fixed-height (`h-7`) button and the
|
|
13592
|
+
* last tabs left the box with no way to reach them. That is the "the headers
|
|
13593
|
+
* are not scrollable" report on the Notification Center, whose rule sections
|
|
13594
|
+
* (6) and rule-editor tabs (up to 6) both live in one of these.
|
|
13595
|
+
*
|
|
13596
|
+
* BOTH axes are spelled out on purpose. Per CSS Overflow, `visible` is not
|
|
13597
|
+
* combinable with `auto`, so `overflow-x-auto` alone would silently promote
|
|
13598
|
+
* `overflow-y` to `auto` as well — and a one-row bar whose content box is
|
|
13599
|
+
* shortened by the horizontal scrollbar then raises a SECOND, vertical
|
|
13600
|
+
* scrollbar. That exact defect is documented on `SchemaTabBar`; `overflow-y`
|
|
13601
|
+
* pinned to `hidden` makes it impossible here.
|
|
13602
|
+
*/
|
|
13523
13603
|
function TabsList({ className, ...props }) {
|
|
13524
13604
|
return /* @__PURE__ */ jsx("div", {
|
|
13525
13605
|
role: "tablist",
|
|
13526
|
-
className: cn("flex flex-row border-b border-border-subtle", className),
|
|
13606
|
+
className: cn("flex flex-row overflow-x-auto overflow-y-hidden border-b border-border-subtle", className),
|
|
13527
13607
|
...props
|
|
13528
13608
|
});
|
|
13529
13609
|
}
|
|
@@ -13536,7 +13616,7 @@ function TabsTrigger({ value, className, ...props }) {
|
|
|
13536
13616
|
"aria-selected": isActive,
|
|
13537
13617
|
"aria-controls": `tabpanel-${value}`,
|
|
13538
13618
|
tabIndex: isActive ? 0 : -1,
|
|
13539
|
-
className: cn("h-7 text-xs px-3 transition-colors", isActive ? "border-b-2 border-primary text-foreground font-medium" : "text-foreground-muted hover:text-foreground", className),
|
|
13619
|
+
className: cn("h-7 shrink-0 whitespace-nowrap text-xs px-3 transition-colors", isActive ? "border-b-2 border-primary text-foreground font-medium" : "text-foreground-muted hover:text-foreground", className),
|
|
13540
13620
|
onClick: () => setValue(value),
|
|
13541
13621
|
...props
|
|
13542
13622
|
});
|
|
@@ -13805,25 +13885,34 @@ function SettingRow({ label, children, actions, elements = "plain", className, v
|
|
|
13805
13885
|
}
|
|
13806
13886
|
//#endregion
|
|
13807
13887
|
//#region src/composites/data-table.tsx
|
|
13888
|
+
/**
|
|
13889
|
+
* The default cap for an internally-scrolling table.
|
|
13890
|
+
*
|
|
13891
|
+
* `60vh` leaves the page header, its filters and its actions on screen at
|
|
13892
|
+
* every viewport while still showing ~10 rows — and it is a fraction, so it
|
|
13893
|
+
* does not need a breakpoint of its own.
|
|
13894
|
+
*/
|
|
13895
|
+
var TABLE_SCROLL_MAX_H = "max-h-[60vh]";
|
|
13808
13896
|
var ALIGN_CLASS = {
|
|
13809
13897
|
left: "text-left",
|
|
13810
13898
|
right: "text-right",
|
|
13811
13899
|
center: "text-center"
|
|
13812
13900
|
};
|
|
13813
|
-
function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyMessage, className, bordered = true, rowClassName, mobileMode = "auto" }) {
|
|
13901
|
+
function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyMessage, className, bordered = true, rowClassName, mobileMode = "auto", maxBodyHeight }) {
|
|
13814
13902
|
const isNarrow = useIsMobile();
|
|
13815
13903
|
const layout = resolveTableLayout({
|
|
13816
13904
|
mode: mobileMode,
|
|
13817
13905
|
columnCount: columns.length,
|
|
13818
13906
|
isNarrow
|
|
13819
13907
|
});
|
|
13908
|
+
const scrolls = maxBodyHeight !== void 0;
|
|
13820
13909
|
if (rows.length === 0 && emptyMessage) return /* @__PURE__ */ jsx("div", {
|
|
13821
13910
|
className: `rounded-lg ${bordered ? "border border-border" : ""} bg-surface px-3 py-4 text-xs text-foreground-subtle text-center ${className ?? ""}`,
|
|
13822
13911
|
children: emptyMessage
|
|
13823
13912
|
});
|
|
13824
13913
|
if (rows.length === 0) return null;
|
|
13825
13914
|
if (layout === "cards") return /* @__PURE__ */ jsx("div", {
|
|
13826
|
-
className: `space-y-2 ${className ?? ""}`,
|
|
13915
|
+
className: `space-y-2 ${scrolls ? `${maxBodyHeight} overflow-y-auto` : ""} ${className ?? ""}`,
|
|
13827
13916
|
children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx(DataTableCard, {
|
|
13828
13917
|
row,
|
|
13829
13918
|
rowIndex,
|
|
@@ -13834,9 +13923,15 @@ function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyM
|
|
|
13834
13923
|
}, rowKey ? rowKey(row, rowIndex) : rowIndex))
|
|
13835
13924
|
});
|
|
13836
13925
|
return /* @__PURE__ */ jsx("div", {
|
|
13837
|
-
className:
|
|
13926
|
+
className: [
|
|
13927
|
+
"rounded-lg",
|
|
13928
|
+
bordered ? "border border-border" : "",
|
|
13929
|
+
"bg-surface overflow-x-auto",
|
|
13930
|
+
scrolls ? `${maxBodyHeight} overflow-y-auto` : "",
|
|
13931
|
+
className ?? ""
|
|
13932
|
+
].filter(Boolean).join(" "),
|
|
13838
13933
|
children: /* @__PURE__ */ jsxs("table", {
|
|
13839
|
-
className:
|
|
13934
|
+
className: `w-full text-xs ${scrolls ? "border-separate border-spacing-0" : ""}`,
|
|
13840
13935
|
style: { minWidth: `${minWidthPx}px` },
|
|
13841
13936
|
children: [/* @__PURE__ */ jsx("thead", {
|
|
13842
13937
|
className: "bg-surface",
|
|
@@ -13846,6 +13941,7 @@ function DataTable({ columns, rows, rowKey, onRowClick, minWidthPx = 480, emptyM
|
|
|
13846
13941
|
return /* @__PURE__ */ jsx("th", {
|
|
13847
13942
|
className: [
|
|
13848
13943
|
"px-3 py-2 text-foreground-subtle font-medium bg-surface border-b border-border",
|
|
13944
|
+
scrolls ? "sticky top-0 z-10" : "",
|
|
13849
13945
|
ALIGN_CLASS[align],
|
|
13850
13946
|
nowrap ? "whitespace-nowrap" : "",
|
|
13851
13947
|
col.width ?? ""
|
|
@@ -46856,6 +46952,345 @@ function KebabMenu({ items, header, triggerClassName, title = "More actions" })
|
|
|
46856
46952
|
});
|
|
46857
46953
|
}
|
|
46858
46954
|
//#endregion
|
|
46955
|
+
//#region src/composites/device-selector-picker.tsx
|
|
46956
|
+
/**
|
|
46957
|
+
* <DeviceSelectorPicker> — the operator-facing editor for a v3
|
|
46958
|
+
* {@link DeviceSelector}: the "on WHICH devices" half of a scope grant.
|
|
46959
|
+
*
|
|
46960
|
+
* Four tabs, one per selector kind, because the kinds are not interchangeable
|
|
46961
|
+
* and the operator has to choose between them deliberately:
|
|
46962
|
+
*
|
|
46963
|
+
* All → every device, now and forever. DYNAMIC.
|
|
46964
|
+
* By type → every device of a `DeviceType`. DYNAMIC — a camera added
|
|
46965
|
+
* tomorrow is covered with no re-grant.
|
|
46966
|
+
* By room → every device carrying an operator-assigned `location` label.
|
|
46967
|
+
* DYNAMIC. Rendered ONLY when the fleet actually has labels;
|
|
46968
|
+
* an empty tab reads as a broken feature, not as "unused".
|
|
46969
|
+
* Chosen → an explicit id list. STATIC — this is the one that does NOT
|
|
46970
|
+
* cover a new device, and the tab says so.
|
|
46971
|
+
*
|
|
46972
|
+
* Counts are LIVE (computed off `deviceManager.listAll`) so "Camera · 12"
|
|
46973
|
+
* answers "how much am I granting" without leaving the panel.
|
|
46974
|
+
*
|
|
46975
|
+
* Shared, not forked: the raw `<ScopePicker>` device row and the simple
|
|
46976
|
+
* Access panel both render this. Two editors for one wire shape is how a
|
|
46977
|
+
* selector ends up meaning different things in two places.
|
|
46978
|
+
*/
|
|
46979
|
+
/** Human label for a `DeviceType` — 'lawn-mower' → 'Lawn mower'. */
|
|
46980
|
+
function deviceTypeLabel(type) {
|
|
46981
|
+
const spaced = type.replaceAll("-", " ");
|
|
46982
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
46983
|
+
}
|
|
46984
|
+
/** Which tab a selector belongs to. */
|
|
46985
|
+
function tabForSelector(selector) {
|
|
46986
|
+
return selector.kind;
|
|
46987
|
+
}
|
|
46988
|
+
/**
|
|
46989
|
+
* A fresh selector when the operator switches tabs. Switching is destructive
|
|
46990
|
+
* by nature — an `ids` list has no meaning as a `types` list — so each tab
|
|
46991
|
+
* starts empty rather than guessing a translation.
|
|
46992
|
+
*/
|
|
46993
|
+
function emptySelectorFor(tab) {
|
|
46994
|
+
switch (tab) {
|
|
46995
|
+
case "all": return { kind: "all" };
|
|
46996
|
+
case "types": return {
|
|
46997
|
+
kind: "types",
|
|
46998
|
+
types: []
|
|
46999
|
+
};
|
|
47000
|
+
case "locations": return {
|
|
47001
|
+
kind: "locations",
|
|
47002
|
+
locations: []
|
|
47003
|
+
};
|
|
47004
|
+
case "ids": return {
|
|
47005
|
+
kind: "ids",
|
|
47006
|
+
ids: []
|
|
47007
|
+
};
|
|
47008
|
+
}
|
|
47009
|
+
}
|
|
47010
|
+
function DeviceSelectorPicker({ value, onChange, includeLinked, onIncludeLinkedChange, clampToDeviceIds, dense = false }) {
|
|
47011
|
+
const { data: rawDevices } = useDeviceManagerListAll({});
|
|
47012
|
+
const [search, setSearch] = useState("");
|
|
47013
|
+
const devices = useMemo(() => {
|
|
47014
|
+
const all = (rawDevices ?? []).map((d) => ({
|
|
47015
|
+
id: d.id,
|
|
47016
|
+
name: d.name,
|
|
47017
|
+
type: d.type,
|
|
47018
|
+
location: d.location,
|
|
47019
|
+
parentDeviceId: d.parentDeviceId
|
|
47020
|
+
}));
|
|
47021
|
+
if (clampToDeviceIds == null) return all;
|
|
47022
|
+
const allowed = new Set(clampToDeviceIds);
|
|
47023
|
+
return all.filter((d) => allowed.has(d.id));
|
|
47024
|
+
}, [rawDevices, clampToDeviceIds]);
|
|
47025
|
+
const typeOptions = useMemo(() => {
|
|
47026
|
+
const counts = /* @__PURE__ */ new Map();
|
|
47027
|
+
for (const d of devices) counts.set(d.type, (counts.get(d.type) ?? 0) + 1);
|
|
47028
|
+
if (value.kind === "types") {
|
|
47029
|
+
for (const t of value.types) if (!counts.has(t)) counts.set(t, 0);
|
|
47030
|
+
}
|
|
47031
|
+
return [...counts.entries()].map(([type, count]) => ({
|
|
47032
|
+
value: type,
|
|
47033
|
+
label: deviceTypeLabel(type),
|
|
47034
|
+
count
|
|
47035
|
+
})).sort((a, b) => a.label.localeCompare(b.label));
|
|
47036
|
+
}, [devices, value]);
|
|
47037
|
+
const locationOptions = useMemo(() => {
|
|
47038
|
+
const counts = /* @__PURE__ */ new Map();
|
|
47039
|
+
for (const d of devices) {
|
|
47040
|
+
if (d.location === null || d.location.length === 0) continue;
|
|
47041
|
+
counts.set(d.location, (counts.get(d.location) ?? 0) + 1);
|
|
47042
|
+
}
|
|
47043
|
+
if (value.kind === "locations") {
|
|
47044
|
+
for (const l of value.locations) if (!counts.has(l)) counts.set(l, 0);
|
|
47045
|
+
}
|
|
47046
|
+
return [...counts.entries()].map(([location, count]) => ({
|
|
47047
|
+
value: location,
|
|
47048
|
+
label: location,
|
|
47049
|
+
count
|
|
47050
|
+
})).sort((a, b) => a.label.localeCompare(b.label));
|
|
47051
|
+
}, [devices, value]);
|
|
47052
|
+
/** The Room tab exists only when the fleet has rooms. */
|
|
47053
|
+
const hasLocations = locationOptions.length > 0;
|
|
47054
|
+
const visibleDevices = useMemo(() => {
|
|
47055
|
+
const q = search.trim().toLowerCase();
|
|
47056
|
+
return [...q.length === 0 ? devices : devices.filter((d) => d.name.toLowerCase().includes(q) || String(d.id).includes(q) || (d.location ?? "").toLowerCase().includes(q))].sort((a, b) => a.name.localeCompare(b.name));
|
|
47057
|
+
}, [devices, search]);
|
|
47058
|
+
const activeTab = tabForSelector(value);
|
|
47059
|
+
const tabs = [
|
|
47060
|
+
{
|
|
47061
|
+
id: "all",
|
|
47062
|
+
label: "All"
|
|
47063
|
+
},
|
|
47064
|
+
{
|
|
47065
|
+
id: "types",
|
|
47066
|
+
label: "By type"
|
|
47067
|
+
},
|
|
47068
|
+
...hasLocations || activeTab === "locations" ? [{
|
|
47069
|
+
id: "locations",
|
|
47070
|
+
label: "By room"
|
|
47071
|
+
}] : [],
|
|
47072
|
+
{
|
|
47073
|
+
id: "ids",
|
|
47074
|
+
label: "Chosen"
|
|
47075
|
+
}
|
|
47076
|
+
];
|
|
47077
|
+
const toggleType = (type) => {
|
|
47078
|
+
const current = value.kind === "types" ? value.types : [];
|
|
47079
|
+
onChange({
|
|
47080
|
+
kind: "types",
|
|
47081
|
+
types: current.some((t) => String(t) === type) ? current.filter((t) => String(t) !== type) : [...current, ...typeFromString(type)]
|
|
47082
|
+
});
|
|
47083
|
+
};
|
|
47084
|
+
const toggleLocation = (location) => {
|
|
47085
|
+
const current = value.kind === "locations" ? value.locations : [];
|
|
47086
|
+
onChange({
|
|
47087
|
+
kind: "locations",
|
|
47088
|
+
locations: current.includes(location) ? current.filter((l) => l !== location) : [...current, location]
|
|
47089
|
+
});
|
|
47090
|
+
};
|
|
47091
|
+
const toggleId = (id) => {
|
|
47092
|
+
const current = value.kind === "ids" ? value.ids : [];
|
|
47093
|
+
onChange({
|
|
47094
|
+
kind: "ids",
|
|
47095
|
+
ids: current.includes(id) ? current.filter((v) => v !== id) : [...current, id]
|
|
47096
|
+
});
|
|
47097
|
+
};
|
|
47098
|
+
const pad = dense ? "p-2" : "p-3";
|
|
47099
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
47100
|
+
className: "space-y-2",
|
|
47101
|
+
children: [
|
|
47102
|
+
/* @__PURE__ */ jsx("div", {
|
|
47103
|
+
className: "flex flex-wrap gap-1 border-b border-border pb-1",
|
|
47104
|
+
children: tabs.map((t) => /* @__PURE__ */ jsx("button", {
|
|
47105
|
+
type: "button",
|
|
47106
|
+
onClick: () => onChange(emptySelectorFor(t.id)),
|
|
47107
|
+
className: `shrink-0 whitespace-nowrap rounded px-2 py-1 text-[11px] transition-colors ${activeTab === t.id ? "bg-primary/15 text-primary font-medium" : "text-foreground-subtle hover:bg-foreground-subtle/10 hover:text-foreground"}`,
|
|
47108
|
+
children: t.label
|
|
47109
|
+
}, t.id))
|
|
47110
|
+
}),
|
|
47111
|
+
activeTab === "all" && /* @__PURE__ */ jsxs("div", {
|
|
47112
|
+
className: `rounded border border-border bg-surface ${pad}`,
|
|
47113
|
+
children: [/* @__PURE__ */ jsxs("p", {
|
|
47114
|
+
className: "text-[11px] text-foreground",
|
|
47115
|
+
children: [
|
|
47116
|
+
"Every device in this deployment — ",
|
|
47117
|
+
devices.length,
|
|
47118
|
+
" right now."
|
|
47119
|
+
]
|
|
47120
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
47121
|
+
className: "mt-1 text-[10px] text-foreground-subtle",
|
|
47122
|
+
children: "Devices added later are covered automatically."
|
|
47123
|
+
})]
|
|
47124
|
+
}),
|
|
47125
|
+
activeTab === "types" && /* @__PURE__ */ jsx(CheckboxGrid, {
|
|
47126
|
+
options: typeOptions,
|
|
47127
|
+
selected: value.kind === "types" ? value.types.map((t) => String(t)) : [],
|
|
47128
|
+
onToggle: toggleType,
|
|
47129
|
+
emptyLabel: "No devices to pick a type from.",
|
|
47130
|
+
footnote: "Devices of a checked type are covered automatically as they are added.",
|
|
47131
|
+
pad
|
|
47132
|
+
}),
|
|
47133
|
+
activeTab === "locations" && /* @__PURE__ */ jsx(CheckboxGrid, {
|
|
47134
|
+
options: locationOptions,
|
|
47135
|
+
selected: value.kind === "locations" ? [...value.locations] : [],
|
|
47136
|
+
onToggle: toggleLocation,
|
|
47137
|
+
emptyLabel: "No device has a room assigned yet.",
|
|
47138
|
+
footnote: "A device with no room set is never covered by a room rule.",
|
|
47139
|
+
pad
|
|
47140
|
+
}),
|
|
47141
|
+
activeTab === "ids" && /* @__PURE__ */ jsxs("div", {
|
|
47142
|
+
className: `rounded border border-border bg-surface ${pad} space-y-2`,
|
|
47143
|
+
children: [
|
|
47144
|
+
/* @__PURE__ */ jsxs("div", {
|
|
47145
|
+
className: "relative",
|
|
47146
|
+
children: [/* @__PURE__ */ jsx(Search, { className: "pointer-events-none absolute left-2 top-1/2 h-3 w-3 -translate-y-1/2 text-foreground-subtle" }), /* @__PURE__ */ jsx("input", {
|
|
47147
|
+
type: "search",
|
|
47148
|
+
value: search,
|
|
47149
|
+
onChange: (e) => setSearch(e.target.value),
|
|
47150
|
+
placeholder: "Search devices…",
|
|
47151
|
+
className: "w-full rounded border border-border bg-background py-1 pl-7 pr-2 text-[11px] text-foreground placeholder:text-foreground-subtle focus:outline-none focus:ring-1 focus:ring-primary"
|
|
47152
|
+
})]
|
|
47153
|
+
}),
|
|
47154
|
+
/* @__PURE__ */ jsxs("div", {
|
|
47155
|
+
className: "max-h-56 overflow-auto rounded border border-border",
|
|
47156
|
+
children: [visibleDevices.length === 0 && /* @__PURE__ */ jsx("p", {
|
|
47157
|
+
className: "px-2 py-3 text-[10px] italic text-foreground-subtle",
|
|
47158
|
+
children: "No device matches."
|
|
47159
|
+
}), visibleDevices.map((d) => {
|
|
47160
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
47161
|
+
className: "flex cursor-pointer items-center gap-2 px-2 py-1.5 text-[11px] hover:bg-foreground-subtle/10",
|
|
47162
|
+
children: [
|
|
47163
|
+
/* @__PURE__ */ jsx("input", {
|
|
47164
|
+
type: "checkbox",
|
|
47165
|
+
checked: value.kind === "ids" && value.ids.includes(d.id),
|
|
47166
|
+
onChange: () => toggleId(d.id),
|
|
47167
|
+
className: "rounded border-border focus:ring-primary"
|
|
47168
|
+
}),
|
|
47169
|
+
/* @__PURE__ */ jsx("span", {
|
|
47170
|
+
className: "min-w-0 flex-1 truncate text-foreground",
|
|
47171
|
+
children: d.name
|
|
47172
|
+
}),
|
|
47173
|
+
/* @__PURE__ */ jsxs("span", {
|
|
47174
|
+
className: "shrink-0 font-mono text-[10px] text-foreground-subtle",
|
|
47175
|
+
children: [
|
|
47176
|
+
"#",
|
|
47177
|
+
d.id,
|
|
47178
|
+
d.location !== null && d.location.length > 0 ? ` · ${d.location}` : ""
|
|
47179
|
+
]
|
|
47180
|
+
})
|
|
47181
|
+
]
|
|
47182
|
+
}, d.id);
|
|
47183
|
+
})]
|
|
47184
|
+
}),
|
|
47185
|
+
/* @__PURE__ */ jsxs("p", {
|
|
47186
|
+
className: "text-[10px] text-foreground-subtle",
|
|
47187
|
+
children: [
|
|
47188
|
+
"A fixed list — a device added later is ",
|
|
47189
|
+
/* @__PURE__ */ jsx("span", {
|
|
47190
|
+
className: "font-medium",
|
|
47191
|
+
children: "not"
|
|
47192
|
+
}),
|
|
47193
|
+
" covered until you edit this."
|
|
47194
|
+
]
|
|
47195
|
+
})
|
|
47196
|
+
]
|
|
47197
|
+
}),
|
|
47198
|
+
includeLinked !== void 0 && onIncludeLinkedChange !== void 0 && /* @__PURE__ */ jsx(IncludeLinkedToggle, {
|
|
47199
|
+
value: includeLinked,
|
|
47200
|
+
onChange: onIncludeLinkedChange,
|
|
47201
|
+
pad
|
|
47202
|
+
})
|
|
47203
|
+
]
|
|
47204
|
+
});
|
|
47205
|
+
}
|
|
47206
|
+
/**
|
|
47207
|
+
* Turn a raw string back into the `DeviceType` union without a cast. The
|
|
47208
|
+
* enum's values ARE the strings, so a lookup over its members is both exact
|
|
47209
|
+
* and total — an unknown string yields no entry and selects nothing.
|
|
47210
|
+
*/
|
|
47211
|
+
function typeFromString(raw) {
|
|
47212
|
+
return Object.values(DeviceType).filter((t) => String(t) === raw);
|
|
47213
|
+
}
|
|
47214
|
+
function CheckboxGrid({ options, selected, onToggle, emptyLabel, footnote, pad }) {
|
|
47215
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
47216
|
+
className: `rounded border border-border bg-surface ${pad} space-y-2`,
|
|
47217
|
+
children: [options.length === 0 ? /* @__PURE__ */ jsx("p", {
|
|
47218
|
+
className: "text-[10px] italic text-foreground-subtle",
|
|
47219
|
+
children: emptyLabel
|
|
47220
|
+
}) : /* @__PURE__ */ jsx("div", {
|
|
47221
|
+
className: "grid max-h-56 grid-cols-[repeat(auto-fill,minmax(11rem,1fr))] gap-1 overflow-auto",
|
|
47222
|
+
children: options.map((o) => /* @__PURE__ */ jsxs("label", {
|
|
47223
|
+
className: "flex cursor-pointer items-center gap-2 rounded px-1.5 py-1 text-[11px] hover:bg-foreground-subtle/10",
|
|
47224
|
+
children: [
|
|
47225
|
+
/* @__PURE__ */ jsx("input", {
|
|
47226
|
+
type: "checkbox",
|
|
47227
|
+
checked: selected.includes(o.value),
|
|
47228
|
+
onChange: () => onToggle(o.value),
|
|
47229
|
+
className: "rounded border-border focus:ring-primary"
|
|
47230
|
+
}),
|
|
47231
|
+
/* @__PURE__ */ jsx("span", {
|
|
47232
|
+
className: "min-w-0 flex-1 truncate text-foreground",
|
|
47233
|
+
children: o.label
|
|
47234
|
+
}),
|
|
47235
|
+
/* @__PURE__ */ jsx("span", {
|
|
47236
|
+
className: "shrink-0 font-mono text-[10px] text-foreground-subtle",
|
|
47237
|
+
children: o.count
|
|
47238
|
+
})
|
|
47239
|
+
]
|
|
47240
|
+
}, o.value))
|
|
47241
|
+
}), /* @__PURE__ */ jsx("p", {
|
|
47242
|
+
className: "text-[10px] text-foreground-subtle",
|
|
47243
|
+
children: footnote
|
|
47244
|
+
})]
|
|
47245
|
+
});
|
|
47246
|
+
}
|
|
47247
|
+
/**
|
|
47248
|
+
* The toggle whose OFF state is a real semantic restriction, so the hint says
|
|
47249
|
+
* what it costs rather than describing the mechanism: without it, an operator
|
|
47250
|
+
* granted a camera cannot fire the siren or floodlight attached to it,
|
|
47251
|
+
* because `create` does not inherit parent → child by default.
|
|
47252
|
+
*/
|
|
47253
|
+
function IncludeLinkedToggle({ value, onChange, pad }) {
|
|
47254
|
+
return /* @__PURE__ */ jsx("div", {
|
|
47255
|
+
className: `rounded border border-border bg-surface ${pad}`,
|
|
47256
|
+
children: /* @__PURE__ */ jsxs("label", {
|
|
47257
|
+
className: "flex cursor-pointer items-start gap-2",
|
|
47258
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
47259
|
+
type: "checkbox",
|
|
47260
|
+
checked: value,
|
|
47261
|
+
onChange: (e) => onChange(e.target.checked),
|
|
47262
|
+
className: "mt-0.5 rounded border-border focus:ring-primary"
|
|
47263
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
47264
|
+
className: "min-w-0",
|
|
47265
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
47266
|
+
className: "flex items-center gap-1.5 text-[11px] font-medium text-foreground",
|
|
47267
|
+
children: [/* @__PURE__ */ jsx(Link2, { className: "h-3 w-3" }), "Include linked devices"]
|
|
47268
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
47269
|
+
className: "mt-0.5 block text-[10px] text-foreground-subtle",
|
|
47270
|
+
children: value ? /* @__PURE__ */ jsx(Fragment$1, { children: "Accessories attached to a granted camera — siren, floodlight, PIR — are covered too." }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
47271
|
+
"Only the devices selected above. An operator granted a camera will",
|
|
47272
|
+
" ",
|
|
47273
|
+
/* @__PURE__ */ jsx("span", {
|
|
47274
|
+
className: "font-medium text-foreground",
|
|
47275
|
+
children: "not"
|
|
47276
|
+
}),
|
|
47277
|
+
" be able to trigger the siren or light attached to it."
|
|
47278
|
+
] })
|
|
47279
|
+
})]
|
|
47280
|
+
})]
|
|
47281
|
+
})
|
|
47282
|
+
});
|
|
47283
|
+
}
|
|
47284
|
+
/** Summary line for a selector — used by the raw picker's collapsed row. */
|
|
47285
|
+
function describeDeviceSelector(selector) {
|
|
47286
|
+
switch (selector.kind) {
|
|
47287
|
+
case "all": return "All devices";
|
|
47288
|
+
case "ids": return selector.ids.length === 0 ? "No device chosen" : `${selector.ids.length} device${selector.ids.length === 1 ? "" : "s"}`;
|
|
47289
|
+
case "types": return selector.types.length === 0 ? "No type chosen" : selector.types.map((t) => deviceTypeLabel(String(t))).join(", ");
|
|
47290
|
+
case "locations": return selector.locations.length === 0 ? "No room chosen" : selector.locations.join(", ");
|
|
47291
|
+
}
|
|
47292
|
+
}
|
|
47293
|
+
//#endregion
|
|
46859
47294
|
//#region src/composites/scope-picker.tsx
|
|
46860
47295
|
/**
|
|
46861
47296
|
* <ScopePicker> — operator-facing editor for a `TokenScope[]` value.
|
|
@@ -46869,13 +47304,24 @@ function KebabMenu({ items, header, triggerClassName, title = "More actions" })
|
|
|
46869
47304
|
* - category → target: 'device' | 'system'
|
|
46870
47305
|
* - capability → target: cap name from `KNOWN_CAP_NAMES`
|
|
46871
47306
|
* - addon → target: addon id from `useAddonsList`
|
|
46872
|
-
* - device →
|
|
47307
|
+
* - device → a v3 `DeviceSelector` (all / ids / types / locations)
|
|
47308
|
+
* plus `includeLinked`, edited by `<DeviceSelectorPicker>`
|
|
46873
47309
|
*
|
|
46874
47310
|
* `access` is always 3 independent checkboxes (view / create / delete).
|
|
46875
47311
|
*
|
|
46876
47312
|
* `clampToParent` narrows the target dropdown + access checkboxes to
|
|
46877
47313
|
* what the CALLER possesses. Admins pass `null` to allow everything.
|
|
47314
|
+
*
|
|
47315
|
+
* This is the RAW editor. The simple, two-question Access panel on
|
|
47316
|
+
* `/system/users` composes the same wire shape through `ACCESS_ROLES`; this
|
|
47317
|
+
* one is what an operator drops into when a grant set is not a plain role.
|
|
46878
47318
|
*/
|
|
47319
|
+
/** `<select>` value → the tri-state `includeLinked` it means. */
|
|
47320
|
+
var INCLUDE_LINKED_VALUES = {
|
|
47321
|
+
"": void 0,
|
|
47322
|
+
yes: true,
|
|
47323
|
+
no: false
|
|
47324
|
+
};
|
|
46879
47325
|
var ACCESS_OPTIONS = [
|
|
46880
47326
|
{
|
|
46881
47327
|
value: "view",
|
|
@@ -46906,14 +47352,24 @@ function defaultRow() {
|
|
|
46906
47352
|
};
|
|
46907
47353
|
}
|
|
46908
47354
|
/**
|
|
46909
|
-
*
|
|
46910
|
-
* the device picker so a child grant can't refer to a
|
|
46911
|
-
* caller themselves doesn't have.
|
|
47355
|
+
* The deviceIds a parent's grants actually resolve to, against the live
|
|
47356
|
+
* fleet. Used to clamp the device picker so a child grant can't refer to a
|
|
47357
|
+
* device the caller themselves doesn't have.
|
|
47358
|
+
*
|
|
47359
|
+
* v3 selectors are not a literal id list, so this RESOLVES them through the
|
|
47360
|
+
* shared resolver rather than reading ids off the grant — a `types:['camera']`
|
|
47361
|
+
* parent must clamp to its cameras, and re-deriving that here is exactly the
|
|
47362
|
+
* drift D103 warns about. A parent holding `category:device` (unrestricted)
|
|
47363
|
+
* yields the whole fleet.
|
|
46912
47364
|
*/
|
|
46913
|
-
function
|
|
47365
|
+
function parentDeviceIds(parent, fleet) {
|
|
46914
47366
|
if (parent == null) return [];
|
|
46915
47367
|
const out = /* @__PURE__ */ new Set();
|
|
46916
|
-
for (const
|
|
47368
|
+
for (const access of [
|
|
47369
|
+
"view",
|
|
47370
|
+
"create",
|
|
47371
|
+
"delete"
|
|
47372
|
+
]) for (const id of resolveViewableDeviceIds(parent, fleet, access)) out.add(id);
|
|
46917
47373
|
return [...out];
|
|
46918
47374
|
}
|
|
46919
47375
|
function clampedSingleTargets(type, parent, addonChoices, capChoices) {
|
|
@@ -46944,7 +47400,7 @@ function clampedAccessForRow(row, parent) {
|
|
|
46944
47400
|
];
|
|
46945
47401
|
const matches = parent.filter((s) => {
|
|
46946
47402
|
if (s.type !== row.type) return false;
|
|
46947
|
-
if (s.type === "device" && row.type === "device") return
|
|
47403
|
+
if (s.type === "device" && row.type === "device") return true;
|
|
46948
47404
|
if (s.type !== "device" && row.type !== "device") return s.target === row.target;
|
|
46949
47405
|
return false;
|
|
46950
47406
|
});
|
|
@@ -46964,11 +47420,13 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
|
|
|
46964
47420
|
value: c,
|
|
46965
47421
|
label: c
|
|
46966
47422
|
})), []);
|
|
46967
|
-
const
|
|
46968
|
-
|
|
46969
|
-
|
|
46970
|
-
|
|
46971
|
-
|
|
47423
|
+
const fleet = useMemo(() => (devices ?? []).map((d) => ({
|
|
47424
|
+
id: d.id,
|
|
47425
|
+
type: d.type,
|
|
47426
|
+
location: d.location,
|
|
47427
|
+
parentDeviceId: d.parentDeviceId
|
|
47428
|
+
})), [devices]);
|
|
47429
|
+
const parentDeviceClamp = useMemo(() => clampToParent == null ? null : parentDeviceIds(clampToParent, fleet), [clampToParent, fleet]);
|
|
46972
47430
|
/**
|
|
46973
47431
|
* Build a fresh scope row when `type` changes. The discriminated union
|
|
46974
47432
|
* forces us to re-construct the object per variant so the resulting
|
|
@@ -46994,7 +47452,10 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
|
|
|
46994
47452
|
};
|
|
46995
47453
|
case "device": return {
|
|
46996
47454
|
type: "device",
|
|
46997
|
-
|
|
47455
|
+
selector: {
|
|
47456
|
+
kind: "ids",
|
|
47457
|
+
ids: []
|
|
47458
|
+
},
|
|
46998
47459
|
access: accessArr
|
|
46999
47460
|
};
|
|
47000
47461
|
}
|
|
@@ -47004,11 +47465,18 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
|
|
|
47004
47465
|
if (i !== idx) return s;
|
|
47005
47466
|
if (patch.type !== void 0 && patch.type !== s.type) return rebuildForType(patch.type, patch.access ?? s.access);
|
|
47006
47467
|
const access = [...patch.access ?? s.access];
|
|
47007
|
-
if (s.type === "device")
|
|
47008
|
-
|
|
47009
|
-
|
|
47010
|
-
|
|
47011
|
-
|
|
47468
|
+
if (s.type === "device") {
|
|
47469
|
+
const base = {
|
|
47470
|
+
type: "device",
|
|
47471
|
+
selector: patch.selector ?? s.selector,
|
|
47472
|
+
access
|
|
47473
|
+
};
|
|
47474
|
+
const linked = "includeLinked" in patch ? patch.includeLinked : s.includeLinked;
|
|
47475
|
+
return linked === void 0 ? base : {
|
|
47476
|
+
...base,
|
|
47477
|
+
includeLinked: linked
|
|
47478
|
+
};
|
|
47479
|
+
}
|
|
47012
47480
|
if (s.type === "category") return {
|
|
47013
47481
|
type: "category",
|
|
47014
47482
|
target: patch.target ?? s.target,
|
|
@@ -47067,11 +47535,35 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
|
|
|
47067
47535
|
})
|
|
47068
47536
|
]
|
|
47069
47537
|
}),
|
|
47070
|
-
row.type === "device" ? /* @__PURE__ */
|
|
47071
|
-
|
|
47072
|
-
|
|
47073
|
-
|
|
47074
|
-
|
|
47538
|
+
row.type === "device" ? /* @__PURE__ */ jsxs("div", {
|
|
47539
|
+
className: "min-w-[200px] flex-1 space-y-1.5",
|
|
47540
|
+
children: [/* @__PURE__ */ jsx(DeviceSelectorPicker, {
|
|
47541
|
+
dense: true,
|
|
47542
|
+
value: row.selector,
|
|
47543
|
+
onChange: (selector) => update(idx, { selector }),
|
|
47544
|
+
clampToDeviceIds: parentDeviceClamp
|
|
47545
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
47546
|
+
className: "flex flex-wrap items-center gap-1.5 text-[10px] text-foreground-subtle",
|
|
47547
|
+
children: ["Linked devices", /* @__PURE__ */ jsxs("select", {
|
|
47548
|
+
value: row.includeLinked === void 0 ? "" : row.includeLinked ? "yes" : "no",
|
|
47549
|
+
onChange: (e) => update(idx, { includeLinked: INCLUDE_LINKED_VALUES[e.target.value] }),
|
|
47550
|
+
className: "rounded border border-border bg-background px-1.5 py-0.5 text-[10px] focus:outline-none focus:ring-1 focus:ring-primary",
|
|
47551
|
+
children: [
|
|
47552
|
+
/* @__PURE__ */ jsx("option", {
|
|
47553
|
+
value: "",
|
|
47554
|
+
children: "Automatic (view inherits)"
|
|
47555
|
+
}),
|
|
47556
|
+
/* @__PURE__ */ jsx("option", {
|
|
47557
|
+
value: "yes",
|
|
47558
|
+
children: "Always included"
|
|
47559
|
+
}),
|
|
47560
|
+
/* @__PURE__ */ jsx("option", {
|
|
47561
|
+
value: "no",
|
|
47562
|
+
children: "Never included"
|
|
47563
|
+
})
|
|
47564
|
+
]
|
|
47565
|
+
})]
|
|
47566
|
+
})]
|
|
47075
47567
|
}) : /* @__PURE__ */ jsxs("select", {
|
|
47076
47568
|
value: row.target,
|
|
47077
47569
|
onChange: (e) => update(idx, { target: e.target.value }),
|
|
@@ -47134,76 +47626,40 @@ function ScopePicker({ value, onChange, clampToParent, emptyHint }) {
|
|
|
47134
47626
|
]
|
|
47135
47627
|
});
|
|
47136
47628
|
}
|
|
47137
|
-
function DeviceTargetPicker({ value, choices, clampToParent, onChange }) {
|
|
47138
|
-
const [pendingAdd, setPendingAdd] = useState("");
|
|
47139
|
-
const visibleChoices = useMemo(() => {
|
|
47140
|
-
const filtered = clampToParent == null ? choices : choices.filter((c) => clampToParent.includes(c.value));
|
|
47141
|
-
const taken = new Set(value);
|
|
47142
|
-
return filtered.filter((c) => !taken.has(c.value));
|
|
47143
|
-
}, [
|
|
47144
|
-
choices,
|
|
47145
|
-
clampToParent,
|
|
47146
|
-
value
|
|
47147
|
-
]);
|
|
47148
|
-
const labelFor = (id) => choices.find((c) => c.value === id)?.label ?? `#${id}`;
|
|
47149
|
-
const handleAdd = (id) => {
|
|
47150
|
-
if (!id) return;
|
|
47151
|
-
onChange([...value, id]);
|
|
47152
|
-
setPendingAdd("");
|
|
47153
|
-
};
|
|
47154
|
-
const handleRemove = (id) => {
|
|
47155
|
-
onChange(value.filter((v) => v !== id));
|
|
47156
|
-
};
|
|
47157
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
47158
|
-
className: "flex-1 min-w-[160px] flex flex-wrap items-center gap-1",
|
|
47159
|
-
children: [
|
|
47160
|
-
value.length === 0 && /* @__PURE__ */ jsx("span", {
|
|
47161
|
-
className: "text-[10px] text-foreground-subtle italic px-1",
|
|
47162
|
-
children: "no devices selected"
|
|
47163
|
-
}),
|
|
47164
|
-
value.map((id) => /* @__PURE__ */ jsxs("span", {
|
|
47165
|
-
className: "inline-flex items-center gap-1 rounded bg-primary/10 px-1.5 py-0.5 text-[10px] font-mono text-primary",
|
|
47166
|
-
children: [labelFor(id), /* @__PURE__ */ jsx("button", {
|
|
47167
|
-
type: "button",
|
|
47168
|
-
onClick: () => handleRemove(id),
|
|
47169
|
-
className: "hover:text-danger transition-colors",
|
|
47170
|
-
title: "Remove device",
|
|
47171
|
-
children: /* @__PURE__ */ jsx(X, { className: "h-2.5 w-2.5" })
|
|
47172
|
-
})]
|
|
47173
|
-
}, id)),
|
|
47174
|
-
visibleChoices.length > 0 && /* @__PURE__ */ jsxs("select", {
|
|
47175
|
-
value: pendingAdd,
|
|
47176
|
-
onChange: (e) => handleAdd(e.target.value),
|
|
47177
|
-
className: "rounded border border-border bg-background px-1.5 py-0.5 text-[10px] focus:outline-none focus:ring-1 focus:ring-primary",
|
|
47178
|
-
children: [/* @__PURE__ */ jsx("option", {
|
|
47179
|
-
value: "",
|
|
47180
|
-
children: "+ add device…"
|
|
47181
|
-
}), visibleChoices.map((c) => /* @__PURE__ */ jsx("option", {
|
|
47182
|
-
value: c.value,
|
|
47183
|
-
children: c.label
|
|
47184
|
-
}, c.value))]
|
|
47185
|
-
})
|
|
47186
|
-
]
|
|
47187
|
-
});
|
|
47188
|
-
}
|
|
47189
47629
|
/**
|
|
47190
47630
|
* Validation helper. The wire schema (`TokenScopeSchema`) requires every
|
|
47191
|
-
* scope to carry a
|
|
47192
|
-
*
|
|
47631
|
+
* scope to carry a usable target and `access.length >= 1`; a v3 device
|
|
47632
|
+
* selector additionally requires a non-empty list for every kind except
|
|
47633
|
+
* `all`. Use this before passing the picker output to a mutate call so the
|
|
47193
47634
|
* user sees a clean inline error instead of a tRPC ZodError.
|
|
47635
|
+
*
|
|
47636
|
+
* An EMPTY selector list is rejected rather than silently treated as "all":
|
|
47637
|
+
* the schema's `.min(1)` would reject it server-side anyway, and the failure
|
|
47638
|
+
* mode of guessing wrong here is granting the whole fleet.
|
|
47194
47639
|
*/
|
|
47195
47640
|
function validateScopes(scopes) {
|
|
47196
47641
|
for (const s of scopes) {
|
|
47197
47642
|
if (s.type === "device") {
|
|
47198
|
-
|
|
47643
|
+
const problem = validateSelector(s.selector);
|
|
47644
|
+
if (problem !== null) return problem;
|
|
47199
47645
|
} else if (s.target.trim().length === 0) return `Scope ${s.type}: pick a target`;
|
|
47200
47646
|
if (s.access.length === 0) {
|
|
47201
|
-
const targetDesc = s.type === "device" ?
|
|
47647
|
+
const targetDesc = s.type === "device" ? describeDeviceSelector(s.selector) : s.target;
|
|
47202
47648
|
return `Scope ${s.type}:${targetDesc}: pick at least one access`;
|
|
47203
47649
|
}
|
|
47204
47650
|
}
|
|
47205
47651
|
return null;
|
|
47206
47652
|
}
|
|
47653
|
+
/** Non-empty check per selector kind. `all` selects the fleet and is always
|
|
47654
|
+
* complete. */
|
|
47655
|
+
function validateSelector(selector) {
|
|
47656
|
+
switch (selector.kind) {
|
|
47657
|
+
case "all": return null;
|
|
47658
|
+
case "ids": return selector.ids.length === 0 ? "Scope device: pick at least one device" : null;
|
|
47659
|
+
case "types": return selector.types.length === 0 ? "Scope device: pick at least one device type" : null;
|
|
47660
|
+
case "locations": return selector.locations.length === 0 ? "Scope device: pick at least one room" : null;
|
|
47661
|
+
}
|
|
47662
|
+
}
|
|
47207
47663
|
//#endregion
|
|
47208
47664
|
//#region src/contexts/zone-editing.tsx
|
|
47209
47665
|
/**
|
|
@@ -48046,4 +48502,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-Bvavn6s9.js")
|
|
|
48046
48502
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
48047
48503
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-CSxDpLOw.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
48048
48504
|
//#endregion
|
|
48049
|
-
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, 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, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, 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, createLucideIcon as a, 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, EyeOff as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, Mic as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stepHasModelForFormat, stepModelOptions, 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, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, 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, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationPlan, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
48505
|
+
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CARD_MODE_MIN_COLUMNS, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RIGHT, 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, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TABLE_SCROLL_MAX_H, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, createLucideIcon as a, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, describeDeviceSelector, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, EyeOff as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextReconnectAction, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, Mic as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, 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, useNotificationRulesCancelSnooze, useNotificationRulesCreateRule, useNotificationRulesCreateSnooze, useNotificationRulesDeleteRule, useNotificationRulesGetAlarmConfig, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationPlan, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|