@camstack/ui-library 1.2.173 → 1.2.175
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/{MotionZonesSettings-DNdnFHso.js → MotionZonesSettings-7c3yiT5E.js} +1 -26
- package/dist/{MotionZonesSettings-BP9p0pFB.cjs → MotionZonesSettings-BK9R9NIr.cjs} +1 -26
- package/dist/{PrivacyMaskSettings-CooCVUmA.js → PrivacyMaskSettings-PkYs077O.js} +1 -1
- package/dist/{SceneMonitorEditor-Bfo4BNqA.js → SceneMonitorEditor-BvDy3x3k.js} +1 -1
- package/dist/composites/cap-settings/CameraGridLayoutEditor.d.ts +4 -0
- package/dist/composites/cap-settings/camera-grid-layout.d.ts +54 -0
- package/dist/generated/system-hooks.d.ts +6 -0
- package/dist/hooks/use-ptz.d.ts +18 -0
- package/dist/index.cjs +775 -196
- package/dist/index.js +775 -200
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -2021,6 +2021,30 @@ var Gauge = createLucideIcon("gauge", [["path", {
|
|
|
2021
2021
|
* This source code is licensed under the ISC license.
|
|
2022
2022
|
* See the LICENSE file in the root directory of this source tree.
|
|
2023
2023
|
*/
|
|
2024
|
+
var Grid2x2 = createLucideIcon("grid-2x2", [
|
|
2025
|
+
["path", {
|
|
2026
|
+
d: "M12 3v18",
|
|
2027
|
+
key: "108xh3"
|
|
2028
|
+
}],
|
|
2029
|
+
["path", {
|
|
2030
|
+
d: "M3 12h18",
|
|
2031
|
+
key: "1i2n21"
|
|
2032
|
+
}],
|
|
2033
|
+
["rect", {
|
|
2034
|
+
x: "3",
|
|
2035
|
+
y: "3",
|
|
2036
|
+
width: "18",
|
|
2037
|
+
height: "18",
|
|
2038
|
+
rx: "2",
|
|
2039
|
+
key: "h1oib"
|
|
2040
|
+
}]
|
|
2041
|
+
]);
|
|
2042
|
+
/**
|
|
2043
|
+
* @license lucide-react v0.576.0 - ISC
|
|
2044
|
+
*
|
|
2045
|
+
* This source code is licensed under the ISC license.
|
|
2046
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
2047
|
+
*/
|
|
2024
2048
|
var GripHorizontal = createLucideIcon("grip-horizontal", [
|
|
2025
2049
|
["circle", {
|
|
2026
2050
|
cx: "12",
|
|
@@ -6575,6 +6599,12 @@ var usePtzGoHome = trpc.ptz.goHome.useMutation;
|
|
|
6575
6599
|
var usePtzGetHomePreset = trpc.ptz.getHomePreset.useQuery;
|
|
6576
6600
|
/** Generated alias around `trpc.ptz.setHomePreset.useMutation`. */
|
|
6577
6601
|
var usePtzSetHomePreset = trpc.ptz.setHomePreset.useMutation;
|
|
6602
|
+
/** Generated alias around `trpc.ptz.captureHomeHere.useMutation`. */
|
|
6603
|
+
var usePtzCaptureHomeHere = trpc.ptz.captureHomeHere.useMutation;
|
|
6604
|
+
/** Generated alias around `trpc.ptz.getHomeReturn.useQuery`. */
|
|
6605
|
+
var usePtzGetHomeReturn = trpc.ptz.getHomeReturn.useQuery;
|
|
6606
|
+
/** Generated alias around `trpc.ptz.setHomeReturn.useMutation`. */
|
|
6607
|
+
var usePtzSetHomeReturn = trpc.ptz.setHomeReturn.useMutation;
|
|
6578
6608
|
/** Generated alias around `trpc.ptz.getPosition.useQuery`. */
|
|
6579
6609
|
var usePtzGetPosition = trpc.ptz.getPosition.useQuery;
|
|
6580
6610
|
/** Generated alias around `trpc.ptz.setAutofocus.useMutation`. */
|
|
@@ -16207,6 +16237,611 @@ function AutotrackSection({ deviceId }) {
|
|
|
16207
16237
|
});
|
|
16208
16238
|
}
|
|
16209
16239
|
//#endregion
|
|
16240
|
+
//#region src/hooks/use-devices.ts
|
|
16241
|
+
/**
|
|
16242
|
+
* useDevices / useDevice — reactive sync-mirror reads.
|
|
16243
|
+
*
|
|
16244
|
+
* Both hooks hand out `DeviceProxy` references straight out of the
|
|
16245
|
+
* `System` mirror. The mirror keeps device + binding caches warm via
|
|
16246
|
+
* the `device.registered/unregistered/bindings-changed` event stream,
|
|
16247
|
+
* so re-renders are driven by lifecycle pushes — no React Query
|
|
16248
|
+
* round-trip and no `refetch` plumbing needed at the caller side.
|
|
16249
|
+
*
|
|
16250
|
+
* The hooks defensively read once on mount and assume the System has
|
|
16251
|
+
* been `init()`ed by the host app — calls before the warm-boot
|
|
16252
|
+
* completes simply return an empty array / null and re-render once
|
|
16253
|
+
* the registered listeners fire.
|
|
16254
|
+
*/
|
|
16255
|
+
/**
|
|
16256
|
+
* Reactive list of devices matching the optional filter set. Returns a
|
|
16257
|
+
* stable array reference between updates so consumers passing it as a
|
|
16258
|
+
* prop don't tear down memoized children.
|
|
16259
|
+
*/
|
|
16260
|
+
function useDevices(filters) {
|
|
16261
|
+
const system = useSystem();
|
|
16262
|
+
const filtersKey = useMemo(() => filters ? JSON.stringify(filters) : "", [filters]);
|
|
16263
|
+
const [devices, setDevices] = useState(() => system.listDevices(filters));
|
|
16264
|
+
useEffect(() => {
|
|
16265
|
+
const refresh = () => {
|
|
16266
|
+
setDevices(system.listDevices(filters));
|
|
16267
|
+
};
|
|
16268
|
+
refresh();
|
|
16269
|
+
let unsubAdded = null;
|
|
16270
|
+
let unsubRemoved = null;
|
|
16271
|
+
try {
|
|
16272
|
+
unsubAdded = system.onDeviceAdded(refresh);
|
|
16273
|
+
unsubRemoved = system.onDeviceRemoved(refresh);
|
|
16274
|
+
} catch {}
|
|
16275
|
+
const unsubConn = system.subscribeConnectionEvents((state) => {
|
|
16276
|
+
if (state === "connected") refresh();
|
|
16277
|
+
});
|
|
16278
|
+
return () => {
|
|
16279
|
+
unsubAdded?.();
|
|
16280
|
+
unsubRemoved?.();
|
|
16281
|
+
unsubConn();
|
|
16282
|
+
};
|
|
16283
|
+
}, [
|
|
16284
|
+
system,
|
|
16285
|
+
filters,
|
|
16286
|
+
filtersKey
|
|
16287
|
+
]);
|
|
16288
|
+
return devices;
|
|
16289
|
+
}
|
|
16290
|
+
/**
|
|
16291
|
+
* Single-device variant. Returns `null` until the device is in the
|
|
16292
|
+
* mirror; re-renders when the device is removed (back to `null`) or
|
|
16293
|
+
* added.
|
|
16294
|
+
*/
|
|
16295
|
+
function useDevice(deviceId) {
|
|
16296
|
+
const system = useSystem();
|
|
16297
|
+
const [device, setDevice] = useState(() => deviceId === null ? null : system.getDevice(deviceId));
|
|
16298
|
+
useEffect(() => {
|
|
16299
|
+
if (deviceId === null) {
|
|
16300
|
+
setDevice(null);
|
|
16301
|
+
return;
|
|
16302
|
+
}
|
|
16303
|
+
const refresh = () => {
|
|
16304
|
+
setDevice(system.getDevice(deviceId));
|
|
16305
|
+
};
|
|
16306
|
+
refresh();
|
|
16307
|
+
let unsubAdded = null;
|
|
16308
|
+
let unsubRemoved = null;
|
|
16309
|
+
try {
|
|
16310
|
+
unsubAdded = system.onDeviceAdded(refresh);
|
|
16311
|
+
unsubRemoved = system.onDeviceRemoved(refresh);
|
|
16312
|
+
} catch {}
|
|
16313
|
+
const unsubConn = system.subscribeConnectionEvents((state) => {
|
|
16314
|
+
if (state === "connected") refresh();
|
|
16315
|
+
});
|
|
16316
|
+
return () => {
|
|
16317
|
+
unsubAdded?.();
|
|
16318
|
+
unsubRemoved?.();
|
|
16319
|
+
unsubConn();
|
|
16320
|
+
};
|
|
16321
|
+
}, [system, deviceId]);
|
|
16322
|
+
return device;
|
|
16323
|
+
}
|
|
16324
|
+
//#endregion
|
|
16325
|
+
//#region src/hooks/use-device-snapshot.ts
|
|
16326
|
+
/**
|
|
16327
|
+
* useDeviceSnapshotImage — a device's snapshot as a plain image URL.
|
|
16328
|
+
*
|
|
16329
|
+
* ## What this used to do, and why it stopped
|
|
16330
|
+
*
|
|
16331
|
+
* It fetched `dev.snapshot.getSnapshot()` over tRPC and returned
|
|
16332
|
+
* `data:image/jpeg;base64,…`. That put a full camera capture — up to 4 K,
|
|
16333
|
+
* measured at 758 KB average per camera on the live hub — through the msgpack
|
|
16334
|
+
* WebSocket plane, base64-inflated by a third, and then held it in the
|
|
16335
|
+
* react-query heap for 24 h per device. The device list rendered it into a
|
|
16336
|
+
* **28 × 28 px `<img>`**.
|
|
16337
|
+
*
|
|
16338
|
+
* It also did not do what it appeared to do. `snapshot.getSnapshot` scoped to a
|
|
16339
|
+
* device routes to the NATIVE provider, not the snapshot wrapper, so it bypassed
|
|
16340
|
+
* the wrapper's cache, coalescing and stale-while-revalidate entirely: probed
|
|
16341
|
+
* live, a `force:true` call returned a fresh 1.05 MB JPEG in 0.55 s while the
|
|
16342
|
+
* wrapper's `lastCapturedAt` for that camera did not move. Two snapshot paths,
|
|
16343
|
+
* different behaviour, and only one of them maintained the cache the other one
|
|
16344
|
+
* reported on.
|
|
16345
|
+
*
|
|
16346
|
+
* ## What it does now
|
|
16347
|
+
*
|
|
16348
|
+
* Returns the same URL the viewer uses: `/addon/snapshot/media/<id>.jpg?w=<n>`,
|
|
16349
|
+
* served by the wrapper over the HTTP data plane. Relative and same-origin, so
|
|
16350
|
+
* the admin UI's `camstack_session` cookie authenticates it — the endpoint is
|
|
16351
|
+
* `access: 'authenticated'`, which accepts either a Bearer header or that
|
|
16352
|
+
* cookie, and a bare `<img>` can only send the cookie. This is the same
|
|
16353
|
+
* mechanism the native `<video>` fallback in `hls-video.tsx` already relies on.
|
|
16354
|
+
*
|
|
16355
|
+
* Caching is now the browser's, which is the point: `ETag` +
|
|
16356
|
+
* `Cache-Control: private, max-age=<device maxAgeS>` means a repeat render is a
|
|
16357
|
+
* cache hit and a revalidation is a 0-byte 304. No JS heap, no msgpack, no
|
|
16358
|
+
* base64. Nothing to configure — unlike `expo-image` on native, browsers
|
|
16359
|
+
* revalidate a stale URL rather than treating it as immutable, so the URL stays
|
|
16360
|
+
* stable and does NOT need a version parameter.
|
|
16361
|
+
*/
|
|
16362
|
+
/** The hub-proxied path prefix for the snapshot image data plane, composed
|
|
16363
|
+
* below on `baseUrl` or, for the same-origin case, on the page's mount. */
|
|
16364
|
+
var SNAPSHOT_MEDIA_PATH = "/addon/snapshot/media";
|
|
16365
|
+
function useDeviceSnapshotImage(deviceId, options = {}) {
|
|
16366
|
+
const { width, baseUrl } = options;
|
|
16367
|
+
const [refreshNonce, setRefreshNonce] = useState(0);
|
|
16368
|
+
return {
|
|
16369
|
+
src: useMemo(() => {
|
|
16370
|
+
if (deviceId === null || deviceId <= 0) return null;
|
|
16371
|
+
const base = baseUrl !== void 0 ? baseUrl.replace(/\/+$/, "") : routerBasename();
|
|
16372
|
+
const params = new URLSearchParams();
|
|
16373
|
+
if (width !== void 0 && Number.isInteger(width) && width > 0) params.set("w", String(width));
|
|
16374
|
+
if (refreshNonce > 0) {
|
|
16375
|
+
params.set("force", "1");
|
|
16376
|
+
params.set("r", String(refreshNonce));
|
|
16377
|
+
}
|
|
16378
|
+
const query = params.toString();
|
|
16379
|
+
return `${base}${SNAPSHOT_MEDIA_PATH}/${String(deviceId)}.jpg${query.length > 0 ? `?${query}` : ""}`;
|
|
16380
|
+
}, [
|
|
16381
|
+
deviceId,
|
|
16382
|
+
width,
|
|
16383
|
+
baseUrl,
|
|
16384
|
+
refreshNonce
|
|
16385
|
+
]),
|
|
16386
|
+
loading: false,
|
|
16387
|
+
refresh: useCallback(() => {
|
|
16388
|
+
setRefreshNonce((n) => n + 1);
|
|
16389
|
+
}, [])
|
|
16390
|
+
};
|
|
16391
|
+
}
|
|
16392
|
+
//#endregion
|
|
16393
|
+
//#region src/composites/cap-settings/camera-grid-layout.ts
|
|
16394
|
+
/** Smallest rectangle the editor will produce — ffmpeg refuses a zero-area crop. */
|
|
16395
|
+
var MIN_EXTENT = .02;
|
|
16396
|
+
function isRecord(value) {
|
|
16397
|
+
return value !== null && typeof value === "object" && !Array.isArray(value);
|
|
16398
|
+
}
|
|
16399
|
+
function readRect(value) {
|
|
16400
|
+
if (!isRecord(value)) return null;
|
|
16401
|
+
const { x, y, width, height } = value;
|
|
16402
|
+
if (typeof x !== "number" || typeof y !== "number" || typeof width !== "number" || typeof height !== "number") return null;
|
|
16403
|
+
if (x < 0 || y < 0 || width <= 0 || height <= 0) return null;
|
|
16404
|
+
if (x + width > 1 || y + height > 1) return null;
|
|
16405
|
+
return {
|
|
16406
|
+
x,
|
|
16407
|
+
y,
|
|
16408
|
+
width,
|
|
16409
|
+
height
|
|
16410
|
+
};
|
|
16411
|
+
}
|
|
16412
|
+
function readCell(value) {
|
|
16413
|
+
if (!isRecord(value)) return null;
|
|
16414
|
+
const deviceId = value["deviceId"];
|
|
16415
|
+
if (typeof deviceId !== "number" || !Number.isInteger(deviceId)) return null;
|
|
16416
|
+
const source = readRect(value["source"]);
|
|
16417
|
+
const cell = readRect(value["cell"]);
|
|
16418
|
+
if (source === null || cell === null) return null;
|
|
16419
|
+
return {
|
|
16420
|
+
deviceId,
|
|
16421
|
+
source,
|
|
16422
|
+
cell
|
|
16423
|
+
};
|
|
16424
|
+
}
|
|
16425
|
+
/** Parse the `getGridForDevice` reply. See {@link GridLayoutReadOutcome}. */
|
|
16426
|
+
function parseGridView(raw) {
|
|
16427
|
+
if (!isRecord(raw) || !("grid" in raw)) return "unreadable";
|
|
16428
|
+
const grid = raw["grid"];
|
|
16429
|
+
if (grid === null) return null;
|
|
16430
|
+
if (!isRecord(grid)) return "unreadable";
|
|
16431
|
+
const { instanceId, deviceId, name, width, height, fps, cells } = grid;
|
|
16432
|
+
if (typeof instanceId !== "string" || typeof deviceId !== "number" || typeof name !== "string" || typeof width !== "number" || typeof height !== "number" || typeof fps !== "number" || !Array.isArray(cells)) return "unreadable";
|
|
16433
|
+
const parsed = [];
|
|
16434
|
+
for (const entry of cells) {
|
|
16435
|
+
const cell = readCell(entry);
|
|
16436
|
+
if (cell === null) return "unreadable";
|
|
16437
|
+
parsed.push(cell);
|
|
16438
|
+
}
|
|
16439
|
+
return {
|
|
16440
|
+
instanceId,
|
|
16441
|
+
deviceId,
|
|
16442
|
+
name,
|
|
16443
|
+
width,
|
|
16444
|
+
height,
|
|
16445
|
+
fps,
|
|
16446
|
+
cells: parsed
|
|
16447
|
+
};
|
|
16448
|
+
}
|
|
16449
|
+
/**
|
|
16450
|
+
* Keep a rectangle inside the unit square.
|
|
16451
|
+
*
|
|
16452
|
+
* The addon THROWS on a rectangle that falls outside — a silently clipped
|
|
16453
|
+
* picture is worse than a refusal — so the editor must never hand it one.
|
|
16454
|
+
*/
|
|
16455
|
+
function clampNormalizedRect(rect) {
|
|
16456
|
+
const width = Math.min(1, Math.max(MIN_EXTENT, rect.width));
|
|
16457
|
+
const height = Math.min(1, Math.max(MIN_EXTENT, rect.height));
|
|
16458
|
+
return {
|
|
16459
|
+
x: Math.min(1 - width, Math.max(0, rect.x)),
|
|
16460
|
+
y: Math.min(1 - height, Math.max(0, rect.y)),
|
|
16461
|
+
width,
|
|
16462
|
+
height
|
|
16463
|
+
};
|
|
16464
|
+
}
|
|
16465
|
+
/** Drag: translate by a normalized delta, clamped. */
|
|
16466
|
+
function moveNormalizedRect(rect, dx, dy) {
|
|
16467
|
+
return clampNormalizedRect({
|
|
16468
|
+
...rect,
|
|
16469
|
+
x: rect.x + dx,
|
|
16470
|
+
y: rect.y + dy
|
|
16471
|
+
});
|
|
16472
|
+
}
|
|
16473
|
+
/** Resize from the bottom-right corner: the origin stays put. */
|
|
16474
|
+
function resizeNormalizedRect(rect, dw, dh) {
|
|
16475
|
+
return clampNormalizedRect({
|
|
16476
|
+
...rect,
|
|
16477
|
+
width: rect.width + dw,
|
|
16478
|
+
height: rect.height + dh
|
|
16479
|
+
});
|
|
16480
|
+
}
|
|
16481
|
+
//#endregion
|
|
16482
|
+
//#region src/composites/cap-settings/CameraGridLayoutEditor.tsx
|
|
16483
|
+
/**
|
|
16484
|
+
* The camera-grid layout editor.
|
|
16485
|
+
*
|
|
16486
|
+
* A grid's geometry is the one thing a DERIVED settings form cannot express: a
|
|
16487
|
+
* generated form renders "cell 1 source = 592, cell 1 crop x = 0.25, cell 1 crop
|
|
16488
|
+
* width = 0.5…" and nobody can hold a picture in their head from that. So the
|
|
16489
|
+
* geometry gets a widget — the canvas, drawn at the grid's own aspect ratio,
|
|
16490
|
+
* with the cells on it — while the knobs that ARE ordinary fields (the name,
|
|
16491
|
+
* the canvas size, the frame rate) sit beside it in the same panel.
|
|
16492
|
+
*
|
|
16493
|
+
* Every rectangle in here is NORMALIZED [0,1], on both sides: the crop taken
|
|
16494
|
+
* out of a source, and the cell it lands in. That is how the addon stores them
|
|
16495
|
+
* (a source camera can change resolution, and a stored pixel rectangle would
|
|
16496
|
+
* quietly start cutting the wrong region), so the editor speaks the same
|
|
16497
|
+
* language rather than converting at the boundary.
|
|
16498
|
+
*
|
|
16499
|
+
* The preview is the source cameras' own snapshots, positioned by CSS from the
|
|
16500
|
+
* SAME normalized numbers that will become the ffmpeg `crop`/`overlay`. It costs
|
|
16501
|
+
* the server nothing and it is wrong in exactly the ways the real composition
|
|
16502
|
+
* would be wrong.
|
|
16503
|
+
*/
|
|
16504
|
+
var ADDON_ID = "camera-grid";
|
|
16505
|
+
var FULL_FRAME = {
|
|
16506
|
+
x: 0,
|
|
16507
|
+
y: 0,
|
|
16508
|
+
width: 1,
|
|
16509
|
+
height: 1
|
|
16510
|
+
};
|
|
16511
|
+
var MAX_CELLS = 16;
|
|
16512
|
+
/** Hoisted so `useDevices` does not re-subscribe on every render. */
|
|
16513
|
+
var CAMERA_FILTER = { type: DeviceType.Camera };
|
|
16514
|
+
function CameraGridLayoutEditor({ deviceId }) {
|
|
16515
|
+
const system = useSystem();
|
|
16516
|
+
const cameras = useMemo(() => system.listDeviceInfos(CAMERA_FILTER), [system, useDevices(CAMERA_FILTER)]);
|
|
16517
|
+
const [loaded, setLoaded] = useState(void 0);
|
|
16518
|
+
const [draft, setDraft] = useState(null);
|
|
16519
|
+
const [saving, setSaving] = useState(false);
|
|
16520
|
+
const [saveError, setSaveError] = useState(null);
|
|
16521
|
+
const [selected, setSelected] = useState(0);
|
|
16522
|
+
const [drag, setDrag] = useState(null);
|
|
16523
|
+
const reload = useCallback(async () => {
|
|
16524
|
+
const outcome = parseGridView(await system.trpcClient.addons.custom.mutate({
|
|
16525
|
+
addonId: ADDON_ID,
|
|
16526
|
+
action: "getGridForDevice",
|
|
16527
|
+
input: { deviceId }
|
|
16528
|
+
}));
|
|
16529
|
+
setLoaded(outcome);
|
|
16530
|
+
setDraft(outcome === null || outcome === "unreadable" ? null : outcome);
|
|
16531
|
+
}, [system, deviceId]);
|
|
16532
|
+
useEffect(() => {
|
|
16533
|
+
reload().catch(() => {
|
|
16534
|
+
setLoaded("unreadable");
|
|
16535
|
+
});
|
|
16536
|
+
}, [reload]);
|
|
16537
|
+
const save = useCallback(async () => {
|
|
16538
|
+
if (draft === null) return;
|
|
16539
|
+
setSaving(true);
|
|
16540
|
+
setSaveError(null);
|
|
16541
|
+
try {
|
|
16542
|
+
const outcome = parseGridView(await system.trpcClient.addons.custom.mutate({
|
|
16543
|
+
addonId: ADDON_ID,
|
|
16544
|
+
action: "saveGridLayout",
|
|
16545
|
+
input: {
|
|
16546
|
+
deviceId,
|
|
16547
|
+
name: draft.name,
|
|
16548
|
+
width: draft.width,
|
|
16549
|
+
height: draft.height,
|
|
16550
|
+
fps: draft.fps,
|
|
16551
|
+
cells: draft.cells.map((cell) => ({ ...cell }))
|
|
16552
|
+
}
|
|
16553
|
+
}));
|
|
16554
|
+
if (outcome !== null && outcome !== "unreadable") {
|
|
16555
|
+
setLoaded(outcome);
|
|
16556
|
+
setDraft(outcome);
|
|
16557
|
+
}
|
|
16558
|
+
} catch (error) {
|
|
16559
|
+
setSaveError(error instanceof Error ? error.message : String(error));
|
|
16560
|
+
} finally {
|
|
16561
|
+
setSaving(false);
|
|
16562
|
+
}
|
|
16563
|
+
}, [
|
|
16564
|
+
system,
|
|
16565
|
+
deviceId,
|
|
16566
|
+
draft
|
|
16567
|
+
]);
|
|
16568
|
+
const patchCell = useCallback((index, patch) => {
|
|
16569
|
+
setDraft((prev) => prev === null ? prev : {
|
|
16570
|
+
...prev,
|
|
16571
|
+
cells: prev.cells.map((cell, i) => i === index ? {
|
|
16572
|
+
...cell,
|
|
16573
|
+
...patch
|
|
16574
|
+
} : cell)
|
|
16575
|
+
});
|
|
16576
|
+
}, []);
|
|
16577
|
+
const canvasAspect = useMemo(() => draft === null ? 16 / 9 : draft.width / draft.height, [draft]);
|
|
16578
|
+
if (loaded === void 0) return /* @__PURE__ */ jsx(WidgetPanel, {
|
|
16579
|
+
title: "Grid layout",
|
|
16580
|
+
icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
|
|
16581
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
16582
|
+
className: "flex items-center gap-2 text-[10.5px] text-foreground-subtle",
|
|
16583
|
+
children: [/* @__PURE__ */ jsx(LoaderCircle, { className: "h-3 w-3 animate-spin" }), " Loading the layout…"]
|
|
16584
|
+
})
|
|
16585
|
+
});
|
|
16586
|
+
if (loaded === "unreadable") return /* @__PURE__ */ jsx(WidgetPanel, {
|
|
16587
|
+
title: "Grid layout",
|
|
16588
|
+
icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
|
|
16589
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
16590
|
+
className: "flex items-center gap-2 text-[10.5px] text-danger",
|
|
16591
|
+
children: [/* @__PURE__ */ jsx(CircleAlert, { className: "h-3 w-3" }), "The Camera Grids addon did not answer, so this layout is unknown — not empty."]
|
|
16592
|
+
})
|
|
16593
|
+
});
|
|
16594
|
+
if (loaded === null || draft === null) return /* @__PURE__ */ jsx(WidgetPanel, {
|
|
16595
|
+
title: "Grid layout",
|
|
16596
|
+
icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
|
|
16597
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
16598
|
+
className: "text-[10.5px] text-foreground-subtle",
|
|
16599
|
+
children: "This camera is not a grid."
|
|
16600
|
+
})
|
|
16601
|
+
});
|
|
16602
|
+
const onPointerMove = (event) => {
|
|
16603
|
+
if (drag === null) return;
|
|
16604
|
+
const bounds = event.currentTarget.getBoundingClientRect();
|
|
16605
|
+
if (bounds.width === 0 || bounds.height === 0) return;
|
|
16606
|
+
const dx = (event.clientX - drag.startX) / bounds.width;
|
|
16607
|
+
const dy = (event.clientY - drag.startY) / bounds.height;
|
|
16608
|
+
patchCell(drag.index, { cell: drag.mode === "move" ? moveNormalizedRect(drag.origin, dx, dy) : resizeNormalizedRect(drag.origin, dx, dy) });
|
|
16609
|
+
};
|
|
16610
|
+
return /* @__PURE__ */ jsx(WidgetPanel, {
|
|
16611
|
+
title: "Grid layout",
|
|
16612
|
+
icon: /* @__PURE__ */ jsx(Grid2x2, { className: "h-3.5 w-3.5" }),
|
|
16613
|
+
headerRight: /* @__PURE__ */ jsxs("button", {
|
|
16614
|
+
type: "button",
|
|
16615
|
+
disabled: saving,
|
|
16616
|
+
onClick: () => void save(),
|
|
16617
|
+
className: "flex items-center gap-1 rounded border border-border px-2 py-0.5 text-[10px] uppercase",
|
|
16618
|
+
children: [saving ? /* @__PURE__ */ jsx(LoaderCircle, { className: "h-3 w-3 animate-spin" }) : /* @__PURE__ */ jsx(Save, { className: "h-3 w-3" }), "Save"]
|
|
16619
|
+
}),
|
|
16620
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
16621
|
+
className: "flex flex-col gap-3",
|
|
16622
|
+
children: [
|
|
16623
|
+
saveError !== null && /* @__PURE__ */ jsxs("div", {
|
|
16624
|
+
className: "flex items-center gap-2 text-[10.5px] text-danger",
|
|
16625
|
+
children: [
|
|
16626
|
+
/* @__PURE__ */ jsx(CircleAlert, { className: "h-3 w-3" }),
|
|
16627
|
+
" ",
|
|
16628
|
+
saveError
|
|
16629
|
+
]
|
|
16630
|
+
}),
|
|
16631
|
+
/* @__PURE__ */ jsxs("div", {
|
|
16632
|
+
className: "relative w-full select-none overflow-hidden rounded border border-border bg-black",
|
|
16633
|
+
style: { aspectRatio: String(canvasAspect) },
|
|
16634
|
+
onPointerMove,
|
|
16635
|
+
onPointerUp: () => {
|
|
16636
|
+
setDrag(null);
|
|
16637
|
+
},
|
|
16638
|
+
onPointerLeave: () => {
|
|
16639
|
+
setDrag(null);
|
|
16640
|
+
},
|
|
16641
|
+
children: [draft.cells.map((cell, index) => /* @__PURE__ */ jsx(GridCellBox, {
|
|
16642
|
+
cell,
|
|
16643
|
+
selected: index === selected,
|
|
16644
|
+
onSelect: () => {
|
|
16645
|
+
setSelected(index);
|
|
16646
|
+
},
|
|
16647
|
+
onDragStart: (mode, event) => {
|
|
16648
|
+
setSelected(index);
|
|
16649
|
+
setDrag({
|
|
16650
|
+
index,
|
|
16651
|
+
mode,
|
|
16652
|
+
startX: event.clientX,
|
|
16653
|
+
startY: event.clientY,
|
|
16654
|
+
origin: cell.cell
|
|
16655
|
+
});
|
|
16656
|
+
}
|
|
16657
|
+
}, `${String(cell.deviceId)}-${String(index)}`)), draft.cells.length === 0 && /* @__PURE__ */ jsx("div", {
|
|
16658
|
+
className: "absolute inset-0 flex items-center justify-center text-[10.5px] text-foreground-subtle",
|
|
16659
|
+
children: "No cells yet — add one below."
|
|
16660
|
+
})]
|
|
16661
|
+
}),
|
|
16662
|
+
/* @__PURE__ */ jsxs("div", {
|
|
16663
|
+
className: "grid grid-cols-4 gap-2 text-[10.5px]",
|
|
16664
|
+
children: [
|
|
16665
|
+
/* @__PURE__ */ jsx(LabelledNumber, {
|
|
16666
|
+
label: "Width",
|
|
16667
|
+
value: draft.width,
|
|
16668
|
+
onChange: (width) => {
|
|
16669
|
+
setDraft({
|
|
16670
|
+
...draft,
|
|
16671
|
+
width
|
|
16672
|
+
});
|
|
16673
|
+
}
|
|
16674
|
+
}),
|
|
16675
|
+
/* @__PURE__ */ jsx(LabelledNumber, {
|
|
16676
|
+
label: "Height",
|
|
16677
|
+
value: draft.height,
|
|
16678
|
+
onChange: (height) => {
|
|
16679
|
+
setDraft({
|
|
16680
|
+
...draft,
|
|
16681
|
+
height
|
|
16682
|
+
});
|
|
16683
|
+
}
|
|
16684
|
+
}),
|
|
16685
|
+
/* @__PURE__ */ jsx(LabelledNumber, {
|
|
16686
|
+
label: "FPS",
|
|
16687
|
+
value: draft.fps,
|
|
16688
|
+
onChange: (fps) => {
|
|
16689
|
+
setDraft({
|
|
16690
|
+
...draft,
|
|
16691
|
+
fps
|
|
16692
|
+
});
|
|
16693
|
+
}
|
|
16694
|
+
}),
|
|
16695
|
+
/* @__PURE__ */ jsxs("button", {
|
|
16696
|
+
type: "button",
|
|
16697
|
+
disabled: draft.cells.length >= MAX_CELLS,
|
|
16698
|
+
onClick: () => {
|
|
16699
|
+
const first = cameras.find((camera) => camera.id !== deviceId);
|
|
16700
|
+
if (!first) return;
|
|
16701
|
+
setDraft({
|
|
16702
|
+
...draft,
|
|
16703
|
+
cells: [...draft.cells, {
|
|
16704
|
+
deviceId: first.id,
|
|
16705
|
+
source: FULL_FRAME,
|
|
16706
|
+
cell: clampNormalizedRect({
|
|
16707
|
+
x: .1,
|
|
16708
|
+
y: .1,
|
|
16709
|
+
width: .4,
|
|
16710
|
+
height: .4
|
|
16711
|
+
})
|
|
16712
|
+
}]
|
|
16713
|
+
});
|
|
16714
|
+
setSelected(draft.cells.length);
|
|
16715
|
+
},
|
|
16716
|
+
className: "flex items-center justify-center gap-1 self-end rounded border border-border px-2 py-1 uppercase",
|
|
16717
|
+
children: [/* @__PURE__ */ jsx(Plus, { className: "h-3 w-3" }), " Cell"]
|
|
16718
|
+
})
|
|
16719
|
+
]
|
|
16720
|
+
}),
|
|
16721
|
+
draft.cells[selected] !== void 0 && /* @__PURE__ */ jsx(CellInspector, {
|
|
16722
|
+
cell: draft.cells[selected],
|
|
16723
|
+
index: selected,
|
|
16724
|
+
cameras: cameras.filter((camera) => camera.id !== deviceId),
|
|
16725
|
+
onChange: (patch) => {
|
|
16726
|
+
patchCell(selected, patch);
|
|
16727
|
+
},
|
|
16728
|
+
onRemove: () => {
|
|
16729
|
+
setDraft({
|
|
16730
|
+
...draft,
|
|
16731
|
+
cells: draft.cells.filter((_, i) => i !== selected)
|
|
16732
|
+
});
|
|
16733
|
+
setSelected(0);
|
|
16734
|
+
}
|
|
16735
|
+
})
|
|
16736
|
+
]
|
|
16737
|
+
})
|
|
16738
|
+
});
|
|
16739
|
+
}
|
|
16740
|
+
function GridCellBox({ cell, selected, onSelect, onDragStart }) {
|
|
16741
|
+
const { src } = useDeviceSnapshotImage(cell.deviceId, { width: 640 });
|
|
16742
|
+
const backgroundSize = `${String(100 / cell.source.width)}% ${String(100 / cell.source.height)}%`;
|
|
16743
|
+
const backgroundPosition = cell.source.width >= 1 && cell.source.height >= 1 ? "center" : `${String(cell.source.x / Math.max(1e-6, 1 - cell.source.width) * 100)}% ${String(cell.source.y / Math.max(1e-6, 1 - cell.source.height) * 100)}%`;
|
|
16744
|
+
return /* @__PURE__ */ jsx("div", {
|
|
16745
|
+
role: "presentation",
|
|
16746
|
+
onPointerDown: (event) => {
|
|
16747
|
+
onSelect();
|
|
16748
|
+
onDragStart("move", event);
|
|
16749
|
+
},
|
|
16750
|
+
className: `absolute cursor-move border ${selected ? "border-accent" : "border-border/60"}`,
|
|
16751
|
+
style: {
|
|
16752
|
+
left: `${String(cell.cell.x * 100)}%`,
|
|
16753
|
+
top: `${String(cell.cell.y * 100)}%`,
|
|
16754
|
+
width: `${String(cell.cell.width * 100)}%`,
|
|
16755
|
+
height: `${String(cell.cell.height * 100)}%`,
|
|
16756
|
+
backgroundImage: src === null ? void 0 : `url(${src})`,
|
|
16757
|
+
backgroundSize,
|
|
16758
|
+
backgroundPosition,
|
|
16759
|
+
backgroundRepeat: "no-repeat"
|
|
16760
|
+
},
|
|
16761
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
16762
|
+
role: "presentation",
|
|
16763
|
+
onPointerDown: (event) => {
|
|
16764
|
+
event.stopPropagation();
|
|
16765
|
+
onDragStart("resize", event);
|
|
16766
|
+
},
|
|
16767
|
+
className: "absolute -bottom-1 -right-1 h-2.5 w-2.5 cursor-se-resize bg-accent"
|
|
16768
|
+
})
|
|
16769
|
+
});
|
|
16770
|
+
}
|
|
16771
|
+
function CellInspector({ cell, index, cameras, onChange, onRemove }) {
|
|
16772
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
16773
|
+
className: "flex flex-col gap-2 rounded border border-border p-2 text-[10.5px]",
|
|
16774
|
+
children: [
|
|
16775
|
+
/* @__PURE__ */ jsxs("div", {
|
|
16776
|
+
className: "flex items-center justify-between",
|
|
16777
|
+
children: [/* @__PURE__ */ jsxs("span", {
|
|
16778
|
+
className: "uppercase text-foreground-subtle",
|
|
16779
|
+
children: ["Cell ", index + 1]
|
|
16780
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
16781
|
+
type: "button",
|
|
16782
|
+
onClick: onRemove,
|
|
16783
|
+
className: "text-danger",
|
|
16784
|
+
children: /* @__PURE__ */ jsx(Trash2, { className: "h-3 w-3" })
|
|
16785
|
+
})]
|
|
16786
|
+
}),
|
|
16787
|
+
/* @__PURE__ */ jsxs("label", {
|
|
16788
|
+
className: "flex items-center gap-2",
|
|
16789
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
16790
|
+
className: "w-16 text-foreground-subtle",
|
|
16791
|
+
children: "Source"
|
|
16792
|
+
}), /* @__PURE__ */ jsx("select", {
|
|
16793
|
+
value: String(cell.deviceId),
|
|
16794
|
+
onChange: (event) => {
|
|
16795
|
+
onChange({ deviceId: Number(event.target.value) });
|
|
16796
|
+
},
|
|
16797
|
+
className: "flex-1 rounded border border-border bg-transparent px-1 py-0.5",
|
|
16798
|
+
children: cameras.map((camera) => /* @__PURE__ */ jsx("option", {
|
|
16799
|
+
value: String(camera.id),
|
|
16800
|
+
children: camera.name
|
|
16801
|
+
}, camera.id))
|
|
16802
|
+
})]
|
|
16803
|
+
}),
|
|
16804
|
+
/* @__PURE__ */ jsx("div", {
|
|
16805
|
+
className: "grid grid-cols-4 gap-2",
|
|
16806
|
+
children: [
|
|
16807
|
+
"x",
|
|
16808
|
+
"y",
|
|
16809
|
+
"width",
|
|
16810
|
+
"height"
|
|
16811
|
+
].map((key) => /* @__PURE__ */ jsx(LabelledNumber, {
|
|
16812
|
+
label: `Crop ${key}`,
|
|
16813
|
+
value: Math.round(cell.source[key] * 100) / 100,
|
|
16814
|
+
step: .01,
|
|
16815
|
+
onChange: (next) => {
|
|
16816
|
+
onChange({ source: clampNormalizedRect({
|
|
16817
|
+
...cell.source,
|
|
16818
|
+
[key]: next
|
|
16819
|
+
}) });
|
|
16820
|
+
}
|
|
16821
|
+
}, key))
|
|
16822
|
+
})
|
|
16823
|
+
]
|
|
16824
|
+
});
|
|
16825
|
+
}
|
|
16826
|
+
function LabelledNumber({ label, value, step = 1, onChange }) {
|
|
16827
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
16828
|
+
className: "flex flex-col gap-0.5",
|
|
16829
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
16830
|
+
className: "text-foreground-subtle",
|
|
16831
|
+
children: label
|
|
16832
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
16833
|
+
type: "number",
|
|
16834
|
+
step,
|
|
16835
|
+
value,
|
|
16836
|
+
onChange: (event) => {
|
|
16837
|
+
const next = Number(event.target.value);
|
|
16838
|
+
if (Number.isFinite(next)) onChange(next);
|
|
16839
|
+
},
|
|
16840
|
+
className: "rounded border border-border bg-transparent px-1 py-0.5"
|
|
16841
|
+
})]
|
|
16842
|
+
});
|
|
16843
|
+
}
|
|
16844
|
+
//#endregion
|
|
16210
16845
|
//#region src/hooks/use-device-proxy.ts
|
|
16211
16846
|
/**
|
|
16212
16847
|
* useDeviceProxy — canonical React entry point for a device.
|
|
@@ -16979,6 +17614,7 @@ function usePTZ(trpc, deviceId, hookOptions) {
|
|
|
16979
17614
|
const ptz = useDeviceProxy(trpc, enabled ? deviceId : null)?.ptz;
|
|
16980
17615
|
const [presets, setPresets] = useState([]);
|
|
16981
17616
|
const [homePreset, setHomePresetState] = useState(null);
|
|
17617
|
+
const [homeReturn, setHomeReturnState] = useState(null);
|
|
16982
17618
|
const [options, setOptions] = useState(null);
|
|
16983
17619
|
const [busy, setBusy] = useState(false);
|
|
16984
17620
|
const [error, setError] = useState(null);
|
|
@@ -17000,6 +17636,15 @@ function usePTZ(trpc, deviceId, hookOptions) {
|
|
|
17000
17636
|
setError(err instanceof Error ? err.message : String(err));
|
|
17001
17637
|
}
|
|
17002
17638
|
}, [ptz, enabled]);
|
|
17639
|
+
const refreshHomeReturn = useCallback(async () => {
|
|
17640
|
+
if (!enabled || !ptz) return;
|
|
17641
|
+
try {
|
|
17642
|
+
setHomeReturnState(await ptz.getHomeReturn({}));
|
|
17643
|
+
} catch (err) {
|
|
17644
|
+
if (isAbsentProvider(err)) return;
|
|
17645
|
+
setHomeReturnState(null);
|
|
17646
|
+
}
|
|
17647
|
+
}, [ptz, enabled]);
|
|
17003
17648
|
const refreshOptions = useCallback(async () => {
|
|
17004
17649
|
if (!enabled || !ptz) return;
|
|
17005
17650
|
try {
|
|
@@ -17013,10 +17658,12 @@ function usePTZ(trpc, deviceId, hookOptions) {
|
|
|
17013
17658
|
refreshPresets();
|
|
17014
17659
|
refreshOptions();
|
|
17015
17660
|
refreshHomePreset();
|
|
17661
|
+
refreshHomeReturn();
|
|
17016
17662
|
}, [
|
|
17017
17663
|
refreshPresets,
|
|
17018
17664
|
refreshOptions,
|
|
17019
|
-
refreshHomePreset
|
|
17665
|
+
refreshHomePreset,
|
|
17666
|
+
refreshHomeReturn
|
|
17020
17667
|
]);
|
|
17021
17668
|
const wrap = useCallback(async (fn) => {
|
|
17022
17669
|
if (!enabled || !ptz) return void 0;
|
|
@@ -17101,6 +17748,28 @@ function usePTZ(trpc, deviceId, hookOptions) {
|
|
|
17101
17748
|
wrap,
|
|
17102
17749
|
refreshHomePreset
|
|
17103
17750
|
]),
|
|
17751
|
+
captureHomeHere: useCallback(async () => {
|
|
17752
|
+
if (!ptz) return;
|
|
17753
|
+
await wrap(() => ptz.captureHomeHere({}));
|
|
17754
|
+
await refreshHomePreset();
|
|
17755
|
+
}, [
|
|
17756
|
+
ptz,
|
|
17757
|
+
wrap,
|
|
17758
|
+
refreshHomePreset
|
|
17759
|
+
]),
|
|
17760
|
+
homeReturn,
|
|
17761
|
+
setHomeReturn: useCallback(async (enabled, seconds) => {
|
|
17762
|
+
if (!ptz) return;
|
|
17763
|
+
await wrap(() => ptz.setHomeReturn({
|
|
17764
|
+
enabled,
|
|
17765
|
+
seconds
|
|
17766
|
+
}));
|
|
17767
|
+
await refreshHomeReturn();
|
|
17768
|
+
}, [
|
|
17769
|
+
ptz,
|
|
17770
|
+
wrap,
|
|
17771
|
+
refreshHomeReturn
|
|
17772
|
+
]),
|
|
17104
17773
|
goToPreset: useCallback(async (presetId) => {
|
|
17105
17774
|
if (!ptz) return;
|
|
17106
17775
|
await wrap(() => ptz.goToPreset({ presetId }));
|
|
@@ -17162,58 +17831,116 @@ function usePTZ(trpc, deviceId, hookOptions) {
|
|
|
17162
17831
|
//#endregion
|
|
17163
17832
|
//#region src/composites/cap-settings/HomePresetPicker.tsx
|
|
17164
17833
|
/**
|
|
17165
|
-
*
|
|
17834
|
+
* Where "Home" sends this camera, and how it is set.
|
|
17166
17835
|
*
|
|
17167
|
-
*
|
|
17168
|
-
* this fleet. Three providers each hardcoded a slot — reolink 0, hikvision
|
|
17169
|
-
* '1', amcrest 1 — and measured on 2026-09-17 those slots held "stanza",
|
|
17170
|
-
* "Credenza" and "Preset1": the operator's own presets, not a home. Two of the
|
|
17171
|
-
* three swallowed the failure, so a head that never moved looked exactly like a
|
|
17172
|
-
* head that went home.
|
|
17836
|
+
* ## Why this exists at all
|
|
17173
17837
|
*
|
|
17174
|
-
*
|
|
17838
|
+
* The vendor "convention" was wrong on every camera of this fleet. Three
|
|
17839
|
+
* providers each hardcoded a slot — reolink 0, hikvision '1', amcrest 1 — and
|
|
17840
|
+
* measured on 2026-09-17 those slots held "stanza", "Credenza" and "Preset1":
|
|
17841
|
+
* the operator's own presets, not a home. Two of the three swallowed the
|
|
17842
|
+
* failure, so a head that never moved looked exactly like one that went home.
|
|
17175
17843
|
*
|
|
17176
|
-
*
|
|
17177
|
-
*
|
|
17178
|
-
*
|
|
17179
|
-
*
|
|
17844
|
+
* ## The mistake this component made first
|
|
17845
|
+
*
|
|
17846
|
+
* Its first version rendered NOTHING for `source: 'native'`, with a comment
|
|
17847
|
+
* saying "the camera homes natively; there is no preset to choose". That is
|
|
17848
|
+
* true for ONVIF, whose home is the fixed PTZ origin. It was written hours
|
|
17849
|
+
* before we learned that Reolink's native home is a GUARD POINT — a stored
|
|
17850
|
+
* position, settable, with its own idle-return timer — so the control was
|
|
17851
|
+
* hidden from the one vendor that most needed it. A comment that is right about
|
|
17852
|
+
* one case and read as covering all of them is exactly the leftover that reads
|
|
17853
|
+
* as verification.
|
|
17854
|
+
*
|
|
17855
|
+
* ## What each state offers now
|
|
17856
|
+
*
|
|
17857
|
+
* `native` — no preset to pick, but "Set home here" and, where the camera
|
|
17858
|
+
* has one, the idle-return delay.
|
|
17859
|
+
* `firmware` — the camera named its own home (Hikvision's "Back to origin").
|
|
17860
|
+
* Preselected; the operator may override.
|
|
17180
17861
|
* `operator` — pinned here.
|
|
17181
|
-
* `none` —
|
|
17182
|
-
*
|
|
17862
|
+
* `none` — Home REFUSES, and the UI says so. A disabled feature must
|
|
17863
|
+
* never look like a broken one (D62).
|
|
17183
17864
|
*/
|
|
17865
|
+
var SELECT_CLASS$2 = "rounded-md border border-border bg-surface px-2 py-1 text-[11px] text-foreground focus:border-primary focus:outline-none disabled:opacity-50";
|
|
17184
17866
|
function HomePresetPicker({ controls }) {
|
|
17185
|
-
const { homePreset, presets, setHomePreset, busy } = controls;
|
|
17867
|
+
const { homePreset, presets, setHomePreset, captureHomeHere, homeReturn, setHomeReturn, busy } = controls;
|
|
17186
17868
|
const [saving, setSaving] = useState(false);
|
|
17187
17869
|
if (homePreset === null) return null;
|
|
17188
|
-
|
|
17189
|
-
const
|
|
17190
|
-
|
|
17191
|
-
|
|
17870
|
+
const disabled = busy || saving;
|
|
17871
|
+
const run = (action) => {
|
|
17872
|
+
setSaving(true);
|
|
17873
|
+
action().finally(() => setSaving(false));
|
|
17874
|
+
};
|
|
17875
|
+
const explanation = homePreset.source === "native" ? "This camera stores its own home position. “Set home here” pins it to where the camera is pointing now." : homePreset.source === "firmware" ? "Taken from the camera, which names this preset as its home." : homePreset.source === "none" ? "Nothing is set, so Home refuses rather than moving to an arbitrary preset." : "Pinned here. Clear it to fall back to the camera’s own home.";
|
|
17876
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
17877
|
+
className: "flex flex-col gap-2 px-2 pt-2",
|
|
17192
17878
|
children: [
|
|
17193
|
-
/* @__PURE__ */
|
|
17194
|
-
className: "
|
|
17195
|
-
children: "
|
|
17879
|
+
homePreset.source !== "native" && /* @__PURE__ */ jsxs("label", {
|
|
17880
|
+
className: "flex flex-col gap-1",
|
|
17881
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
17882
|
+
className: "text-[10px] font-medium text-foreground-subtle",
|
|
17883
|
+
children: "Home preset"
|
|
17884
|
+
}), /* @__PURE__ */ jsxs("select", {
|
|
17885
|
+
value: homePreset.presetId ?? "",
|
|
17886
|
+
disabled,
|
|
17887
|
+
onChange: (e) => {
|
|
17888
|
+
const next = e.target.value === "" ? null : e.target.value;
|
|
17889
|
+
run(() => setHomePreset(next));
|
|
17890
|
+
},
|
|
17891
|
+
className: SELECT_CLASS$2,
|
|
17892
|
+
children: [/* @__PURE__ */ jsx("option", {
|
|
17893
|
+
value: "",
|
|
17894
|
+
children: "Not set — Home is refused"
|
|
17895
|
+
}), presets.map((preset) => /* @__PURE__ */ jsxs("option", {
|
|
17896
|
+
value: preset.id,
|
|
17897
|
+
children: [preset.name || preset.id, preset.fn === "home" ? " (camera’s own home)" : ""]
|
|
17898
|
+
}, preset.id))]
|
|
17899
|
+
})]
|
|
17196
17900
|
}),
|
|
17197
|
-
/* @__PURE__ */
|
|
17198
|
-
|
|
17199
|
-
disabled
|
|
17200
|
-
|
|
17201
|
-
|
|
17202
|
-
|
|
17203
|
-
|
|
17204
|
-
|
|
17205
|
-
className: "
|
|
17206
|
-
children: [/* @__PURE__ */
|
|
17207
|
-
|
|
17208
|
-
children:
|
|
17209
|
-
|
|
17210
|
-
|
|
17211
|
-
|
|
17212
|
-
|
|
17901
|
+
/* @__PURE__ */ jsx("button", {
|
|
17902
|
+
type: "button",
|
|
17903
|
+
disabled,
|
|
17904
|
+
onClick: () => run(() => captureHomeHere()),
|
|
17905
|
+
className: "self-start rounded-md border border-border px-2 py-1 text-[11px] text-foreground hover:bg-primary/10 disabled:opacity-50",
|
|
17906
|
+
children: "Set home here"
|
|
17907
|
+
}),
|
|
17908
|
+
homeReturn !== null && /* @__PURE__ */ jsxs("div", {
|
|
17909
|
+
className: "flex flex-col gap-1",
|
|
17910
|
+
children: [/* @__PURE__ */ jsxs("label", {
|
|
17911
|
+
className: "flex items-center gap-2",
|
|
17912
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
17913
|
+
type: "checkbox",
|
|
17914
|
+
checked: homeReturn.enabled,
|
|
17915
|
+
disabled,
|
|
17916
|
+
onChange: (e) => run(() => setHomeReturn(e.target.checked, homeReturn.seconds))
|
|
17917
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
17918
|
+
className: "text-[10px] font-medium text-foreground-subtle",
|
|
17919
|
+
children: "Return home when idle"
|
|
17920
|
+
})]
|
|
17921
|
+
}), /* @__PURE__ */ jsxs("label", {
|
|
17922
|
+
className: "flex flex-col gap-1",
|
|
17923
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
17924
|
+
className: "text-[10px] font-medium text-foreground-subtle",
|
|
17925
|
+
children: "After (s)"
|
|
17926
|
+
}), /* @__PURE__ */ jsx("input", {
|
|
17927
|
+
type: "number",
|
|
17928
|
+
min: 0,
|
|
17929
|
+
max: 3600,
|
|
17930
|
+
defaultValue: homeReturn.seconds,
|
|
17931
|
+
disabled,
|
|
17932
|
+
onBlur: (e) => {
|
|
17933
|
+
const next = Number(e.target.value);
|
|
17934
|
+
if (!Number.isFinite(next) || Math.round(next) === homeReturn.seconds) return;
|
|
17935
|
+
run(() => setHomeReturn(homeReturn.enabled, Math.round(next)));
|
|
17936
|
+
},
|
|
17937
|
+
className: SELECT_CLASS$2
|
|
17938
|
+
})]
|
|
17939
|
+
})]
|
|
17213
17940
|
}),
|
|
17214
17941
|
/* @__PURE__ */ jsx("span", {
|
|
17215
17942
|
className: "text-[10px] text-foreground-subtle",
|
|
17216
|
-
children:
|
|
17943
|
+
children: explanation
|
|
17217
17944
|
})
|
|
17218
17945
|
]
|
|
17219
17946
|
});
|
|
@@ -19782,13 +20509,14 @@ function RecordingPanel({ deviceId }) {
|
|
|
19782
20509
|
* `type:'widget'` ConfigField. `WidgetSlot` resolves these BEFORE the
|
|
19783
20510
|
* Module-Federation `WidgetRegistry`. ids are namespaced `host/<name>`. */
|
|
19784
20511
|
var HOST_WIDGETS = {
|
|
19785
|
-
"host/motion-zones-grid": lazy(() => import("./MotionZonesSettings-
|
|
19786
|
-
"host/privacy-mask-grid": lazy(() => import("./PrivacyMaskSettings-
|
|
20512
|
+
"host/motion-zones-grid": lazy(() => import("./MotionZonesSettings-7c3yiT5E.js").then((m) => ({ default: m.MotionZonesSettings }))),
|
|
20513
|
+
"host/privacy-mask-grid": lazy(() => import("./PrivacyMaskSettings-PkYs077O.js").then((m) => ({ default: m.PrivacyMaskSettings }))),
|
|
19787
20514
|
"host/ptz-panel": PtzPanel,
|
|
19788
20515
|
"host/navigation-panel": NavigationPanel,
|
|
19789
20516
|
"host/consumables-panel": ConsumablesPanel,
|
|
19790
20517
|
"host/ptz-autotrack": AutotrackSection,
|
|
19791
|
-
"host/recording-panel": RecordingPanel
|
|
20518
|
+
"host/recording-panel": RecordingPanel,
|
|
20519
|
+
"host/camera-grid-layout": CameraGridLayoutEditor
|
|
19792
20520
|
};
|
|
19793
20521
|
//#endregion
|
|
19794
20522
|
//#region src/composites/widget-slot.tsx
|
|
@@ -43238,74 +43966,6 @@ function useDeviceNetworkLink(trpc, deviceId) {
|
|
|
43238
43966
|
return useDeviceState(trpc, deviceId, (s) => s.networkLink) ?? null;
|
|
43239
43967
|
}
|
|
43240
43968
|
//#endregion
|
|
43241
|
-
//#region src/hooks/use-device-snapshot.ts
|
|
43242
|
-
/**
|
|
43243
|
-
* useDeviceSnapshotImage — a device's snapshot as a plain image URL.
|
|
43244
|
-
*
|
|
43245
|
-
* ## What this used to do, and why it stopped
|
|
43246
|
-
*
|
|
43247
|
-
* It fetched `dev.snapshot.getSnapshot()` over tRPC and returned
|
|
43248
|
-
* `data:image/jpeg;base64,…`. That put a full camera capture — up to 4 K,
|
|
43249
|
-
* measured at 758 KB average per camera on the live hub — through the msgpack
|
|
43250
|
-
* WebSocket plane, base64-inflated by a third, and then held it in the
|
|
43251
|
-
* react-query heap for 24 h per device. The device list rendered it into a
|
|
43252
|
-
* **28 × 28 px `<img>`**.
|
|
43253
|
-
*
|
|
43254
|
-
* It also did not do what it appeared to do. `snapshot.getSnapshot` scoped to a
|
|
43255
|
-
* device routes to the NATIVE provider, not the snapshot wrapper, so it bypassed
|
|
43256
|
-
* the wrapper's cache, coalescing and stale-while-revalidate entirely: probed
|
|
43257
|
-
* live, a `force:true` call returned a fresh 1.05 MB JPEG in 0.55 s while the
|
|
43258
|
-
* wrapper's `lastCapturedAt` for that camera did not move. Two snapshot paths,
|
|
43259
|
-
* different behaviour, and only one of them maintained the cache the other one
|
|
43260
|
-
* reported on.
|
|
43261
|
-
*
|
|
43262
|
-
* ## What it does now
|
|
43263
|
-
*
|
|
43264
|
-
* Returns the same URL the viewer uses: `/addon/snapshot/media/<id>.jpg?w=<n>`,
|
|
43265
|
-
* served by the wrapper over the HTTP data plane. Relative and same-origin, so
|
|
43266
|
-
* the admin UI's `camstack_session` cookie authenticates it — the endpoint is
|
|
43267
|
-
* `access: 'authenticated'`, which accepts either a Bearer header or that
|
|
43268
|
-
* cookie, and a bare `<img>` can only send the cookie. This is the same
|
|
43269
|
-
* mechanism the native `<video>` fallback in `hls-video.tsx` already relies on.
|
|
43270
|
-
*
|
|
43271
|
-
* Caching is now the browser's, which is the point: `ETag` +
|
|
43272
|
-
* `Cache-Control: private, max-age=<device maxAgeS>` means a repeat render is a
|
|
43273
|
-
* cache hit and a revalidation is a 0-byte 304. No JS heap, no msgpack, no
|
|
43274
|
-
* base64. Nothing to configure — unlike `expo-image` on native, browsers
|
|
43275
|
-
* revalidate a stale URL rather than treating it as immutable, so the URL stays
|
|
43276
|
-
* stable and does NOT need a version parameter.
|
|
43277
|
-
*/
|
|
43278
|
-
/** The hub-proxied path prefix for the snapshot image data plane, composed
|
|
43279
|
-
* below on `baseUrl` or, for the same-origin case, on the page's mount. */
|
|
43280
|
-
var SNAPSHOT_MEDIA_PATH = "/addon/snapshot/media";
|
|
43281
|
-
function useDeviceSnapshotImage(deviceId, options = {}) {
|
|
43282
|
-
const { width, baseUrl } = options;
|
|
43283
|
-
const [refreshNonce, setRefreshNonce] = useState(0);
|
|
43284
|
-
return {
|
|
43285
|
-
src: useMemo(() => {
|
|
43286
|
-
if (deviceId === null || deviceId <= 0) return null;
|
|
43287
|
-
const base = baseUrl !== void 0 ? baseUrl.replace(/\/+$/, "") : routerBasename();
|
|
43288
|
-
const params = new URLSearchParams();
|
|
43289
|
-
if (width !== void 0 && Number.isInteger(width) && width > 0) params.set("w", String(width));
|
|
43290
|
-
if (refreshNonce > 0) {
|
|
43291
|
-
params.set("force", "1");
|
|
43292
|
-
params.set("r", String(refreshNonce));
|
|
43293
|
-
}
|
|
43294
|
-
const query = params.toString();
|
|
43295
|
-
return `${base}${SNAPSHOT_MEDIA_PATH}/${String(deviceId)}.jpg${query.length > 0 ? `?${query}` : ""}`;
|
|
43296
|
-
}, [
|
|
43297
|
-
deviceId,
|
|
43298
|
-
width,
|
|
43299
|
-
baseUrl,
|
|
43300
|
-
refreshNonce
|
|
43301
|
-
]),
|
|
43302
|
-
loading: false,
|
|
43303
|
-
refresh: useCallback(() => {
|
|
43304
|
-
setRefreshNonce((n) => n + 1);
|
|
43305
|
-
}, [])
|
|
43306
|
-
};
|
|
43307
|
-
}
|
|
43308
|
-
//#endregion
|
|
43309
43969
|
//#region src/composites/hover-zoom-image.tsx
|
|
43310
43970
|
/**
|
|
43311
43971
|
* <HoverZoomImage> — a small thumbnail that expands into a floating
|
|
@@ -50442,91 +51102,6 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
|
50442
51102
|
};
|
|
50443
51103
|
}
|
|
50444
51104
|
//#endregion
|
|
50445
|
-
//#region src/hooks/use-devices.ts
|
|
50446
|
-
/**
|
|
50447
|
-
* useDevices / useDevice — reactive sync-mirror reads.
|
|
50448
|
-
*
|
|
50449
|
-
* Both hooks hand out `DeviceProxy` references straight out of the
|
|
50450
|
-
* `System` mirror. The mirror keeps device + binding caches warm via
|
|
50451
|
-
* the `device.registered/unregistered/bindings-changed` event stream,
|
|
50452
|
-
* so re-renders are driven by lifecycle pushes — no React Query
|
|
50453
|
-
* round-trip and no `refetch` plumbing needed at the caller side.
|
|
50454
|
-
*
|
|
50455
|
-
* The hooks defensively read once on mount and assume the System has
|
|
50456
|
-
* been `init()`ed by the host app — calls before the warm-boot
|
|
50457
|
-
* completes simply return an empty array / null and re-render once
|
|
50458
|
-
* the registered listeners fire.
|
|
50459
|
-
*/
|
|
50460
|
-
/**
|
|
50461
|
-
* Reactive list of devices matching the optional filter set. Returns a
|
|
50462
|
-
* stable array reference between updates so consumers passing it as a
|
|
50463
|
-
* prop don't tear down memoized children.
|
|
50464
|
-
*/
|
|
50465
|
-
function useDevices(filters) {
|
|
50466
|
-
const system = useSystem();
|
|
50467
|
-
const filtersKey = useMemo(() => filters ? JSON.stringify(filters) : "", [filters]);
|
|
50468
|
-
const [devices, setDevices] = useState(() => system.listDevices(filters));
|
|
50469
|
-
useEffect(() => {
|
|
50470
|
-
const refresh = () => {
|
|
50471
|
-
setDevices(system.listDevices(filters));
|
|
50472
|
-
};
|
|
50473
|
-
refresh();
|
|
50474
|
-
let unsubAdded = null;
|
|
50475
|
-
let unsubRemoved = null;
|
|
50476
|
-
try {
|
|
50477
|
-
unsubAdded = system.onDeviceAdded(refresh);
|
|
50478
|
-
unsubRemoved = system.onDeviceRemoved(refresh);
|
|
50479
|
-
} catch {}
|
|
50480
|
-
const unsubConn = system.subscribeConnectionEvents((state) => {
|
|
50481
|
-
if (state === "connected") refresh();
|
|
50482
|
-
});
|
|
50483
|
-
return () => {
|
|
50484
|
-
unsubAdded?.();
|
|
50485
|
-
unsubRemoved?.();
|
|
50486
|
-
unsubConn();
|
|
50487
|
-
};
|
|
50488
|
-
}, [
|
|
50489
|
-
system,
|
|
50490
|
-
filters,
|
|
50491
|
-
filtersKey
|
|
50492
|
-
]);
|
|
50493
|
-
return devices;
|
|
50494
|
-
}
|
|
50495
|
-
/**
|
|
50496
|
-
* Single-device variant. Returns `null` until the device is in the
|
|
50497
|
-
* mirror; re-renders when the device is removed (back to `null`) or
|
|
50498
|
-
* added.
|
|
50499
|
-
*/
|
|
50500
|
-
function useDevice(deviceId) {
|
|
50501
|
-
const system = useSystem();
|
|
50502
|
-
const [device, setDevice] = useState(() => deviceId === null ? null : system.getDevice(deviceId));
|
|
50503
|
-
useEffect(() => {
|
|
50504
|
-
if (deviceId === null) {
|
|
50505
|
-
setDevice(null);
|
|
50506
|
-
return;
|
|
50507
|
-
}
|
|
50508
|
-
const refresh = () => {
|
|
50509
|
-
setDevice(system.getDevice(deviceId));
|
|
50510
|
-
};
|
|
50511
|
-
refresh();
|
|
50512
|
-
let unsubAdded = null;
|
|
50513
|
-
let unsubRemoved = null;
|
|
50514
|
-
try {
|
|
50515
|
-
unsubAdded = system.onDeviceAdded(refresh);
|
|
50516
|
-
unsubRemoved = system.onDeviceRemoved(refresh);
|
|
50517
|
-
} catch {}
|
|
50518
|
-
const unsubConn = system.subscribeConnectionEvents((state) => {
|
|
50519
|
-
if (state === "connected") refresh();
|
|
50520
|
-
});
|
|
50521
|
-
return () => {
|
|
50522
|
-
unsubAdded?.();
|
|
50523
|
-
unsubRemoved?.();
|
|
50524
|
-
unsubConn();
|
|
50525
|
-
};
|
|
50526
|
-
}, [system, deviceId]);
|
|
50527
|
-
return device;
|
|
50528
|
-
}
|
|
50529
|
-
//#endregion
|
|
50530
51105
|
//#region src/hooks/use-doorbell-events.ts
|
|
50531
51106
|
/**
|
|
50532
51107
|
* useDoorbellEvents — subscribe to doorbell.onPressed across the cluster.
|
|
@@ -50791,12 +51366,12 @@ function mirror(input) {
|
|
|
50791
51366
|
* Render inside `<Suspense>` at all call sites. */
|
|
50792
51367
|
var MaskShapeCanvas = lazy(() => import("./MaskShapeCanvas-DI4BY7W2.js").then((m) => ({ default: m.MaskShapeCanvas })));
|
|
50793
51368
|
/** Lazy-wrapped `MotionZonesSettings` — code-split off the main bundle. */
|
|
50794
|
-
var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-
|
|
51369
|
+
var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-7c3yiT5E.js").then((m) => ({ default: m.MotionZonesSettings })));
|
|
50795
51370
|
/** Lazy-wrapped `SceneMonitorEditor` — code-split off the main bundle for the
|
|
50796
51371
|
* same reason: it mounts `MaskShapeCanvas`, which chains react-konva. Render
|
|
50797
51372
|
* inside `<Suspense>`; the admin-ui `/scenes` dialog is its only caller. */
|
|
50798
|
-
var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-
|
|
51373
|
+
var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-BvDy3x3k.js").then((m) => ({ default: m.SceneMonitorEditor })));
|
|
50799
51374
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
50800
|
-
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-
|
|
51375
|
+
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-PkYs077O.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
50801
51376
|
//#endregion
|
|
50802
|
-
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, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, 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, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, 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, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, 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, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, createLucideIcon as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, 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, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, EyeOff as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, Camera as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, 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, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, 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, useClusterTopology, 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, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, 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, useFaceGalleryAuditIdentitySamples, 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, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, 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, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, 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, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, 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, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, 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, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, 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, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, 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, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
51377
|
+
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, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, 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, NAVIGATION_DRIVE_INTERVAL_MS, NavigationPanel, NetworkLinkBadge, 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, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SCENE_CAPTURE_VARIANTS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, SortHeaderButton, 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, ImageOff as a, agentColumnKey, allDeviceTypeFilterOptions, applyFleetQueryDefaults, ariaSortForColumn, badgeFor, buildStepTreeFromSchema, Camera as c, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, coverageLine, 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, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humidifierTint, Mic as i, initialScrubState, isAbsentProvider, isFieldVisible, createLucideIcon as l, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, mountPath, Square as n, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, normalizeForSearch, Grid2x2 as o, openTopLayer, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, RotateCcw as r, resetHubMountForTests, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, resolveStepDefaultModel, resolveTableLayout, roiTooLarge, routerBasename, EyeOff as s, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, sortRowsByColumn, statusIcons, statusLine, stepHasModelForFormat, stepModelOptions, stripParentNamePrefix, Trash2 as t, tabForSelector, tankAlert, themeToCss, toStationaryOverlayBox, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, 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, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupDelete, useBackupDeleteSchedule, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupListRuns, 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, useClusterTopology, 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, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, 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, useFaceGalleryAuditIdentitySamples, 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, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkDownloadCa, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, 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, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, 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, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSnoozes, useNotificationRulesResolveArtifactUrl, 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, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetSummary, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentSummaries, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListSummaries, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsRunReplayFrameProcessor, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorRearmInferenceDevice, 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, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, 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, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzCaptureHomeHere, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingCancelRelocateJob, useRecordingCancelStorageMigrationMove, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetAvailabilityBatch, useRecordingGetDaysWithRecordings, useRecordingGetDaysWithRecordingsBatch, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlacement, useRecordingGetPlaybackManifest, useRecordingGetRelocateResidue, useRecordingGetStatus, useRecordingGetStorageMigrationMoveStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingListRelocateJobs, useRecordingLocateSegment, useRecordingPauseForStorageMigration, useRecordingPlanStorageRebalance, useRecordingPruneFootage, useRecordingReadGopBytes, useRecordingReadSegmentBytes, useRecordingReadWindowBytes, useRecordingReconcileLedgerAgainstDisk, useRecordingRefreshStorageLocationsForMigration, useRecordingRelocateFootage, useRecordingRenderClip, useRecordingRenderGif, useRecordingRescanStorage, useRecordingResumeForStorageMigration, useRecordingSetDeviceConfig, useRecordingSetDevicePlacement, useRecordingSignalGetStatus, useRecordingStartStorageMigrationMove, useRecordingStartStorageRebalance, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, 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, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|