@camstack/ui-library 1.1.42 → 1.1.44
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composites/camera-stream-player.d.ts +2 -2
- package/dist/composites/device-controls/control-registry.d.ts +14 -5
- package/dist/composites/device-step-matrix.d.ts +33 -0
- package/dist/composites/index.d.ts +3 -0
- package/dist/composites/pipeline-matrix-shared.d.ts +69 -0
- package/dist/composites/pipeline-tree-matrix.d.ts +2 -14
- package/dist/generated/system-hooks.d.ts +0 -2
- package/dist/hooks/use-device-webrtc.d.ts +2 -1
- package/dist/index.cjs +764 -270
- package/dist/index.js +764 -271
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import * as __mfHostReact from "react";
|
|
|
3
3
|
import React, { Fragment, Suspense, createContext, createElement, forwardRef, lazy, useCallback, useContext, useEffect, useId, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
|
|
4
4
|
import * as __mfHostReactJsxRuntime from "react/jsx-runtime";
|
|
5
5
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
-
import { ALL_CAPABILITY_DEFINITIONS, DEFAULT_EVENT_COLOR, DEFAULT_SCRUB_THUMBNAIL_PRESET, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, ScrubThumbnailPresetSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, createDeviceProxy, createLazyTrpcSource, createSliceHandle, describeModelVariant, findTimezone, resolveVariantModelId, tryConvertUnit } from "@camstack/types";
|
|
6
|
+
import { ALL_CAPABILITY_DEFINITIONS, DEFAULT_EVENT_COLOR, DEFAULT_SCRUB_THUMBNAIL_PRESET, DEVICE_TYPE_CONTROL_KIND, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EVENT_TAXONOMY, EventCategory, ExposedDeviceSchema, KNOWN_CAP_NAMES, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, RecordingConfigSchema, RecordingStatusSchema, SCRUB_THUMBNAIL_PRESET_LABELS, SCRUB_THUMBNAIL_PRESET_ORDER, ScrubThumbnailPresetSchema, SourceInfoSchema, TIMEZONES, buildModelVariantGroups, canConvertUnit, createDeviceProxy, createLazyTrpcSource, createSliceHandle, describeModelVariant, findTimezone, resolveDeviceControlKind, resolveVariantModelId, tryConvertUnit } from "@camstack/types";
|
|
7
7
|
import * as __mfHostReactDOM from "react-dom";
|
|
8
8
|
import { createPortal } from "react-dom";
|
|
9
9
|
import * as __mfHostReactDOMClient from "react-dom/client";
|
|
@@ -8225,6 +8225,30 @@ var ArrowUp = createLucideIcon("arrow-up", [["path", {
|
|
|
8225
8225
|
* This source code is licensed under the ISC license.
|
|
8226
8226
|
* See the LICENSE file in the root directory of this source tree.
|
|
8227
8227
|
*/
|
|
8228
|
+
var Baby = createLucideIcon("baby", [
|
|
8229
|
+
["path", {
|
|
8230
|
+
d: "M10 16c.5.3 1.2.5 2 .5s1.5-.2 2-.5",
|
|
8231
|
+
key: "1u7htd"
|
|
8232
|
+
}],
|
|
8233
|
+
["path", {
|
|
8234
|
+
d: "M15 12h.01",
|
|
8235
|
+
key: "1k8ypt"
|
|
8236
|
+
}],
|
|
8237
|
+
["path", {
|
|
8238
|
+
d: "M19.38 6.813A9 9 0 0 1 20.8 10.2a2 2 0 0 1 0 3.6 9 9 0 0 1-17.6 0 2 2 0 0 1 0-3.6A9 9 0 0 1 12 3c2 0 3.5 1.1 3.5 2.5s-.9 2.5-2 2.5c-.8 0-1.5-.4-1.5-1",
|
|
8239
|
+
key: "11xh7x"
|
|
8240
|
+
}],
|
|
8241
|
+
["path", {
|
|
8242
|
+
d: "M9 12h.01",
|
|
8243
|
+
key: "157uk2"
|
|
8244
|
+
}]
|
|
8245
|
+
]);
|
|
8246
|
+
/**
|
|
8247
|
+
* @license lucide-react v0.576.0 - ISC
|
|
8248
|
+
*
|
|
8249
|
+
* This source code is licensed under the ISC license.
|
|
8250
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
8251
|
+
*/
|
|
8228
8252
|
var Ban = createLucideIcon("ban", [["circle", {
|
|
8229
8253
|
cx: "12",
|
|
8230
8254
|
cy: "12",
|
|
@@ -9179,6 +9203,74 @@ var Cloud = createLucideIcon("cloud", [["path", {
|
|
|
9179
9203
|
* This source code is licensed under the ISC license.
|
|
9180
9204
|
* See the LICENSE file in the root directory of this source tree.
|
|
9181
9205
|
*/
|
|
9206
|
+
var Cog = createLucideIcon("cog", [
|
|
9207
|
+
["path", {
|
|
9208
|
+
d: "M11 10.27 7 3.34",
|
|
9209
|
+
key: "16pf9h"
|
|
9210
|
+
}],
|
|
9211
|
+
["path", {
|
|
9212
|
+
d: "m11 13.73-4 6.93",
|
|
9213
|
+
key: "794ttg"
|
|
9214
|
+
}],
|
|
9215
|
+
["path", {
|
|
9216
|
+
d: "M12 22v-2",
|
|
9217
|
+
key: "1osdcq"
|
|
9218
|
+
}],
|
|
9219
|
+
["path", {
|
|
9220
|
+
d: "M12 2v2",
|
|
9221
|
+
key: "tus03m"
|
|
9222
|
+
}],
|
|
9223
|
+
["path", {
|
|
9224
|
+
d: "M14 12h8",
|
|
9225
|
+
key: "4f43i9"
|
|
9226
|
+
}],
|
|
9227
|
+
["path", {
|
|
9228
|
+
d: "m17 20.66-1-1.73",
|
|
9229
|
+
key: "eq3orb"
|
|
9230
|
+
}],
|
|
9231
|
+
["path", {
|
|
9232
|
+
d: "m17 3.34-1 1.73",
|
|
9233
|
+
key: "2wel8s"
|
|
9234
|
+
}],
|
|
9235
|
+
["path", {
|
|
9236
|
+
d: "M2 12h2",
|
|
9237
|
+
key: "1t8f8n"
|
|
9238
|
+
}],
|
|
9239
|
+
["path", {
|
|
9240
|
+
d: "m20.66 17-1.73-1",
|
|
9241
|
+
key: "sg0v6f"
|
|
9242
|
+
}],
|
|
9243
|
+
["path", {
|
|
9244
|
+
d: "m20.66 7-1.73 1",
|
|
9245
|
+
key: "1ow05n"
|
|
9246
|
+
}],
|
|
9247
|
+
["path", {
|
|
9248
|
+
d: "m3.34 17 1.73-1",
|
|
9249
|
+
key: "nuk764"
|
|
9250
|
+
}],
|
|
9251
|
+
["path", {
|
|
9252
|
+
d: "m3.34 7 1.73 1",
|
|
9253
|
+
key: "1ulond"
|
|
9254
|
+
}],
|
|
9255
|
+
["circle", {
|
|
9256
|
+
cx: "12",
|
|
9257
|
+
cy: "12",
|
|
9258
|
+
r: "2",
|
|
9259
|
+
key: "1c9p78"
|
|
9260
|
+
}],
|
|
9261
|
+
["circle", {
|
|
9262
|
+
cx: "12",
|
|
9263
|
+
cy: "12",
|
|
9264
|
+
r: "8",
|
|
9265
|
+
key: "46899m"
|
|
9266
|
+
}]
|
|
9267
|
+
]);
|
|
9268
|
+
/**
|
|
9269
|
+
* @license lucide-react v0.576.0 - ISC
|
|
9270
|
+
*
|
|
9271
|
+
* This source code is licensed under the ISC license.
|
|
9272
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
9273
|
+
*/
|
|
9182
9274
|
var CopyPlus = createLucideIcon("copy-plus", [
|
|
9183
9275
|
["line", {
|
|
9184
9276
|
x1: "15",
|
|
@@ -9831,6 +9923,26 @@ var GripHorizontal = createLucideIcon("grip-horizontal", [
|
|
|
9831
9923
|
* This source code is licensed under the ISC license.
|
|
9832
9924
|
* See the LICENSE file in the root directory of this source tree.
|
|
9833
9925
|
*/
|
|
9926
|
+
var Hammer = createLucideIcon("hammer", [
|
|
9927
|
+
["path", {
|
|
9928
|
+
d: "m15 12-9.373 9.373a1 1 0 0 1-3.001-3L12 9",
|
|
9929
|
+
key: "1hayfq"
|
|
9930
|
+
}],
|
|
9931
|
+
["path", {
|
|
9932
|
+
d: "m18 15 4-4",
|
|
9933
|
+
key: "16gjal"
|
|
9934
|
+
}],
|
|
9935
|
+
["path", {
|
|
9936
|
+
d: "m21.5 11.5-1.914-1.914A2 2 0 0 1 19 8.172v-.344a2 2 0 0 0-.586-1.414l-1.657-1.657A6 6 0 0 0 12.516 3H9l1.243 1.243A6 6 0 0 1 12 8.485V10l2 2h1.172a2 2 0 0 1 1.414.586L18.5 14.5",
|
|
9937
|
+
key: "15ts47"
|
|
9938
|
+
}]
|
|
9939
|
+
]);
|
|
9940
|
+
/**
|
|
9941
|
+
* @license lucide-react v0.576.0 - ISC
|
|
9942
|
+
*
|
|
9943
|
+
* This source code is licensed under the ISC license.
|
|
9944
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
9945
|
+
*/
|
|
9834
9946
|
var HardDrive = createLucideIcon("hard-drive", [
|
|
9835
9947
|
["path", {
|
|
9836
9948
|
d: "M10 16h.01",
|
|
@@ -10007,6 +10119,38 @@ var Info = createLucideIcon("info", [
|
|
|
10007
10119
|
* This source code is licensed under the ISC license.
|
|
10008
10120
|
* See the LICENSE file in the root directory of this source tree.
|
|
10009
10121
|
*/
|
|
10122
|
+
var Laugh = createLucideIcon("laugh", [
|
|
10123
|
+
["circle", {
|
|
10124
|
+
cx: "12",
|
|
10125
|
+
cy: "12",
|
|
10126
|
+
r: "10",
|
|
10127
|
+
key: "1mglay"
|
|
10128
|
+
}],
|
|
10129
|
+
["path", {
|
|
10130
|
+
d: "M18 13a6 6 0 0 1-6 5 6 6 0 0 1-6-5h12Z",
|
|
10131
|
+
key: "b2q4dd"
|
|
10132
|
+
}],
|
|
10133
|
+
["line", {
|
|
10134
|
+
x1: "9",
|
|
10135
|
+
x2: "9.01",
|
|
10136
|
+
y1: "9",
|
|
10137
|
+
y2: "9",
|
|
10138
|
+
key: "yxxnd0"
|
|
10139
|
+
}],
|
|
10140
|
+
["line", {
|
|
10141
|
+
x1: "15",
|
|
10142
|
+
x2: "15.01",
|
|
10143
|
+
y1: "9",
|
|
10144
|
+
y2: "9",
|
|
10145
|
+
key: "1p4y9e"
|
|
10146
|
+
}]
|
|
10147
|
+
]);
|
|
10148
|
+
/**
|
|
10149
|
+
* @license lucide-react v0.576.0 - ISC
|
|
10150
|
+
*
|
|
10151
|
+
* This source code is licensed under the ISC license.
|
|
10152
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
10153
|
+
*/
|
|
10010
10154
|
var LayoutGrid = createLucideIcon("layout-grid", [
|
|
10011
10155
|
["rect", {
|
|
10012
10156
|
width: "7",
|
|
@@ -10698,6 +10842,16 @@ var Pencil = createLucideIcon("pencil", [["path", {
|
|
|
10698
10842
|
* This source code is licensed under the ISC license.
|
|
10699
10843
|
* See the LICENSE file in the root directory of this source tree.
|
|
10700
10844
|
*/
|
|
10845
|
+
var Phone = createLucideIcon("phone", [["path", {
|
|
10846
|
+
d: "M13.832 16.568a1 1 0 0 0 1.213-.303l.355-.465A2 2 0 0 1 17 15h3a2 2 0 0 1 2 2v3a2 2 0 0 1-2 2A18 18 0 0 1 2 4a2 2 0 0 1 2-2h3a2 2 0 0 1 2 2v3a2 2 0 0 1-.8 1.6l-.468.351a1 1 0 0 0-.292 1.233 14 14 0 0 0 6.392 6.384",
|
|
10847
|
+
key: "9njp5v"
|
|
10848
|
+
}]]);
|
|
10849
|
+
/**
|
|
10850
|
+
* @license lucide-react v0.576.0 - ISC
|
|
10851
|
+
*
|
|
10852
|
+
* This source code is licensed under the ISC license.
|
|
10853
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
10854
|
+
*/
|
|
10701
10855
|
var Pipette = createLucideIcon("pipette", [
|
|
10702
10856
|
["path", {
|
|
10703
10857
|
d: "m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12",
|
|
@@ -12050,6 +12204,32 @@ var User = createLucideIcon("user", [["path", {
|
|
|
12050
12204
|
* This source code is licensed under the ISC license.
|
|
12051
12205
|
* See the LICENSE file in the root directory of this source tree.
|
|
12052
12206
|
*/
|
|
12207
|
+
var Users = createLucideIcon("users", [
|
|
12208
|
+
["path", {
|
|
12209
|
+
d: "M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",
|
|
12210
|
+
key: "1yyitq"
|
|
12211
|
+
}],
|
|
12212
|
+
["path", {
|
|
12213
|
+
d: "M16 3.128a4 4 0 0 1 0 7.744",
|
|
12214
|
+
key: "16gr8j"
|
|
12215
|
+
}],
|
|
12216
|
+
["path", {
|
|
12217
|
+
d: "M22 21v-2a4 4 0 0 0-3-3.87",
|
|
12218
|
+
key: "kshegd"
|
|
12219
|
+
}],
|
|
12220
|
+
["circle", {
|
|
12221
|
+
cx: "9",
|
|
12222
|
+
cy: "7",
|
|
12223
|
+
r: "4",
|
|
12224
|
+
key: "nufk8"
|
|
12225
|
+
}]
|
|
12226
|
+
]);
|
|
12227
|
+
/**
|
|
12228
|
+
* @license lucide-react v0.576.0 - ISC
|
|
12229
|
+
*
|
|
12230
|
+
* This source code is licensed under the ISC license.
|
|
12231
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
12232
|
+
*/
|
|
12053
12233
|
var UtensilsCrossed = createLucideIcon("utensils-crossed", [
|
|
12054
12234
|
["path", {
|
|
12055
12235
|
d: "m16 2-2.3 2.3a3 3 0 0 0 0 4.2l1.8 1.8a3 3 0 0 0 4.2 0L22 8",
|
|
@@ -14222,7 +14402,7 @@ function buildDisplayStep(addon, cfg) {
|
|
|
14222
14402
|
function computeEffective(mode, agentDefault, patch) {
|
|
14223
14403
|
if (mode !== "device" || !patch) return agentDefault;
|
|
14224
14404
|
return {
|
|
14225
|
-
enabled:
|
|
14405
|
+
enabled: agentDefault.enabled,
|
|
14226
14406
|
modelId: patch.modelId ?? agentDefault.modelId,
|
|
14227
14407
|
settings: patch.settings ?? agentDefault.settings
|
|
14228
14408
|
};
|
|
@@ -14236,97 +14416,62 @@ function AgentModeEditor({ addon, agentDefault, modelsForFormat, onChangeAgentCo
|
|
|
14236
14416
|
};
|
|
14237
14417
|
return /* @__PURE__ */ jsxs("div", {
|
|
14238
14418
|
className: "space-y-4 text-xs",
|
|
14239
|
-
children: [
|
|
14240
|
-
|
|
14241
|
-
|
|
14242
|
-
|
|
14243
|
-
|
|
14244
|
-
|
|
14245
|
-
|
|
14246
|
-
|
|
14247
|
-
|
|
14248
|
-
|
|
14249
|
-
|
|
14250
|
-
|
|
14251
|
-
}),
|
|
14252
|
-
|
|
14253
|
-
|
|
14254
|
-
|
|
14255
|
-
|
|
14256
|
-
|
|
14257
|
-
|
|
14258
|
-
|
|
14259
|
-
})] }),
|
|
14260
|
-
(addon.configSchema?.length ?? 0) > 0 && /* @__PURE__ */ jsxs("div", {
|
|
14261
|
-
className: "pt-2 border-t border-border/50 space-y-3",
|
|
14262
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
14263
|
-
className: "text-[10px] uppercase tracking-widest text-foreground-subtle",
|
|
14264
|
-
children: "Settings"
|
|
14265
|
-
}), addon.configSchema?.map((field) => /* @__PURE__ */ jsx(ConfigSchemaField, {
|
|
14266
|
-
field,
|
|
14267
|
-
allFields: addon.configSchema ?? [],
|
|
14268
|
-
step: buildDisplayStep(addon, agentDefault),
|
|
14269
|
-
disabled: false,
|
|
14270
|
-
onChange: (next) => update({ settings: { ...next.settings } })
|
|
14271
|
-
}, field.key))]
|
|
14272
|
-
})
|
|
14273
|
-
]
|
|
14419
|
+
children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
14420
|
+
className: "text-[10px] uppercase tracking-widest text-foreground-subtle mb-1",
|
|
14421
|
+
children: "Model"
|
|
14422
|
+
}), /* @__PURE__ */ jsx(ModelPicker, {
|
|
14423
|
+
models: modelsForFormat,
|
|
14424
|
+
value: agentDefault.modelId ?? "",
|
|
14425
|
+
onChange: (modelId) => update({ modelId })
|
|
14426
|
+
})] }), (addon.configSchema?.length ?? 0) > 0 && /* @__PURE__ */ jsxs("div", {
|
|
14427
|
+
className: "pt-2 border-t border-border/50 space-y-3",
|
|
14428
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
14429
|
+
className: "text-[10px] uppercase tracking-widest text-foreground-subtle",
|
|
14430
|
+
children: "Settings"
|
|
14431
|
+
}), addon.configSchema?.map((field) => /* @__PURE__ */ jsx(ConfigSchemaField, {
|
|
14432
|
+
field,
|
|
14433
|
+
allFields: addon.configSchema ?? [],
|
|
14434
|
+
step: buildDisplayStep(addon, agentDefault),
|
|
14435
|
+
disabled: false,
|
|
14436
|
+
onChange: (next) => update({ settings: { ...next.settings } })
|
|
14437
|
+
}, field.key))]
|
|
14438
|
+
})]
|
|
14274
14439
|
});
|
|
14275
14440
|
}
|
|
14276
14441
|
function DeviceModeEditor({ addon, agentDefault, agentNodeId, currentPatch, modelsForFormat, onChangePatch }) {
|
|
14277
14442
|
const effective = computeEffective("device", agentDefault, currentPatch);
|
|
14278
14443
|
const commitPatch = (next) => {
|
|
14279
|
-
const hasAnyField = next.
|
|
14444
|
+
const hasAnyField = next.modelId !== void 0 || next.settings !== void 0;
|
|
14280
14445
|
onChangePatch?.(hasAnyField ? next : null);
|
|
14281
14446
|
};
|
|
14282
|
-
const setEnabled = (state) => {
|
|
14283
|
-
const { enabled: _prev, ...rest } = currentPatch ?? {};
|
|
14284
|
-
commitPatch(state === "inherit" ? rest : {
|
|
14285
|
-
...rest,
|
|
14286
|
-
enabled: state === "on"
|
|
14287
|
-
});
|
|
14288
|
-
};
|
|
14289
14447
|
const setModel = (modelId) => {
|
|
14290
|
-
const { modelId: _prev, ...rest } = currentPatch ?? {};
|
|
14448
|
+
const { enabled: _enabled, modelId: _prev, ...rest } = currentPatch ?? {};
|
|
14291
14449
|
commitPatch(modelId === void 0 ? rest : {
|
|
14292
14450
|
...rest,
|
|
14293
14451
|
modelId
|
|
14294
14452
|
});
|
|
14295
14453
|
};
|
|
14296
14454
|
const setSettings = (settings) => {
|
|
14297
|
-
const { settings: _prev, ...rest } = currentPatch ?? {};
|
|
14455
|
+
const { enabled: _enabled, settings: _prev, ...rest } = currentPatch ?? {};
|
|
14298
14456
|
commitPatch(settings === void 0 ? rest : {
|
|
14299
14457
|
...rest,
|
|
14300
14458
|
settings
|
|
14301
14459
|
});
|
|
14302
14460
|
};
|
|
14303
|
-
const enabledTri = currentPatch?.enabled === void 0 ? "inherit" : currentPatch.enabled ? "on" : "off";
|
|
14304
14461
|
const modelOverridden = currentPatch?.modelId !== void 0;
|
|
14305
14462
|
return /* @__PURE__ */ jsxs("div", {
|
|
14306
14463
|
className: "space-y-4 text-xs",
|
|
14307
14464
|
children: [
|
|
14308
14465
|
/* @__PURE__ */ jsxs("div", {
|
|
14309
|
-
className: "
|
|
14310
|
-
children: [
|
|
14311
|
-
"
|
|
14312
|
-
"
|
|
14313
|
-
|
|
14314
|
-
|
|
14315
|
-
|
|
14316
|
-
|
|
14317
|
-
|
|
14318
|
-
children: s
|
|
14319
|
-
}, s)), /* @__PURE__ */ jsxs("span", {
|
|
14320
|
-
className: "ml-2 text-[10px] text-foreground-subtle",
|
|
14321
|
-
children: [
|
|
14322
|
-
"agent default:",
|
|
14323
|
-
" ",
|
|
14324
|
-
/* @__PURE__ */ jsx("span", {
|
|
14325
|
-
className: "font-semibold",
|
|
14326
|
-
children: agentDefault.enabled ? "on" : "off"
|
|
14327
|
-
})
|
|
14328
|
-
]
|
|
14329
|
-
})]
|
|
14466
|
+
className: "rounded bg-muted/40 px-3 py-2 text-[11px] text-foreground-subtle",
|
|
14467
|
+
children: [
|
|
14468
|
+
"Provisioning for ",
|
|
14469
|
+
/* @__PURE__ */ jsx("span", {
|
|
14470
|
+
className: "font-semibold text-foreground",
|
|
14471
|
+
children: agentNodeId
|
|
14472
|
+
}),
|
|
14473
|
+
" — model + settings only. Whether this camera runs the step is set by its per-camera gate above."
|
|
14474
|
+
]
|
|
14330
14475
|
}),
|
|
14331
14476
|
/* @__PURE__ */ jsxs("div", { children: [
|
|
14332
14477
|
/* @__PURE__ */ jsxs("div", {
|
|
@@ -14397,15 +14542,13 @@ function DeviceModeEditor({ addon, agentDefault, agentNodeId, currentPatch, mode
|
|
|
14397
14542
|
className: "rounded bg-muted/40 px-3 py-2 text-[11px] text-foreground-subtle",
|
|
14398
14543
|
children: [/* @__PURE__ */ jsx("div", {
|
|
14399
14544
|
className: "font-semibold text-foreground mb-0.5",
|
|
14400
|
-
children: "Effective
|
|
14545
|
+
children: "Effective provisioning preview"
|
|
14401
14546
|
}), /* @__PURE__ */ jsxs("div", {
|
|
14402
14547
|
className: "font-mono truncate",
|
|
14403
14548
|
children: [
|
|
14404
14549
|
addon.id,
|
|
14405
14550
|
" · model: ",
|
|
14406
|
-
effective.modelId
|
|
14407
|
-
" · ",
|
|
14408
|
-
effective.enabled ? "on" : "off"
|
|
14551
|
+
effective.modelId ?? "Auto"
|
|
14409
14552
|
]
|
|
14410
14553
|
})]
|
|
14411
14554
|
})
|
|
@@ -14430,19 +14573,6 @@ function AgentStepEditor(props) {
|
|
|
14430
14573
|
onChangePatch
|
|
14431
14574
|
});
|
|
14432
14575
|
}
|
|
14433
|
-
//#endregion
|
|
14434
|
-
//#region src/composites/pipeline-tree-matrix.tsx
|
|
14435
|
-
/**
|
|
14436
|
-
* Fixed column geometry (rem). The matrix uses a CSS grid with STATIC track
|
|
14437
|
-
* widths so a cell's content (a status chip, a long model id) can never resize
|
|
14438
|
-
* a column or shift its neighbours — cell content is truncated WITHIN the fixed
|
|
14439
|
-
* track instead. This kills the "table dances when the last column's status
|
|
14440
|
-
* changes" jitter. See `min-w-0` on every grid child, which lets the child
|
|
14441
|
-
* shrink to the track (a grid item's automatic minimum is its content size, so
|
|
14442
|
-
* without this a non-wrapping model id would blow the track wider than its max).
|
|
14443
|
-
*/
|
|
14444
|
-
var STEP_COL_REM = 18;
|
|
14445
|
-
var AGENT_COL_REM = 13;
|
|
14446
14576
|
function flattenTree(nodes) {
|
|
14447
14577
|
const out = [];
|
|
14448
14578
|
const walk = (list, depth) => {
|
|
@@ -14457,6 +14587,20 @@ function flattenTree(nodes) {
|
|
|
14457
14587
|
walk(nodes, 0);
|
|
14458
14588
|
return out;
|
|
14459
14589
|
}
|
|
14590
|
+
/**
|
|
14591
|
+
* Layout decision for the responsive A↔B switch. Pure so it can be unit-tested
|
|
14592
|
+
* in isolation from the DOM.
|
|
14593
|
+
*
|
|
14594
|
+
* Returns `true` (single-node fallback) when there is MORE than one node but
|
|
14595
|
+
* the container is too narrow to show the step column plus at least TWO node
|
|
14596
|
+
* columns side by side. An unmeasured container (`width <= 0`) defaults to the
|
|
14597
|
+
* wide matrix so there is no first-paint flash into the fallback.
|
|
14598
|
+
*/
|
|
14599
|
+
function shouldUseSingleNode(width, nodeCount, stepColPx, agentColPx = 208) {
|
|
14600
|
+
if (nodeCount <= 1) return false;
|
|
14601
|
+
if (width <= 0) return false;
|
|
14602
|
+
return width < stepColPx + agentColPx * 2;
|
|
14603
|
+
}
|
|
14460
14604
|
var SLOT_LABEL = {
|
|
14461
14605
|
detector: {
|
|
14462
14606
|
label: "detector",
|
|
@@ -14507,25 +14651,26 @@ function ClassChips({ inputs, outputs }) {
|
|
|
14507
14651
|
]
|
|
14508
14652
|
});
|
|
14509
14653
|
}
|
|
14510
|
-
|
|
14511
|
-
|
|
14512
|
-
|
|
14513
|
-
|
|
14514
|
-
"
|
|
14515
|
-
|
|
14516
|
-
|
|
14517
|
-
|
|
14518
|
-
|
|
14519
|
-
|
|
14520
|
-
|
|
14521
|
-
|
|
14522
|
-
|
|
14654
|
+
/** Step label (slot heading + addon name + class chips), shared by both views. */
|
|
14655
|
+
function StepLabel({ node }) {
|
|
14656
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14657
|
+
className: "flex flex-col gap-1 min-w-0 flex-1",
|
|
14658
|
+
children: [/* @__PURE__ */ jsx(SlotHeading, { slot: node.slot }), /* @__PURE__ */ jsxs("div", {
|
|
14659
|
+
className: "flex items-center gap-2 flex-wrap",
|
|
14660
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
14661
|
+
className: "font-semibold truncate",
|
|
14662
|
+
children: node.addonName
|
|
14663
|
+
}), /* @__PURE__ */ jsx(ClassChips, {
|
|
14664
|
+
inputs: node.inputClasses,
|
|
14665
|
+
outputs: node.outputClasses
|
|
14666
|
+
})]
|
|
14667
|
+
})]
|
|
14523
14668
|
});
|
|
14524
14669
|
}
|
|
14525
14670
|
/**
|
|
14526
|
-
* Cell content.
|
|
14527
|
-
*
|
|
14528
|
-
*
|
|
14671
|
+
* Cell content. Width-stable: the status dot is `shrink-0` (reserved space) and
|
|
14672
|
+
* the model id truncates inside a `min-w-0` flex row, so a longer model id never
|
|
14673
|
+
* widens the cell — it ellipsises instead.
|
|
14529
14674
|
*/
|
|
14530
14675
|
function renderCellContent(state) {
|
|
14531
14676
|
if (state.kind === "enabled") return /* @__PURE__ */ jsxs("span", {
|
|
@@ -14558,31 +14703,41 @@ function renderCellContent(state) {
|
|
|
14558
14703
|
})
|
|
14559
14704
|
]
|
|
14560
14705
|
});
|
|
14706
|
+
if (state.kind === "skip") return /* @__PURE__ */ jsxs("span", {
|
|
14707
|
+
className: "flex min-w-0 items-center gap-1 text-amber-500",
|
|
14708
|
+
title: "Gated on for this camera, but no compatible model on this node — click to provision",
|
|
14709
|
+
children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-amber-500 shrink-0" }), /* @__PURE__ */ jsx("span", {
|
|
14710
|
+
className: "truncate font-medium",
|
|
14711
|
+
children: "⚠ skip"
|
|
14712
|
+
})]
|
|
14713
|
+
});
|
|
14561
14714
|
return /* @__PURE__ */ jsxs("span", {
|
|
14562
14715
|
className: "flex min-w-0 items-center gap-1 text-foreground-subtle/70",
|
|
14563
14716
|
children: [/* @__PURE__ */ jsx("span", { className: "h-1.5 w-1.5 rounded-full bg-muted shrink-0" }), /* @__PURE__ */ jsx("span", {
|
|
14564
14717
|
className: "truncate",
|
|
14565
|
-
children: "
|
|
14718
|
+
children: "—"
|
|
14566
14719
|
})]
|
|
14567
14720
|
});
|
|
14568
14721
|
}
|
|
14569
14722
|
function cellButtonClass(state, isSelected, extra) {
|
|
14570
|
-
return cn("text-left text-xs hover:bg-muted/40", state.kind === "enabled" && "bg-emerald-500/5", state.kind === "na" && "bg-muted/30", isSelected && "ring-2 ring-primary ring-inset", extra);
|
|
14723
|
+
return cn("text-left text-xs hover:bg-muted/40", state.kind === "enabled" && "bg-emerald-500/5", state.kind === "skip" && "bg-amber-500/5", state.kind === "na" && "bg-muted/30", isSelected && "ring-2 ring-primary ring-inset", extra);
|
|
14571
14724
|
}
|
|
14572
|
-
|
|
14573
|
-
|
|
14574
|
-
|
|
14575
|
-
|
|
14576
|
-
|
|
14577
|
-
|
|
14578
|
-
|
|
14579
|
-
|
|
14580
|
-
|
|
14581
|
-
|
|
14582
|
-
|
|
14583
|
-
|
|
14584
|
-
|
|
14585
|
-
|
|
14725
|
+
//#endregion
|
|
14726
|
+
//#region src/composites/pipeline-tree-matrix.tsx
|
|
14727
|
+
var STEP_COL_REM$1 = 18;
|
|
14728
|
+
function QuickToggle({ enabled, onChange, disabled }) {
|
|
14729
|
+
return /* @__PURE__ */ jsx("button", {
|
|
14730
|
+
type: "button",
|
|
14731
|
+
role: "switch",
|
|
14732
|
+
"aria-checked": enabled,
|
|
14733
|
+
disabled,
|
|
14734
|
+
onClick: (e) => {
|
|
14735
|
+
e.stopPropagation();
|
|
14736
|
+
onChange(!enabled);
|
|
14737
|
+
},
|
|
14738
|
+
className: cn("relative inline-flex h-3.5 w-7 shrink-0 items-center rounded-full transition-colors", enabled ? "bg-emerald-500" : "bg-foreground-subtle/30", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
14739
|
+
title: enabled ? "Click to disable" : "Click to enable",
|
|
14740
|
+
children: /* @__PURE__ */ jsx("span", { className: cn("inline-block h-3 w-3 rounded-full bg-white shadow transition-transform", enabled ? "translate-x-3.5" : "translate-x-0.5") })
|
|
14586
14741
|
});
|
|
14587
14742
|
}
|
|
14588
14743
|
function GridRow({ node, depth, agents, getCellState, onCellClick, selectedCell, toggleProps }) {
|
|
@@ -14610,11 +14765,11 @@ function GridRow({ node, depth, agents, getCellState, onCellClick, selectedCell,
|
|
|
14610
14765
|
/**
|
|
14611
14766
|
* Wide layout: horizontally self-scrolling matrix. The scroll lives INSIDE
|
|
14612
14767
|
* this `overflow-auto` box (sticky first column + sticky header row) so the
|
|
14613
|
-
* page body never scrolls sideways. Column tracks are fixed px widths
|
|
14614
|
-
*
|
|
14768
|
+
* page body never scrolls sideways. Column tracks are fixed px widths so the
|
|
14769
|
+
* grid is static regardless of content.
|
|
14615
14770
|
*/
|
|
14616
|
-
function MatrixGrid({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
|
|
14617
|
-
const gridTemplate = `${STEP_COL_REM}rem repeat(${agents.length},
|
|
14771
|
+
function MatrixGrid$1({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
|
|
14772
|
+
const gridTemplate = `${STEP_COL_REM$1}rem repeat(${agents.length}, 13rem)`;
|
|
14618
14773
|
const showToggle = onToggleEnabled !== void 0 && agents.length === 1;
|
|
14619
14774
|
const onlyAgent = agents[0]?.agentNodeId;
|
|
14620
14775
|
return /* @__PURE__ */ jsx("div", {
|
|
@@ -14659,9 +14814,7 @@ function MatrixGrid({ rows, agents, getCellState, onCellClick, selectedCell, onT
|
|
|
14659
14814
|
}
|
|
14660
14815
|
/**
|
|
14661
14816
|
* Narrow layout: one card per agent column, each listing every step stacked
|
|
14662
|
-
* vertically.
|
|
14663
|
-
* (click-to-edit, status, toggle) reflow into full-width rows so nothing scrolls
|
|
14664
|
-
* horizontally. Feature-parity with the matrix — same `onCellClick`, same
|
|
14817
|
+
* vertically. Feature-parity with the matrix — same `onCellClick`, same
|
|
14665
14818
|
* `renderCellContent`, same single-agent `onToggleEnabled`.
|
|
14666
14819
|
*/
|
|
14667
14820
|
function StackedCards({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
|
|
@@ -14730,7 +14883,7 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
|
|
|
14730
14883
|
})
|
|
14731
14884
|
}), /* @__PURE__ */ jsx("div", {
|
|
14732
14885
|
className: "hidden @2xl/matrix:block",
|
|
14733
|
-
children: /* @__PURE__ */ jsx(MatrixGrid, {
|
|
14886
|
+
children: /* @__PURE__ */ jsx(MatrixGrid$1, {
|
|
14734
14887
|
rows,
|
|
14735
14888
|
agents,
|
|
14736
14889
|
getCellState,
|
|
@@ -14742,6 +14895,226 @@ function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedC
|
|
|
14742
14895
|
});
|
|
14743
14896
|
}
|
|
14744
14897
|
//#endregion
|
|
14898
|
+
//#region src/composites/device-step-matrix.tsx
|
|
14899
|
+
/**
|
|
14900
|
+
* DeviceStepMatrix — the per-camera "Detection pipeline → Steps" surface (#33)
|
|
14901
|
+
* rendered as ONE hierarchical steps×nodes matrix.
|
|
14902
|
+
*
|
|
14903
|
+
* Column 1 (STICKY): the indented step tree. Each step carries its slot +
|
|
14904
|
+
* name + class-flow chips PLUS a per-camera, node-independent GATE control
|
|
14905
|
+
* with THREE states — On / Off / Default (inherit). `package-detection` is
|
|
14906
|
+
* zone-driven, so it shows a "Zones" badge instead of a gate.
|
|
14907
|
+
* Columns 2..N (one per online node): the provisioned model chip (click →
|
|
14908
|
+
* the model/config picker), a clickable "⚠ skip" when the step is gated ON
|
|
14909
|
+
* but the node has no compatible model, or "—" when N/A.
|
|
14910
|
+
*
|
|
14911
|
+
* Responsive, container-measured (never a global media query, so it also works
|
|
14912
|
+
* embedded):
|
|
14913
|
+
* A) wide — sticky step column + node columns in an `overflow-x:auto` box, so
|
|
14914
|
+
* narrow viewports scroll the NODES sideways while col-1 stays pinned and
|
|
14915
|
+
* the page body never scrolls horizontally.
|
|
14916
|
+
* B) narrow — below the width needed for ≥2 node columns, collapse to a
|
|
14917
|
+
* single-node view: a node selector picks ONE node and the matrix renders
|
|
14918
|
+
* `step-tree × that-one-node`.
|
|
14919
|
+
*/
|
|
14920
|
+
/** Wider than the cluster matrix's 18rem: col-1 also hosts the gate control. */
|
|
14921
|
+
var STEP_COL_REM = 21;
|
|
14922
|
+
var STEP_COL_PX = STEP_COL_REM * 16;
|
|
14923
|
+
function activeChoice(gate) {
|
|
14924
|
+
if (!gate.explicit) return "default";
|
|
14925
|
+
return gate.effectiveOn ? "on" : "off";
|
|
14926
|
+
}
|
|
14927
|
+
/**
|
|
14928
|
+
* Tri-state segmented control. `Default` inherits the catalog value (shown in
|
|
14929
|
+
* the caption); `On`/`Off` pin an explicit per-camera override. Touch-friendly
|
|
14930
|
+
* 28px segments.
|
|
14931
|
+
*/
|
|
14932
|
+
function GateControl({ gate, busy, onSet }) {
|
|
14933
|
+
const active = activeChoice(gate);
|
|
14934
|
+
const seg = (choice, label, value, activeClass) => /* @__PURE__ */ jsx("button", {
|
|
14935
|
+
type: "button",
|
|
14936
|
+
"aria-pressed": active === choice,
|
|
14937
|
+
disabled: busy,
|
|
14938
|
+
onClick: () => onSet(value),
|
|
14939
|
+
className: cn("flex-1 px-2 py-1 text-[11px] font-medium leading-none transition-colors", "min-h-[26px]", active === choice ? activeClass : "text-foreground-subtle hover:bg-muted/60", busy && "opacity-50 cursor-not-allowed"),
|
|
14940
|
+
children: label
|
|
14941
|
+
});
|
|
14942
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14943
|
+
className: "flex flex-col gap-1",
|
|
14944
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
14945
|
+
className: "inline-flex w-fit max-w-full self-start overflow-hidden rounded-md border border-border",
|
|
14946
|
+
children: [
|
|
14947
|
+
seg("default", "Auto", null, "bg-primary/15 text-primary"),
|
|
14948
|
+
/* @__PURE__ */ jsx("span", { className: "w-px self-stretch bg-border" }),
|
|
14949
|
+
seg("on", "On", true, "bg-emerald-500 text-white"),
|
|
14950
|
+
/* @__PURE__ */ jsx("span", { className: "w-px self-stretch bg-border" }),
|
|
14951
|
+
seg("off", "Off", false, "bg-foreground-subtle/70 text-white")
|
|
14952
|
+
]
|
|
14953
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
14954
|
+
className: "text-[10px] leading-none text-foreground-subtle",
|
|
14955
|
+
children: active === "default" ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
14956
|
+
"= default (",
|
|
14957
|
+
gate.defaultOn ? "on" : "off",
|
|
14958
|
+
")"
|
|
14959
|
+
] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: ["overridden · default ", gate.defaultOn ? "on" : "off"] })
|
|
14960
|
+
})]
|
|
14961
|
+
});
|
|
14962
|
+
}
|
|
14963
|
+
function ZoneBadge() {
|
|
14964
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14965
|
+
className: "flex flex-col gap-1",
|
|
14966
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
14967
|
+
className: "inline-flex w-fit items-center gap-1 rounded-md border border-violet-500/40 bg-violet-500/10 px-2 py-1 text-[11px] font-medium text-violet-400",
|
|
14968
|
+
children: "Zones"
|
|
14969
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
14970
|
+
className: "text-[10px] leading-none text-foreground-subtle",
|
|
14971
|
+
children: "driven by package zones"
|
|
14972
|
+
})]
|
|
14973
|
+
});
|
|
14974
|
+
}
|
|
14975
|
+
function StepGateCell({ node, depth, gate, busy, onSet }) {
|
|
14976
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14977
|
+
className: "sticky left-0 z-10 flex flex-col gap-2 border-b border-border bg-surface px-3 py-2.5 text-xs min-w-0",
|
|
14978
|
+
style: { paddingLeft: `${12 + depth * 14}px` },
|
|
14979
|
+
children: [/* @__PURE__ */ jsx(StepLabel, { node }), gate.kind === "zone-driven" ? /* @__PURE__ */ jsx(ZoneBadge, {}) : /* @__PURE__ */ jsx(GateControl, {
|
|
14980
|
+
gate,
|
|
14981
|
+
busy,
|
|
14982
|
+
onSet
|
|
14983
|
+
})]
|
|
14984
|
+
});
|
|
14985
|
+
}
|
|
14986
|
+
/**
|
|
14987
|
+
* Agents-scoped node selector for the B fallback. Styled like the shared
|
|
14988
|
+
* `NodePicker` but driven by THIS matrix's `agents` set — the cluster-wide
|
|
14989
|
+
* NodePicker can list nodes (e.g. the hub) that own no pipeline column here,
|
|
14990
|
+
* which would let the operator select a node the matrix can't show.
|
|
14991
|
+
*/
|
|
14992
|
+
function NodeSelectorBar({ agents, selected, onSelect }) {
|
|
14993
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14994
|
+
className: "flex flex-wrap items-center gap-1.5",
|
|
14995
|
+
role: "tablist",
|
|
14996
|
+
"aria-label": "Node",
|
|
14997
|
+
children: [
|
|
14998
|
+
/* @__PURE__ */ jsx(Server, { className: "h-3.5 w-3.5 text-foreground-subtle" }),
|
|
14999
|
+
/* @__PURE__ */ jsx("span", {
|
|
15000
|
+
className: "text-[10px] uppercase tracking-wider text-foreground-subtle",
|
|
15001
|
+
children: "Node"
|
|
15002
|
+
}),
|
|
15003
|
+
/* @__PURE__ */ jsx("div", {
|
|
15004
|
+
className: "flex overflow-hidden rounded-md border border-border text-[11px] font-medium",
|
|
15005
|
+
children: agents.map((a, idx) => {
|
|
15006
|
+
const isSelected = a.agentNodeId === selected;
|
|
15007
|
+
return /* @__PURE__ */ jsx("button", {
|
|
15008
|
+
type: "button",
|
|
15009
|
+
role: "tab",
|
|
15010
|
+
"aria-selected": isSelected,
|
|
15011
|
+
onClick: () => onSelect(a.agentNodeId),
|
|
15012
|
+
title: `${a.agentNodeId} · ${a.engineLabel}`,
|
|
15013
|
+
className: cn("px-2.5 py-1 transition-colors", isSelected ? "bg-primary/15 text-primary" : "bg-transparent text-foreground-subtle hover:bg-surface-hover hover:text-foreground", idx > 0 && "border-l border-border"),
|
|
15014
|
+
children: a.agentNodeId
|
|
15015
|
+
}, a.agentNodeId);
|
|
15016
|
+
})
|
|
15017
|
+
})
|
|
15018
|
+
]
|
|
15019
|
+
});
|
|
15020
|
+
}
|
|
15021
|
+
function MatrixGrid({ tree, agents, gateFor, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, single }) {
|
|
15022
|
+
const rows = useMemo(() => flattenTree(tree), [tree]);
|
|
15023
|
+
const gridTemplate = single ? `minmax(0, 1.35fr) repeat(${agents.length}, minmax(0, 1fr))` : `${STEP_COL_REM}rem repeat(${agents.length}, 13rem)`;
|
|
15024
|
+
return /* @__PURE__ */ jsx("div", {
|
|
15025
|
+
className: cn("rounded border border-border", single ? "overflow-hidden" : "overflow-auto"),
|
|
15026
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
15027
|
+
className: cn("grid", single ? "w-full" : "w-max"),
|
|
15028
|
+
style: { gridTemplateColumns: gridTemplate },
|
|
15029
|
+
children: [
|
|
15030
|
+
/* @__PURE__ */ jsx("div", {
|
|
15031
|
+
className: "sticky left-0 top-0 z-20 border-b border-border bg-muted/60 px-3 py-2 text-[10px] uppercase tracking-widest text-foreground-subtle",
|
|
15032
|
+
children: "Step · gate"
|
|
15033
|
+
}),
|
|
15034
|
+
agents.map((a) => /* @__PURE__ */ jsxs("div", {
|
|
15035
|
+
className: "sticky top-0 z-10 min-w-0 border-b border-l border-border bg-muted/60 px-3 py-2",
|
|
15036
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
15037
|
+
className: "truncate text-xs font-semibold text-foreground",
|
|
15038
|
+
children: a.agentNodeId
|
|
15039
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
15040
|
+
className: "truncate text-[10px] text-foreground-subtle",
|
|
15041
|
+
children: a.engineLabel
|
|
15042
|
+
})]
|
|
15043
|
+
}, a.agentNodeId)),
|
|
15044
|
+
rows.map(({ node, depth }) => /* @__PURE__ */ jsx(MatrixRow, {
|
|
15045
|
+
node,
|
|
15046
|
+
depth,
|
|
15047
|
+
agents,
|
|
15048
|
+
gate: gateFor(node.addonId),
|
|
15049
|
+
getCellState,
|
|
15050
|
+
onCellClick,
|
|
15051
|
+
selectedCell,
|
|
15052
|
+
onSetGate,
|
|
15053
|
+
gateBusy
|
|
15054
|
+
}, node.addonId))
|
|
15055
|
+
]
|
|
15056
|
+
})
|
|
15057
|
+
});
|
|
15058
|
+
}
|
|
15059
|
+
function MatrixRow({ node, depth, agents, gate, getCellState, onCellClick, selectedCell, onSetGate, gateBusy }) {
|
|
15060
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(StepGateCell, {
|
|
15061
|
+
node,
|
|
15062
|
+
depth,
|
|
15063
|
+
gate,
|
|
15064
|
+
busy: gateBusy,
|
|
15065
|
+
onSet: (next) => onSetGate(node.addonId, next)
|
|
15066
|
+
}), agents.map((a) => {
|
|
15067
|
+
const state = getCellState(node.addonId, a.agentNodeId);
|
|
15068
|
+
const isSelected = selectedCell?.addonId === node.addonId && selectedCell.agentNodeId === a.agentNodeId;
|
|
15069
|
+
const actionable = state.kind === "enabled" || state.kind === "skip";
|
|
15070
|
+
return /* @__PURE__ */ jsx("button", {
|
|
15071
|
+
type: "button",
|
|
15072
|
+
disabled: !actionable,
|
|
15073
|
+
onClick: () => onCellClick(node.addonId, a.agentNodeId),
|
|
15074
|
+
className: cellButtonClass(state, isSelected, cn("min-w-0 overflow-hidden border-b border-l border-border px-3 py-2", !actionable && "cursor-default hover:bg-transparent")),
|
|
15075
|
+
children: renderCellContent(state)
|
|
15076
|
+
}, a.agentNodeId);
|
|
15077
|
+
})] });
|
|
15078
|
+
}
|
|
15079
|
+
function DeviceStepMatrix({ tree, agents, gateFor, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, fallbackNodeId, onFallbackNodeChange }) {
|
|
15080
|
+
const containerRef = useRef(null);
|
|
15081
|
+
const [width, setWidth] = useState(0);
|
|
15082
|
+
useLayoutEffect(() => {
|
|
15083
|
+
const el = containerRef.current;
|
|
15084
|
+
if (!el) return;
|
|
15085
|
+
const measure = () => setWidth(el.getBoundingClientRect().width);
|
|
15086
|
+
measure();
|
|
15087
|
+
const RO = typeof ResizeObserver !== "undefined" ? new ResizeObserver(measure) : null;
|
|
15088
|
+
RO?.observe(el);
|
|
15089
|
+
return () => RO?.disconnect();
|
|
15090
|
+
}, []);
|
|
15091
|
+
const single = shouldUseSingleNode(width, agents.length, STEP_COL_PX);
|
|
15092
|
+
const selectedNode = useMemo(() => {
|
|
15093
|
+
if (agents.length === 0) return null;
|
|
15094
|
+
return agents.find((a) => a.agentNodeId === fallbackNodeId) ?? agents[0];
|
|
15095
|
+
}, [agents, fallbackNodeId]);
|
|
15096
|
+
const shownAgents = single && selectedNode ? [selectedNode] : agents;
|
|
15097
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
15098
|
+
ref: containerRef,
|
|
15099
|
+
className: "w-full space-y-2",
|
|
15100
|
+
children: [single && selectedNode && /* @__PURE__ */ jsx(NodeSelectorBar, {
|
|
15101
|
+
agents,
|
|
15102
|
+
selected: selectedNode.agentNodeId,
|
|
15103
|
+
onSelect: onFallbackNodeChange
|
|
15104
|
+
}), /* @__PURE__ */ jsx(MatrixGrid, {
|
|
15105
|
+
tree,
|
|
15106
|
+
agents: shownAgents,
|
|
15107
|
+
gateFor,
|
|
15108
|
+
getCellState,
|
|
15109
|
+
onCellClick,
|
|
15110
|
+
selectedCell,
|
|
15111
|
+
onSetGate,
|
|
15112
|
+
gateBusy,
|
|
15113
|
+
single: single && selectedNode !== null
|
|
15114
|
+
})]
|
|
15115
|
+
});
|
|
15116
|
+
}
|
|
15117
|
+
//#endregion
|
|
14745
15118
|
//#region src/trpc-react.ts
|
|
14746
15119
|
/**
|
|
14747
15120
|
* Shared typed React Query proxy for the backend AppRouter.
|
|
@@ -17483,8 +17856,6 @@ var useAddonsListFrameworkPackages = trpc.addons.listFrameworkPackages.useQuery;
|
|
|
17483
17856
|
var useAddonsListCapabilityProviders = trpc.addons.listCapabilityProviders.useQuery;
|
|
17484
17857
|
/** Generated alias around `trpc.addons.setCapabilityProviderEnabled.useMutation`. */
|
|
17485
17858
|
var useAddonsSetCapabilityProviderEnabled = trpc.addons.setCapabilityProviderEnabled.useMutation;
|
|
17486
|
-
/** Generated alias around `trpc.addons.updateFrameworkPackage.useMutation`. */
|
|
17487
|
-
var useAddonsUpdateFrameworkPackage = trpc.addons.updateFrameworkPackage.useMutation;
|
|
17488
17859
|
/** Generated alias around `trpc.addons.getVersions.useQuery`. */
|
|
17489
17860
|
var useAddonsGetVersions = trpc.addons.getVersions.useQuery;
|
|
17490
17861
|
/** Generated alias around `trpc.addons.restartAddon.useMutation`. */
|
|
@@ -26331,131 +26702,117 @@ function ControlHeroCard({ trpc, deviceId, features, optimistic }) {
|
|
|
26331
26702
|
}
|
|
26332
26703
|
//#endregion
|
|
26333
26704
|
//#region src/composites/device-controls/control-registry.tsx
|
|
26334
|
-
var COVER_CONTROL = {
|
|
26335
|
-
InlineControl: CoverInlineControl,
|
|
26336
|
-
HeroCard: CoverHeroCard
|
|
26337
|
-
};
|
|
26338
|
-
var DUMMY_CONTROL = {
|
|
26339
|
-
InlineControl: DummyInline,
|
|
26340
|
-
HeroCard: DummyHeroCard
|
|
26341
|
-
};
|
|
26342
|
-
var SENSOR_CONTROL = {
|
|
26343
|
-
InlineControl: SensorInlineControl,
|
|
26344
|
-
HeroCard: SensorHeroCard
|
|
26345
|
-
};
|
|
26346
|
-
var UPDATE_CONTROL = {
|
|
26347
|
-
InlineControl: UpdateInlineControl,
|
|
26348
|
-
HeroCard: UpdateHeroCard
|
|
26349
|
-
};
|
|
26350
|
-
var SWITCH_CONTROL = {
|
|
26351
|
-
InlineControl: SwitchInlineControl,
|
|
26352
|
-
HeroCard: SwitchHeroCard
|
|
26353
|
-
};
|
|
26354
|
-
var LOCK_CONTROL = {
|
|
26355
|
-
InlineControl: LockInlineControl,
|
|
26356
|
-
HeroCard: LockHeroCard
|
|
26357
|
-
};
|
|
26358
|
-
var LIGHT_CONTROL = {
|
|
26359
|
-
InlineControl: LightInlineControl,
|
|
26360
|
-
HeroCard: LightHeroCard
|
|
26361
|
-
};
|
|
26362
|
-
var FAN_CONTROL = {
|
|
26363
|
-
InlineControl: FanInlineControl,
|
|
26364
|
-
HeroCard: FanHeroCard
|
|
26365
|
-
};
|
|
26366
|
-
var THERMOSTAT_CONTROL = {
|
|
26367
|
-
InlineControl: ThermostatInlineControl,
|
|
26368
|
-
HeroCard: ThermostatHeroCard
|
|
26369
|
-
};
|
|
26370
|
-
var CLIMATE_CONTROL = {
|
|
26371
|
-
InlineControl: AcInlineControl,
|
|
26372
|
-
HeroCard: AcHeroCard
|
|
26373
|
-
};
|
|
26374
|
-
var MEDIA_PLAYER_CONTROL = {
|
|
26375
|
-
InlineControl: MediaPlayerInlineControl,
|
|
26376
|
-
HeroCard: MediaPlayerHeroCard
|
|
26377
|
-
};
|
|
26378
|
-
var ALARM_PANEL_CONTROL = {
|
|
26379
|
-
InlineControl: AlarmInlineControl,
|
|
26380
|
-
HeroCard: AlarmHeroCard
|
|
26381
|
-
};
|
|
26382
|
-
var CONTROL_CONTROL = {
|
|
26383
|
-
InlineControl: ControlInlineControl,
|
|
26384
|
-
HeroCard: ControlHeroCard
|
|
26385
|
-
};
|
|
26386
|
-
var VACUUM_CONTROL = {
|
|
26387
|
-
InlineControl: VacuumInlineControl,
|
|
26388
|
-
HeroCard: VacuumHeroCard
|
|
26389
|
-
};
|
|
26390
|
-
var LAWN_MOWER_CONTROL = {
|
|
26391
|
-
InlineControl: LawnMowerInlineControl,
|
|
26392
|
-
HeroCard: LawnMowerHeroCard
|
|
26393
|
-
};
|
|
26394
|
-
var VALVE_CONTROL = {
|
|
26395
|
-
InlineControl: ValveInlineControl,
|
|
26396
|
-
HeroCard: ValveHeroCard
|
|
26397
|
-
};
|
|
26398
|
-
var HUMIDIFIER_CONTROL = {
|
|
26399
|
-
InlineControl: HumidifierInlineControl,
|
|
26400
|
-
HeroCard: HumidifierHeroCard
|
|
26401
|
-
};
|
|
26402
|
-
var WATER_HEATER_CONTROL = {
|
|
26403
|
-
InlineControl: WaterHeaterInlineControl,
|
|
26404
|
-
HeroCard: WaterHeaterHeroCard
|
|
26405
|
-
};
|
|
26406
|
-
var WEATHER_CONTROL = {
|
|
26407
|
-
InlineControl: WeatherInlineControl,
|
|
26408
|
-
HeroCard: WeatherHeroCard
|
|
26409
|
-
};
|
|
26410
|
-
var IMAGE_CONTROL = {
|
|
26411
|
-
InlineControl: ImageInlineControl,
|
|
26412
|
-
HeroCard: ImageHeroCard
|
|
26413
|
-
};
|
|
26414
|
-
var PET_FEEDER_CONTROL = {
|
|
26415
|
-
InlineControl: PetFeederInlineControl,
|
|
26416
|
-
HeroCard: PetFeederHeroCard
|
|
26417
|
-
};
|
|
26418
26705
|
/**
|
|
26419
|
-
*
|
|
26420
|
-
*
|
|
26421
|
-
|
|
26422
|
-
|
|
26423
|
-
|
|
26424
|
-
|
|
26425
|
-
|
|
26426
|
-
|
|
26427
|
-
|
|
26428
|
-
|
|
26429
|
-
|
|
26430
|
-
|
|
26431
|
-
|
|
26432
|
-
|
|
26433
|
-
|
|
26434
|
-
|
|
26435
|
-
|
|
26436
|
-
|
|
26706
|
+
* Presentation binding: the shared `DeviceControlKind` (decided in
|
|
26707
|
+
* `@camstack/types` `resolveDeviceControlKind`) → this platform's web
|
|
26708
|
+
* components. Exhaustive over `DeviceControlKind` — omitting a kind fails the
|
|
26709
|
+
* build here. The type→kind DECISION is single-sourced in `@camstack/types`;
|
|
26710
|
+
* this map only binds a kind to its web widgets.
|
|
26711
|
+
*/
|
|
26712
|
+
var CONTROL_KIND_COMPONENTS = {
|
|
26713
|
+
cover: {
|
|
26714
|
+
InlineControl: CoverInlineControl,
|
|
26715
|
+
HeroCard: CoverHeroCard
|
|
26716
|
+
},
|
|
26717
|
+
valve: {
|
|
26718
|
+
InlineControl: ValveInlineControl,
|
|
26719
|
+
HeroCard: ValveHeroCard
|
|
26720
|
+
},
|
|
26721
|
+
humidifier: {
|
|
26722
|
+
InlineControl: HumidifierInlineControl,
|
|
26723
|
+
HeroCard: HumidifierHeroCard
|
|
26724
|
+
},
|
|
26725
|
+
"water-heater": {
|
|
26726
|
+
InlineControl: WaterHeaterInlineControl,
|
|
26727
|
+
HeroCard: WaterHeaterHeroCard
|
|
26728
|
+
},
|
|
26729
|
+
switch: {
|
|
26730
|
+
InlineControl: SwitchInlineControl,
|
|
26731
|
+
HeroCard: SwitchHeroCard
|
|
26732
|
+
},
|
|
26733
|
+
light: {
|
|
26734
|
+
InlineControl: LightInlineControl,
|
|
26735
|
+
HeroCard: LightHeroCard
|
|
26736
|
+
},
|
|
26737
|
+
fan: {
|
|
26738
|
+
InlineControl: FanInlineControl,
|
|
26739
|
+
HeroCard: FanHeroCard
|
|
26740
|
+
},
|
|
26741
|
+
sensor: {
|
|
26742
|
+
InlineControl: SensorInlineControl,
|
|
26743
|
+
HeroCard: SensorHeroCard
|
|
26744
|
+
},
|
|
26745
|
+
thermostat: {
|
|
26746
|
+
InlineControl: ThermostatInlineControl,
|
|
26747
|
+
HeroCard: ThermostatHeroCard
|
|
26748
|
+
},
|
|
26749
|
+
climate: {
|
|
26750
|
+
InlineControl: AcInlineControl,
|
|
26751
|
+
HeroCard: AcHeroCard
|
|
26752
|
+
},
|
|
26753
|
+
button: {
|
|
26437
26754
|
InlineControl: ButtonControl,
|
|
26438
26755
|
HeroCard: ButtonHeroCard
|
|
26439
26756
|
},
|
|
26440
|
-
|
|
26441
|
-
|
|
26442
|
-
|
|
26443
|
-
|
|
26444
|
-
|
|
26445
|
-
|
|
26446
|
-
|
|
26447
|
-
|
|
26448
|
-
|
|
26449
|
-
|
|
26450
|
-
|
|
26451
|
-
|
|
26452
|
-
|
|
26453
|
-
|
|
26454
|
-
|
|
26455
|
-
|
|
26456
|
-
|
|
26757
|
+
update: {
|
|
26758
|
+
InlineControl: UpdateInlineControl,
|
|
26759
|
+
HeroCard: UpdateHeroCard
|
|
26760
|
+
},
|
|
26761
|
+
lock: {
|
|
26762
|
+
InlineControl: LockInlineControl,
|
|
26763
|
+
HeroCard: LockHeroCard
|
|
26764
|
+
},
|
|
26765
|
+
"media-player": {
|
|
26766
|
+
InlineControl: MediaPlayerInlineControl,
|
|
26767
|
+
HeroCard: MediaPlayerHeroCard
|
|
26768
|
+
},
|
|
26769
|
+
alarm: {
|
|
26770
|
+
InlineControl: AlarmInlineControl,
|
|
26771
|
+
HeroCard: AlarmHeroCard
|
|
26772
|
+
},
|
|
26773
|
+
control: {
|
|
26774
|
+
InlineControl: ControlInlineControl,
|
|
26775
|
+
HeroCard: ControlHeroCard
|
|
26776
|
+
},
|
|
26777
|
+
weather: {
|
|
26778
|
+
InlineControl: WeatherInlineControl,
|
|
26779
|
+
HeroCard: WeatherHeroCard
|
|
26780
|
+
},
|
|
26781
|
+
vacuum: {
|
|
26782
|
+
InlineControl: VacuumInlineControl,
|
|
26783
|
+
HeroCard: VacuumHeroCard
|
|
26784
|
+
},
|
|
26785
|
+
"lawn-mower": {
|
|
26786
|
+
InlineControl: LawnMowerInlineControl,
|
|
26787
|
+
HeroCard: LawnMowerHeroCard
|
|
26788
|
+
},
|
|
26789
|
+
image: {
|
|
26790
|
+
InlineControl: ImageInlineControl,
|
|
26791
|
+
HeroCard: ImageHeroCard
|
|
26792
|
+
},
|
|
26793
|
+
"pet-feeder": {
|
|
26794
|
+
InlineControl: PetFeederInlineControl,
|
|
26795
|
+
HeroCard: PetFeederHeroCard
|
|
26796
|
+
},
|
|
26797
|
+
dummy: {
|
|
26798
|
+
InlineControl: DummyInline,
|
|
26799
|
+
HeroCard: DummyHeroCard
|
|
26800
|
+
}
|
|
26457
26801
|
};
|
|
26458
26802
|
/**
|
|
26803
|
+
* Exhaustive record over DeviceType, DERIVED from the shared decision
|
|
26804
|
+
* (`DEVICE_TYPE_CONTROL_KIND`) composed with the web `CONTROL_KIND_COMPONENTS`
|
|
26805
|
+
* binding — so the type→control mapping can never diverge from the single
|
|
26806
|
+
* source in `@camstack/types`. Preserved as a public export for consumers/tests
|
|
26807
|
+
* that index it by `DeviceType`.
|
|
26808
|
+
*
|
|
26809
|
+
* The `Object.fromEntries` result is a `{ [k: string]: DeviceTypeControl }`;
|
|
26810
|
+
* `Object.values(DeviceType)` (a string enum) yields exactly the enum's members,
|
|
26811
|
+
* so the record is fully populated — the assertion narrows that documented
|
|
26812
|
+
* enum-record projection boundary.
|
|
26813
|
+
*/
|
|
26814
|
+
var DEVICE_TYPE_CONTROL = Object.fromEntries(Object.values(DeviceType).map((type) => [type, CONTROL_KIND_COMPONENTS[DEVICE_TYPE_CONTROL_KIND[type]]]));
|
|
26815
|
+
/**
|
|
26459
26816
|
* Per-type FILL flag.
|
|
26460
26817
|
*
|
|
26461
26818
|
* true — range / choice / button controls (cover ▲■▼ triad, thermostat
|
|
@@ -26509,12 +26866,14 @@ var CONTROL_FILLS = {
|
|
|
26509
26866
|
};
|
|
26510
26867
|
var DEVICE_TYPE_VALUES$1 = new Set(Object.values(DeviceType));
|
|
26511
26868
|
/**
|
|
26512
|
-
* Runtime-string-safe lookup: a device row's `type` crosses the wire
|
|
26513
|
-
*
|
|
26514
|
-
*
|
|
26869
|
+
* Runtime-string-safe lookup: a device row's `type` crosses the wire as a plain
|
|
26870
|
+
* string. The type→control-kind DECISION is single-sourced in `@camstack/types`
|
|
26871
|
+
* (`resolveDeviceControlKind`, null for an unrecognised type); this maps the
|
|
26872
|
+
* resolved kind onto the web components.
|
|
26515
26873
|
*/
|
|
26516
26874
|
function resolveDeviceControl(type) {
|
|
26517
|
-
|
|
26875
|
+
const kind = resolveDeviceControlKind(type);
|
|
26876
|
+
return kind ? CONTROL_KIND_COMPONENTS[kind] : null;
|
|
26518
26877
|
}
|
|
26519
26878
|
/**
|
|
26520
26879
|
* Runtime-string-safe alignment lookup for the fixed-width control column.
|
|
@@ -31286,12 +31645,30 @@ var EVENT_KIND_ICONS = {
|
|
|
31286
31645
|
doorbell: BellRing,
|
|
31287
31646
|
button: CircleDot,
|
|
31288
31647
|
"audio-speech": MessageSquare,
|
|
31648
|
+
"audio-scream": Megaphone,
|
|
31649
|
+
"audio-crying": Baby,
|
|
31650
|
+
"audio-laughter": Laugh,
|
|
31289
31651
|
"audio-music": Music,
|
|
31290
31652
|
"audio-dog": Dog,
|
|
31653
|
+
"audio-cat": Cat,
|
|
31654
|
+
"audio-bird": Bird,
|
|
31655
|
+
"audio-animal": PawPrint,
|
|
31656
|
+
"audio-alarm": BellRing,
|
|
31291
31657
|
"audio-doorbell": BellRing,
|
|
31292
|
-
"audio-siren": Siren,
|
|
31293
31658
|
"audio-glass_breaking": TriangleAlert,
|
|
31294
|
-
"audio-
|
|
31659
|
+
"audio-gunshot": Crosshair,
|
|
31660
|
+
"audio-vehicle": Car,
|
|
31661
|
+
"audio-siren": Siren,
|
|
31662
|
+
"audio-fire": Flame,
|
|
31663
|
+
"audio-water": Droplets,
|
|
31664
|
+
"audio-wind": Wind,
|
|
31665
|
+
"audio-door": DoorOpen,
|
|
31666
|
+
"audio-footsteps": Footprints,
|
|
31667
|
+
"audio-crowd": Users,
|
|
31668
|
+
"audio-telephone": Phone,
|
|
31669
|
+
"audio-engine": Cog,
|
|
31670
|
+
"audio-tools": Hammer,
|
|
31671
|
+
"audio-silence": VolumeX
|
|
31295
31672
|
};
|
|
31296
31673
|
/** Resolve an `iconId` to a lucide component (falls back to `Tag`). */
|
|
31297
31674
|
function resolveEventKindIcon(iconId) {
|
|
@@ -39759,6 +40136,7 @@ function computeClientHints(container) {
|
|
|
39759
40136
|
var RECONNECT_BASE_DELAY_MS = 1500;
|
|
39760
40137
|
var RECONNECT_MAX_DELAY_MS = 15e3;
|
|
39761
40138
|
var MAX_RECONNECT_ATTEMPTS = 40;
|
|
40139
|
+
var FIRST_FRAME_TIMEOUT_MS = 8e3;
|
|
39762
40140
|
function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, muted: initialMuted = true, showControls = true, showStats = false, onPlaybackStats, onClientNetworkSample, onConnectTiming, className = "", onStateChange, onError, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel }) {
|
|
39763
40141
|
const videoRef = useRef(null);
|
|
39764
40142
|
const containerRef = useRef(null);
|
|
@@ -40135,14 +40513,26 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40135
40513
|
});
|
|
40136
40514
|
onConnectTiming?.({ ...timing });
|
|
40137
40515
|
const v = videoRef.current;
|
|
40138
|
-
if (v && "requestVideoFrameCallback" in v)
|
|
40139
|
-
|
|
40140
|
-
|
|
40141
|
-
|
|
40142
|
-
|
|
40516
|
+
if (v && "requestVideoFrameCallback" in v) {
|
|
40517
|
+
v.requestVideoFrameCallback(() => {
|
|
40518
|
+
timing.firstFrameMs = ms();
|
|
40519
|
+
console.info("[WebRTC timing] first decoded frame", {
|
|
40520
|
+
streamKey,
|
|
40521
|
+
firstFrameMs: timing.firstFrameMs
|
|
40522
|
+
});
|
|
40523
|
+
onConnectTiming?.({ ...timing });
|
|
40143
40524
|
});
|
|
40144
|
-
|
|
40145
|
-
|
|
40525
|
+
setTimeout(() => {
|
|
40526
|
+
if (!mountedRef.current) return;
|
|
40527
|
+
if (timing.firstFrameMs !== void 0) return;
|
|
40528
|
+
console.warn("[WebRTC timing] NO decoded frame (stalled)", {
|
|
40529
|
+
streamKey,
|
|
40530
|
+
sinceIceConnectedMs: ms() - (timing.iceConnectedMs ?? 0),
|
|
40531
|
+
iceConnectedMs: timing.iceConnectedMs,
|
|
40532
|
+
firstTrackMs: timing.firstTrackMs
|
|
40533
|
+
});
|
|
40534
|
+
}, FIRST_FRAME_TIMEOUT_MS);
|
|
40535
|
+
}
|
|
40146
40536
|
}
|
|
40147
40537
|
reconnectAttemptsRef.current = 0;
|
|
40148
40538
|
if (seamless) swapInOnce();
|
|
@@ -40175,8 +40565,12 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40175
40565
|
await pc.setLocalDescription(offer);
|
|
40176
40566
|
timing.localSetMs = ms();
|
|
40177
40567
|
if (!mountedRef.current || abort.signal.aborted) return;
|
|
40568
|
+
const clientOfferHints = {
|
|
40569
|
+
...computeClientHints(containerRef.current),
|
|
40570
|
+
...hintsOverride
|
|
40571
|
+
};
|
|
40178
40572
|
const signalingStart = ms();
|
|
40179
|
-
const { sessionId: sid, sdpAnswer } = await handleOffer(pc.localDescription?.sdp ?? offer.sdp ?? "");
|
|
40573
|
+
const { sessionId: sid, sdpAnswer } = await handleOffer(pc.localDescription?.sdp ?? offer.sdp ?? "", void 0, clientOfferHints);
|
|
40180
40574
|
timing.signalingRttMs = ms() - signalingStart;
|
|
40181
40575
|
sessionId = sid;
|
|
40182
40576
|
sessionIdsRef.current.add(sid);
|
|
@@ -40237,7 +40631,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40237
40631
|
partialReconnectReset,
|
|
40238
40632
|
updateState,
|
|
40239
40633
|
onError,
|
|
40240
|
-
startSessionStatePoll
|
|
40634
|
+
startSessionStatePoll,
|
|
40635
|
+
hintsOverride
|
|
40241
40636
|
]);
|
|
40242
40637
|
renegotiateRef.current = useCallback(async (sessionId, target) => {
|
|
40243
40638
|
const reofferFn = reoffer;
|
|
@@ -40250,8 +40645,30 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40250
40645
|
const pc = new RTCPeerConnection({ iceServers: [...iceServers ?? [], { urls: "stun:stun.l.google.com:19302" }] });
|
|
40251
40646
|
const newStream = new MediaStream();
|
|
40252
40647
|
let swappedIn = false;
|
|
40253
|
-
|
|
40254
|
-
|
|
40648
|
+
let warmupStarted = false;
|
|
40649
|
+
let warmupVideo = null;
|
|
40650
|
+
let warmupRvfc;
|
|
40651
|
+
let warmupSafety;
|
|
40652
|
+
const teardownWarmup = () => {
|
|
40653
|
+
if (warmupSafety !== void 0) {
|
|
40654
|
+
clearTimeout(warmupSafety);
|
|
40655
|
+
warmupSafety = void 0;
|
|
40656
|
+
}
|
|
40657
|
+
const v = warmupVideo;
|
|
40658
|
+
warmupVideo = null;
|
|
40659
|
+
if (!v) return;
|
|
40660
|
+
if (warmupRvfc !== void 0 && typeof v.cancelVideoFrameCallback === "function") v.cancelVideoFrameCallback(warmupRvfc);
|
|
40661
|
+
v.removeEventListener("loadeddata", commitSwap);
|
|
40662
|
+
try {
|
|
40663
|
+
v.srcObject = null;
|
|
40664
|
+
} catch {}
|
|
40665
|
+
v.remove();
|
|
40666
|
+
};
|
|
40667
|
+
function commitSwap() {
|
|
40668
|
+
if (swappedIn || !mountedRef.current) {
|
|
40669
|
+
teardownWarmup();
|
|
40670
|
+
return;
|
|
40671
|
+
}
|
|
40255
40672
|
swappedIn = true;
|
|
40256
40673
|
pcRef.current = pc;
|
|
40257
40674
|
if (videoRef.current) {
|
|
@@ -40259,11 +40676,32 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40259
40676
|
videoRef.current.play().catch(() => {});
|
|
40260
40677
|
}
|
|
40261
40678
|
if (oldPc && oldPc !== pc) oldPc.close();
|
|
40679
|
+
teardownWarmup();
|
|
40680
|
+
}
|
|
40681
|
+
const armSwap = () => {
|
|
40682
|
+
if (warmupStarted || swappedIn || !mountedRef.current) return;
|
|
40683
|
+
warmupStarted = true;
|
|
40684
|
+
if (typeof document === "undefined") {
|
|
40685
|
+
commitSwap();
|
|
40686
|
+
return;
|
|
40687
|
+
}
|
|
40688
|
+
const v = document.createElement("video");
|
|
40689
|
+
v.muted = true;
|
|
40690
|
+
v.playsInline = true;
|
|
40691
|
+
v.autoplay = true;
|
|
40692
|
+
v.style.cssText = "position:absolute;left:-9999px;top:0;width:1px;height:1px;opacity:0;pointer-events:none;";
|
|
40693
|
+
v.srcObject = newStream;
|
|
40694
|
+
warmupVideo = v;
|
|
40695
|
+
(containerRef.current ?? document.body).appendChild(v);
|
|
40696
|
+
v.play().catch(() => {});
|
|
40697
|
+
if (typeof v.requestVideoFrameCallback === "function") warmupRvfc = v.requestVideoFrameCallback(() => commitSwap());
|
|
40698
|
+
v.addEventListener("loadeddata", commitSwap, { once: true });
|
|
40699
|
+
warmupSafety = setTimeout(() => commitSwap(), 1800);
|
|
40262
40700
|
};
|
|
40263
40701
|
pc.ontrack = (event) => {
|
|
40264
40702
|
console.debug("[WebRTC] ontrack (reoffer)", event.track.kind, event.track.readyState);
|
|
40265
40703
|
newStream.addTrack(event.track);
|
|
40266
|
-
|
|
40704
|
+
armSwap();
|
|
40267
40705
|
};
|
|
40268
40706
|
pc.oniceconnectionstatechange = () => {
|
|
40269
40707
|
if (!mountedRef.current) return;
|
|
@@ -40271,10 +40709,11 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40271
40709
|
console.debug("[WebRTC] ICE state (reoffer):", iceState);
|
|
40272
40710
|
if (iceState === "connected" || iceState === "completed") {
|
|
40273
40711
|
reconnectAttemptsRef.current = 0;
|
|
40274
|
-
|
|
40712
|
+
armSwap();
|
|
40275
40713
|
updateState("playing");
|
|
40276
40714
|
if (videoRef.current?.paused) videoRef.current.play().catch(() => {});
|
|
40277
40715
|
} else if (iceState === "failed" || iceState === "closed") {
|
|
40716
|
+
teardownWarmup();
|
|
40278
40717
|
if (!swappedIn && iceState === "failed") pc.close();
|
|
40279
40718
|
updateState("disconnected");
|
|
40280
40719
|
scheduleReconnect();
|
|
@@ -40300,7 +40739,11 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40300
40739
|
pc.close();
|
|
40301
40740
|
return;
|
|
40302
40741
|
}
|
|
40303
|
-
const
|
|
40742
|
+
const reofferHints = {
|
|
40743
|
+
...computeClientHints(containerRef.current),
|
|
40744
|
+
...hintsOverride
|
|
40745
|
+
};
|
|
40746
|
+
const { sessionId: sid, sdpAnswer } = await reofferFn(sessionId, pc.localDescription?.sdp ?? offer.sdp ?? "", target, reofferHints);
|
|
40304
40747
|
if (!mountedRef.current) {
|
|
40305
40748
|
pc.close();
|
|
40306
40749
|
return;
|
|
@@ -40351,7 +40794,8 @@ function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay = true, mute
|
|
|
40351
40794
|
addIceCandidate,
|
|
40352
40795
|
getIceCandidates,
|
|
40353
40796
|
updateState,
|
|
40354
|
-
startSessionStatePoll
|
|
40797
|
+
startSessionStatePoll,
|
|
40798
|
+
hintsOverride
|
|
40355
40799
|
]);
|
|
40356
40800
|
const connect = useClientOffer ? connectClientOffer : useServerOffer ? connectServerOffer : connectWhep;
|
|
40357
40801
|
const connectRef = useRef(() => {});
|
|
@@ -44347,6 +44791,33 @@ function buildRawTree(data, fetchedAt) {
|
|
|
44347
44791
|
* State). Computed once at module load.
|
|
44348
44792
|
*/
|
|
44349
44793
|
var ALL_DEVICE_CAP_NAMES = Object.freeze([...new Set(ALL_CAPABILITY_DEFINITIONS.filter((c) => c.scope === "device").map((c) => c.name))].toSorted());
|
|
44794
|
+
/**
|
|
44795
|
+
* The keys of a cap's `runtimeState` object schema, or `[]` when the cap
|
|
44796
|
+
* declares none / it is not an object schema. Read structurally (no Zod
|
|
44797
|
+
* import, no cast) so a self-contained addon's schema instance still works
|
|
44798
|
+
* across the bundle boundary — `ZodObject.shape` is a public getter.
|
|
44799
|
+
*/
|
|
44800
|
+
function runtimeStateKeys(capName) {
|
|
44801
|
+
const rs = ALL_CAPABILITY_DEFINITIONS.find((c) => c.name === capName)?.runtimeState;
|
|
44802
|
+
if (!rs || typeof rs !== "object") return [];
|
|
44803
|
+
const shape = Reflect.get(rs, "shape");
|
|
44804
|
+
if (!shape || typeof shape !== "object") return [];
|
|
44805
|
+
return Object.keys(shape);
|
|
44806
|
+
}
|
|
44807
|
+
/**
|
|
44808
|
+
* Cold placeholder slice for a bound cap that declares `runtimeState` but
|
|
44809
|
+
* has never written it (e.g. a virtual-doorbell camera that has never rung).
|
|
44810
|
+
* Every declared field is seeded `null` so the tree surfaces the cap's
|
|
44811
|
+
* presence and reads as "never" instead of the cap being OMITTED entirely.
|
|
44812
|
+
* Returns `null` when the cap has no runtime-state schema (nothing to seed).
|
|
44813
|
+
*/
|
|
44814
|
+
function coldRuntimeStateSlice(capName) {
|
|
44815
|
+
const keys = runtimeStateKeys(capName);
|
|
44816
|
+
if (keys.length === 0) return null;
|
|
44817
|
+
const slice = {};
|
|
44818
|
+
for (const key of keys) slice[key] = null;
|
|
44819
|
+
return slice;
|
|
44820
|
+
}
|
|
44350
44821
|
/** Depth at which tree nodes start collapsed. Cap nodes (depth 0) and
|
|
44351
44822
|
* their direct slice keys (depth 1) render expanded; anything nested
|
|
44352
44823
|
* deeper opens on demand. */
|
|
@@ -44393,6 +44864,27 @@ function StateValuesStream({ deviceId, defaultCaps, maxHeight = "max-h-96", onCl
|
|
|
44393
44864
|
useEffect(() => {
|
|
44394
44865
|
seededRef.current = false;
|
|
44395
44866
|
}, [deviceId]);
|
|
44867
|
+
const { data: bindings } = trpc.deviceManager.getBindings.useQuery({ deviceId }, { staleTime: 3e4 });
|
|
44868
|
+
useEffect(() => {
|
|
44869
|
+
const entries = bindings?.entries;
|
|
44870
|
+
if (!entries || entries.length === 0) return;
|
|
44871
|
+
const now = Date.now();
|
|
44872
|
+
setCapStates((prev) => {
|
|
44873
|
+
let mutated = false;
|
|
44874
|
+
const next = new Map(prev);
|
|
44875
|
+
for (const entry of entries) {
|
|
44876
|
+
if (next.has(entry.capName)) continue;
|
|
44877
|
+
const slice = coldRuntimeStateSlice(entry.capName);
|
|
44878
|
+
if (!slice) continue;
|
|
44879
|
+
next.set(entry.capName, {
|
|
44880
|
+
slice,
|
|
44881
|
+
updatedAt: now
|
|
44882
|
+
});
|
|
44883
|
+
mutated = true;
|
|
44884
|
+
}
|
|
44885
|
+
return mutated ? next : prev;
|
|
44886
|
+
});
|
|
44887
|
+
}, [bindings, deviceId]);
|
|
44396
44888
|
const patchCapState = useCallback((capName, slice) => {
|
|
44397
44889
|
setCapStates((prev) => {
|
|
44398
44890
|
const next = new Map(prev);
|
|
@@ -46064,13 +46556,14 @@ function useDeviceWebrtc(trpc, deviceId, pollIntervalMs = 5e3) {
|
|
|
46064
46556
|
deviceId,
|
|
46065
46557
|
getIceServers
|
|
46066
46558
|
]);
|
|
46067
|
-
const handleOffer = useCallback(async (target, sdpOffer, sessionId) => {
|
|
46559
|
+
const handleOffer = useCallback(async (target, sdpOffer, sessionId, hints) => {
|
|
46068
46560
|
if (deviceId === null) throw new Error("No device selected");
|
|
46069
46561
|
return trpc.webrtcSession.handleOffer.mutate({
|
|
46070
46562
|
deviceId,
|
|
46071
46563
|
target,
|
|
46072
46564
|
sdpOffer,
|
|
46073
|
-
...sessionId !== void 0 ? { sessionId } : {}
|
|
46565
|
+
...sessionId !== void 0 ? { sessionId } : {},
|
|
46566
|
+
...hints !== void 0 ? { hints } : {}
|
|
46074
46567
|
});
|
|
46075
46568
|
}, [trpc, deviceId]);
|
|
46076
46569
|
const sendAnswer = useCallback(async (sessionId, sdpAnswer) => {
|
|
@@ -46414,4 +46907,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
|
|
|
46414
46907
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
46415
46908
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
46416
46909
|
//#endregion
|
|
46417
|
-
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdateFrameworkPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|
|
46910
|
+
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, scrubReducer, selectedDeviceOptions, serializeRecordedCommand, shouldCommit, shouldEmit, shouldUseSingleNode, sortRows, statusIcons, stripParentNamePrefix, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyDeviceSettingsPatch, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveContribution, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceSettingsContribution, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetLinkedDevices, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellApplyDeviceSettingsPatch, useDoorbellEvents, useDoorbellGetDeviceLiveContribution, useDoorbellGetDeviceSettingsContribution, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsWipeAllAnalytics, usePipelineExecutorCacheFrameInPool, usePipelineExecutorClearDeviceOverrides, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, useRecordingDeleteFootprint, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingListOpsLog, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorRecheckNow, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
|