@camstack/ui-library 1.1.45 → 1.1.76
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/device-item/status-dot.d.ts +2 -1
- package/dist/composites/device-step-matrix.d.ts +13 -9
- package/dist/composites/index.d.ts +4 -1
- package/dist/composites/model-picker.d.ts +25 -0
- package/dist/composites/pipeline-matrix-shared.d.ts +64 -0
- package/dist/composites/pipeline-tree-matrix.d.ts +5 -8
- package/dist/generated/system-hooks.d.ts +6 -4
- package/dist/index.cjs +409 -286
- package/dist/index.js +404 -285
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -3751,7 +3751,6 @@ function mirror(input) {
|
|
|
3751
3751
|
}
|
|
3752
3752
|
}
|
|
3753
3753
|
const patch = {
|
|
3754
|
-
enabled: srcCfg.enabled,
|
|
3755
3754
|
...chosenModelId ? { modelId: chosenModelId } : {},
|
|
3756
3755
|
settings: dropModelSpecific(srcCfg.settings, targetAddon)
|
|
3757
3756
|
};
|
|
@@ -13850,6 +13849,228 @@ function buildStepTreeFromSchema(schema) {
|
|
|
13850
13849
|
return [...roots, ...audioRoots];
|
|
13851
13850
|
}
|
|
13852
13851
|
//#endregion
|
|
13852
|
+
//#region src/composites/grouped-model-selector.tsx
|
|
13853
|
+
/**
|
|
13854
|
+
* GroupedModelSelector — the shared Family → Tier → Variant model picker.
|
|
13855
|
+
*
|
|
13856
|
+
* The catalog is a FLAT list of models (ids like `yolo26s`, `yolo26s-int8`);
|
|
13857
|
+
* this folds it into a `family → tier → variant` tree (see
|
|
13858
|
+
* `buildModelVariantGroups` in `@camstack/types`) so the operator picks
|
|
13859
|
+
* "YOLO26 → Small → Int8" instead of scanning a flat dropdown of every
|
|
13860
|
+
* size×quantization. The selected value stays the flat model id.
|
|
13861
|
+
*
|
|
13862
|
+
* Parameterised on the minimal `ModelVariantSource` shape so BOTH the config-UI
|
|
13863
|
+
* catalog (`ModelCatalogEntry`) and the pipeline/device steppers
|
|
13864
|
+
* (`PipelineModelOption`) drive the same component. Legacy / ungrouped models
|
|
13865
|
+
* never appear here (the grouping helpers skip them).
|
|
13866
|
+
*/
|
|
13867
|
+
function Chip({ active, onClick, disabled, children, title }) {
|
|
13868
|
+
return /* @__PURE__ */ jsx("button", {
|
|
13869
|
+
type: "button",
|
|
13870
|
+
onClick,
|
|
13871
|
+
disabled,
|
|
13872
|
+
title,
|
|
13873
|
+
className: cn("rounded-full px-3 py-1 text-[11px] font-medium border transition-colors", active ? "border-primary bg-primary/10 text-primary" : "border-border bg-background text-foreground-subtle hover:text-foreground hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
13874
|
+
children
|
|
13875
|
+
});
|
|
13876
|
+
}
|
|
13877
|
+
function GroupedModelSelector({ catalog, value, onChange, disabled }) {
|
|
13878
|
+
const families = buildModelVariantGroups(catalog);
|
|
13879
|
+
const current = describeModelVariant(catalog, value);
|
|
13880
|
+
const activeFamily = families.find((f) => f.family === current?.family)?.family ?? families[0]?.family ?? "";
|
|
13881
|
+
const family = families.find((f) => f.family === activeFamily) ?? families[0];
|
|
13882
|
+
if (!family) return null;
|
|
13883
|
+
const activeTier = family.tiers.find((t) => t.tier === current?.tier)?.tier ?? family.tiers[0]?.tier ?? "";
|
|
13884
|
+
const tier = family.tiers.find((t) => t.tier === activeTier) ?? family.tiers[0];
|
|
13885
|
+
if (!tier) return null;
|
|
13886
|
+
const resolutions = [...new Set(tier.options.map((o) => o.resolution))].sort((a, b) => (b ?? Infinity) - (a ?? Infinity));
|
|
13887
|
+
const selectedResolution = resolutions.includes(current?.resolution) ? current?.resolution : resolutions[0];
|
|
13888
|
+
const variantOptions = tier.options.filter((o) => o.resolution === selectedResolution);
|
|
13889
|
+
const resLabel = (r) => r === void 0 ? "640 · native" : `${r}`;
|
|
13890
|
+
const selectTier = (tierId) => {
|
|
13891
|
+
const t = family.tiers.find((x) => x.tier === tierId);
|
|
13892
|
+
if (!t) return;
|
|
13893
|
+
onChange((t.options.find((o) => o.precision === (current?.precision ?? "fp32") && o.optimization === (current?.optimization ?? "standard") && o.resolution === current?.resolution) ?? t.options[0]).modelId);
|
|
13894
|
+
};
|
|
13895
|
+
const selectResolution = (resolution) => {
|
|
13896
|
+
const opts = tier.options.filter((o) => o.resolution === resolution);
|
|
13897
|
+
const pick = opts.find((o) => o.precision === (current?.precision ?? "fp32") && o.optimization === (current?.optimization ?? "standard")) ?? opts[0];
|
|
13898
|
+
if (pick) onChange(pick.modelId);
|
|
13899
|
+
};
|
|
13900
|
+
const selectVariant = (opt) => {
|
|
13901
|
+
const id = resolveVariantModelId(catalog, {
|
|
13902
|
+
family: family.family,
|
|
13903
|
+
tier: tier.tier,
|
|
13904
|
+
precision: opt.precision,
|
|
13905
|
+
optimization: opt.optimization,
|
|
13906
|
+
resolution: opt.resolution
|
|
13907
|
+
});
|
|
13908
|
+
if (id) onChange(id);
|
|
13909
|
+
};
|
|
13910
|
+
const selectedOption = tier.options.find((o) => o.modelId === value) ?? null;
|
|
13911
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
13912
|
+
className: "space-y-3",
|
|
13913
|
+
children: [
|
|
13914
|
+
families.length > 1 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
13915
|
+
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
13916
|
+
children: "Family"
|
|
13917
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
13918
|
+
className: "flex flex-wrap gap-1.5",
|
|
13919
|
+
children: families.map((f) => /* @__PURE__ */ jsx(Chip, {
|
|
13920
|
+
active: f.family === family.family,
|
|
13921
|
+
disabled,
|
|
13922
|
+
onClick: () => onChange(f.tiers[0]?.baseModelId ?? ""),
|
|
13923
|
+
children: f.label
|
|
13924
|
+
}, f.family))
|
|
13925
|
+
})] }),
|
|
13926
|
+
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("p", {
|
|
13927
|
+
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
13928
|
+
children: [family.label, " — size"]
|
|
13929
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
13930
|
+
className: "grid grid-cols-2 gap-1.5 sm:grid-cols-4",
|
|
13931
|
+
children: family.tiers.map((t) => {
|
|
13932
|
+
const active = t.tier === tier.tier;
|
|
13933
|
+
const base = t.options.find((o) => o.modelId === t.baseModelId) ?? t.options[0];
|
|
13934
|
+
return /* @__PURE__ */ jsxs("button", {
|
|
13935
|
+
type: "button",
|
|
13936
|
+
disabled,
|
|
13937
|
+
onClick: () => selectTier(t.tier),
|
|
13938
|
+
className: cn("rounded-lg border px-2 py-2 text-left transition-all", active ? "border-primary bg-primary/5 ring-1 ring-primary/30" : "border-border bg-background hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
13939
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
13940
|
+
className: "flex items-center gap-1",
|
|
13941
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
13942
|
+
className: "text-xs font-semibold text-foreground",
|
|
13943
|
+
children: t.label
|
|
13944
|
+
}), active && /* @__PURE__ */ jsx(Check, { className: "h-3 w-3 text-primary" })]
|
|
13945
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
13946
|
+
className: "text-[10px] text-foreground-subtle",
|
|
13947
|
+
children: [
|
|
13948
|
+
"~",
|
|
13949
|
+
base?.sizeMB ?? 0,
|
|
13950
|
+
" MB"
|
|
13951
|
+
]
|
|
13952
|
+
})]
|
|
13953
|
+
}, t.tier);
|
|
13954
|
+
})
|
|
13955
|
+
})] }),
|
|
13956
|
+
resolutions.length > 1 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
13957
|
+
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
13958
|
+
children: "Resolution"
|
|
13959
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
13960
|
+
className: "flex flex-wrap gap-1.5",
|
|
13961
|
+
children: resolutions.map((r) => /* @__PURE__ */ jsx(Chip, {
|
|
13962
|
+
active: r === selectedResolution,
|
|
13963
|
+
disabled,
|
|
13964
|
+
title: r === void 0 ? "native (best accuracy)" : `${r}×${r} (faster)`,
|
|
13965
|
+
onClick: () => selectResolution(r),
|
|
13966
|
+
children: resLabel(r)
|
|
13967
|
+
}, r ?? "native"))
|
|
13968
|
+
})] }),
|
|
13969
|
+
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
13970
|
+
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
13971
|
+
children: "Variant"
|
|
13972
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
13973
|
+
className: "flex flex-wrap gap-1.5",
|
|
13974
|
+
children: variantOptions.map((opt) => /* @__PURE__ */ jsx(Chip, {
|
|
13975
|
+
active: opt.modelId === value,
|
|
13976
|
+
disabled,
|
|
13977
|
+
title: `${opt.formats.join(", ")} · ~${opt.sizeMB} MB`,
|
|
13978
|
+
onClick: () => selectVariant(opt),
|
|
13979
|
+
children: /* @__PURE__ */ jsxs("span", {
|
|
13980
|
+
className: "inline-flex items-center gap-1",
|
|
13981
|
+
children: [opt.optimization === "fast" && /* @__PURE__ */ jsx(Zap, { className: "h-3 w-3" }), opt.label]
|
|
13982
|
+
})
|
|
13983
|
+
}, opt.modelId))
|
|
13984
|
+
})] }),
|
|
13985
|
+
/* @__PURE__ */ jsxs("div", {
|
|
13986
|
+
className: "flex items-center gap-2 text-[10px] text-foreground-subtle pt-0.5",
|
|
13987
|
+
children: [
|
|
13988
|
+
/* @__PURE__ */ jsx(Cpu, { className: "h-3 w-3" }),
|
|
13989
|
+
/* @__PURE__ */ jsx("span", {
|
|
13990
|
+
className: "font-mono",
|
|
13991
|
+
children: value || "—"
|
|
13992
|
+
}),
|
|
13993
|
+
selectedOption && /* @__PURE__ */ jsxs("span", { children: [
|
|
13994
|
+
"· ",
|
|
13995
|
+
selectedOption.formats.join(", "),
|
|
13996
|
+
" · ~",
|
|
13997
|
+
selectedOption.sizeMB,
|
|
13998
|
+
" MB"
|
|
13999
|
+
] })
|
|
14000
|
+
]
|
|
14001
|
+
})
|
|
14002
|
+
]
|
|
14003
|
+
});
|
|
14004
|
+
}
|
|
14005
|
+
//#endregion
|
|
14006
|
+
//#region src/composites/model-picker.tsx
|
|
14007
|
+
/**
|
|
14008
|
+
* Shared model picker — the ONE model-selection control across the app.
|
|
14009
|
+
*
|
|
14010
|
+
* Renders the grouped Family→Tier→Resolution→Variant selector
|
|
14011
|
+
* ({@link GroupedModelSelector}) when the step's models declare variant groups
|
|
14012
|
+
* (yolo26 / yolov9 …), else a flat `<select>` (face / plate / classifier
|
|
14013
|
+
* catalogs and operator-registered custom models). Custom / ungrouped ids stay
|
|
14014
|
+
* selectable via an "Other models" flat select alongside the grouped picker, and
|
|
14015
|
+
* a legacy/removed pin is surfaced with an explicit banner rather than a
|
|
14016
|
+
* silently mis-highlighted chip.
|
|
14017
|
+
*
|
|
14018
|
+
* Used by the pipeline stepper (`PipelineStep`), the agent/device step editor
|
|
14019
|
+
* (`AgentStepEditor`), and the benchmark — so the picker looks identical
|
|
14020
|
+
* everywhere. `value === ''` renders nothing selected (callers that support an
|
|
14021
|
+
* "Auto / node default" mode own that affordance and hide this picker while it
|
|
14022
|
+
* is active).
|
|
14023
|
+
*/
|
|
14024
|
+
function ModelPicker({ models, value, onChange, disabled }) {
|
|
14025
|
+
const hasGroups = useMemo(() => buildModelVariantGroups(models).length > 0, [models]);
|
|
14026
|
+
const ungrouped = useMemo(() => models.filter((m) => m.group === void 0), [models]);
|
|
14027
|
+
const unresolvedBanner = value !== "" && !models.some((m) => m.id === value) && /* @__PURE__ */ jsxs("div", {
|
|
14028
|
+
className: "rounded border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-300",
|
|
14029
|
+
children: [
|
|
14030
|
+
"Current pin (",
|
|
14031
|
+
/* @__PURE__ */ jsx("span", {
|
|
14032
|
+
className: "font-mono",
|
|
14033
|
+
children: value
|
|
14034
|
+
}),
|
|
14035
|
+
") is a legacy/removed model — no longer offered below. Pick a replacement to change it; Save persists whatever is selected here."
|
|
14036
|
+
]
|
|
14037
|
+
});
|
|
14038
|
+
const flatSelect = (opts, selectPlaceholder) => /* @__PURE__ */ jsxs("select", {
|
|
14039
|
+
disabled,
|
|
14040
|
+
className: "w-full bg-surface border border-border rounded px-2 py-1 text-xs disabled:opacity-50",
|
|
14041
|
+
value: opts.some((m) => m.id === value) ? value : "",
|
|
14042
|
+
onChange: (e) => onChange(e.target.value),
|
|
14043
|
+
children: [selectPlaceholder !== void 0 && /* @__PURE__ */ jsx("option", {
|
|
14044
|
+
value: "",
|
|
14045
|
+
disabled: true,
|
|
14046
|
+
children: selectPlaceholder
|
|
14047
|
+
}), opts.map((m) => /* @__PURE__ */ jsx("option", {
|
|
14048
|
+
value: m.id,
|
|
14049
|
+
children: m.name
|
|
14050
|
+
}, m.id))]
|
|
14051
|
+
});
|
|
14052
|
+
if (!hasGroups) return /* @__PURE__ */ jsxs("div", {
|
|
14053
|
+
className: "space-y-2",
|
|
14054
|
+
children: [unresolvedBanner, flatSelect(models)]
|
|
14055
|
+
});
|
|
14056
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14057
|
+
className: "space-y-3",
|
|
14058
|
+
children: [
|
|
14059
|
+
unresolvedBanner,
|
|
14060
|
+
/* @__PURE__ */ jsx(GroupedModelSelector, {
|
|
14061
|
+
catalog: models,
|
|
14062
|
+
value,
|
|
14063
|
+
onChange,
|
|
14064
|
+
disabled
|
|
14065
|
+
}),
|
|
14066
|
+
ungrouped.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
14067
|
+
className: "text-[10px] uppercase tracking-widest text-foreground-subtle mb-1",
|
|
14068
|
+
children: "Other models"
|
|
14069
|
+
}), flatSelect(ungrouped, "— custom / ungrouped model —")] })
|
|
14070
|
+
]
|
|
14071
|
+
});
|
|
14072
|
+
}
|
|
14073
|
+
//#endregion
|
|
13853
14074
|
//#region src/composites/pipeline-step.tsx
|
|
13854
14075
|
/**
|
|
13855
14076
|
* PipelineStep — single step card in the pipeline builder.
|
|
@@ -13859,11 +14080,7 @@ function buildStepTreeFromSchema(schema) {
|
|
|
13859
14080
|
* (Model → Confidence), children recursively.
|
|
13860
14081
|
*/
|
|
13861
14082
|
function modelsForStep(schema) {
|
|
13862
|
-
|
|
13863
|
-
return schema.models.map((m) => ({
|
|
13864
|
-
id: m.id,
|
|
13865
|
-
name: m.name
|
|
13866
|
-
}));
|
|
14083
|
+
return schema?.models ?? [];
|
|
13867
14084
|
}
|
|
13868
14085
|
function PipelineStep({ step, schema, allSchemas: _allSchemas, depth: _depth = 0, onChange, onDelete: _onDelete, readOnly = false, toggleMode = "simple", overrideState = null, onOverrideChange, inheritedEnabled, hideModelAndSettings = false, allowAutoModel = false }) {
|
|
13869
14086
|
const [expanded, setExpanded] = useState(false);
|
|
@@ -13954,21 +14171,35 @@ function PipelineStep({ step, schema, allSchemas: _allSchemas, depth: _depth = 0
|
|
|
13954
14171
|
children: "Model and detection settings are managed per agent — open the Pipeline page for this camera's agent to edit them."
|
|
13955
14172
|
}) : /* @__PURE__ */ jsxs("div", {
|
|
13956
14173
|
className: "space-y-3",
|
|
13957
|
-
children: [/* @__PURE__ */
|
|
13958
|
-
|
|
13959
|
-
|
|
13960
|
-
|
|
13961
|
-
|
|
13962
|
-
|
|
13963
|
-
|
|
13964
|
-
|
|
13965
|
-
|
|
13966
|
-
|
|
13967
|
-
|
|
13968
|
-
|
|
13969
|
-
|
|
13970
|
-
|
|
13971
|
-
|
|
14174
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
14175
|
+
className: "space-y-2",
|
|
14176
|
+
children: [
|
|
14177
|
+
/* @__PURE__ */ jsx("label", {
|
|
14178
|
+
className: "block text-[10px] font-medium text-foreground-subtle uppercase tracking-wide",
|
|
14179
|
+
children: "Model"
|
|
14180
|
+
}),
|
|
14181
|
+
allowAutoModel && /* @__PURE__ */ jsxs("label", {
|
|
14182
|
+
className: "flex items-center gap-2 text-[11px] text-foreground-subtle",
|
|
14183
|
+
children: [/* @__PURE__ */ jsx("input", {
|
|
14184
|
+
type: "checkbox",
|
|
14185
|
+
checked: isAutoSentinel,
|
|
14186
|
+
disabled: readOnly,
|
|
14187
|
+
onChange: (e) => onChange({
|
|
14188
|
+
...step,
|
|
14189
|
+
modelId: e.target.checked ? "" : schema?.defaultModelId ?? models[0]?.id ?? ""
|
|
14190
|
+
})
|
|
14191
|
+
}), "Auto (node default)"]
|
|
14192
|
+
}),
|
|
14193
|
+
!isAutoSentinel && /* @__PURE__ */ jsx(ModelPicker, {
|
|
14194
|
+
models,
|
|
14195
|
+
value: step.modelId,
|
|
14196
|
+
disabled: readOnly,
|
|
14197
|
+
onChange: (id) => onChange({
|
|
14198
|
+
...step,
|
|
14199
|
+
modelId: id
|
|
14200
|
+
})
|
|
14201
|
+
})
|
|
14202
|
+
]
|
|
13972
14203
|
}), schema?.configSchema?.map((field) => /* @__PURE__ */ jsx(ConfigSchemaField, {
|
|
13973
14204
|
field,
|
|
13974
14205
|
allFields: schema.configSchema ?? [],
|
|
@@ -14174,218 +14405,7 @@ function ThreeStateButton({ label, active, variant, subtext, onClick }) {
|
|
|
14174
14405
|
});
|
|
14175
14406
|
}
|
|
14176
14407
|
//#endregion
|
|
14177
|
-
//#region src/composites/grouped-model-selector.tsx
|
|
14178
|
-
/**
|
|
14179
|
-
* GroupedModelSelector — the shared Family → Tier → Variant model picker.
|
|
14180
|
-
*
|
|
14181
|
-
* The catalog is a FLAT list of models (ids like `yolo26s`, `yolo26s-int8`);
|
|
14182
|
-
* this folds it into a `family → tier → variant` tree (see
|
|
14183
|
-
* `buildModelVariantGroups` in `@camstack/types`) so the operator picks
|
|
14184
|
-
* "YOLO26 → Small → Int8" instead of scanning a flat dropdown of every
|
|
14185
|
-
* size×quantization. The selected value stays the flat model id.
|
|
14186
|
-
*
|
|
14187
|
-
* Parameterised on the minimal `ModelVariantSource` shape so BOTH the config-UI
|
|
14188
|
-
* catalog (`ModelCatalogEntry`) and the pipeline/device steppers
|
|
14189
|
-
* (`PipelineModelOption`) drive the same component. Legacy / ungrouped models
|
|
14190
|
-
* never appear here (the grouping helpers skip them).
|
|
14191
|
-
*/
|
|
14192
|
-
function Chip({ active, onClick, disabled, children, title }) {
|
|
14193
|
-
return /* @__PURE__ */ jsx("button", {
|
|
14194
|
-
type: "button",
|
|
14195
|
-
onClick,
|
|
14196
|
-
disabled,
|
|
14197
|
-
title,
|
|
14198
|
-
className: cn("rounded-full px-3 py-1 text-[11px] font-medium border transition-colors", active ? "border-primary bg-primary/10 text-primary" : "border-border bg-background text-foreground-subtle hover:text-foreground hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
14199
|
-
children
|
|
14200
|
-
});
|
|
14201
|
-
}
|
|
14202
|
-
function GroupedModelSelector({ catalog, value, onChange, disabled }) {
|
|
14203
|
-
const families = buildModelVariantGroups(catalog);
|
|
14204
|
-
const current = describeModelVariant(catalog, value);
|
|
14205
|
-
const activeFamily = families.find((f) => f.family === current?.family)?.family ?? families[0]?.family ?? "";
|
|
14206
|
-
const family = families.find((f) => f.family === activeFamily) ?? families[0];
|
|
14207
|
-
if (!family) return null;
|
|
14208
|
-
const activeTier = family.tiers.find((t) => t.tier === current?.tier)?.tier ?? family.tiers[0]?.tier ?? "";
|
|
14209
|
-
const tier = family.tiers.find((t) => t.tier === activeTier) ?? family.tiers[0];
|
|
14210
|
-
if (!tier) return null;
|
|
14211
|
-
const resolutions = [...new Set(tier.options.map((o) => o.resolution))].sort((a, b) => (b ?? Infinity) - (a ?? Infinity));
|
|
14212
|
-
const selectedResolution = resolutions.includes(current?.resolution) ? current?.resolution : resolutions[0];
|
|
14213
|
-
const variantOptions = tier.options.filter((o) => o.resolution === selectedResolution);
|
|
14214
|
-
const resLabel = (r) => r === void 0 ? "640 · native" : `${r}`;
|
|
14215
|
-
const selectTier = (tierId) => {
|
|
14216
|
-
const t = family.tiers.find((x) => x.tier === tierId);
|
|
14217
|
-
if (!t) return;
|
|
14218
|
-
onChange((t.options.find((o) => o.precision === (current?.precision ?? "fp32") && o.optimization === (current?.optimization ?? "standard") && o.resolution === current?.resolution) ?? t.options[0]).modelId);
|
|
14219
|
-
};
|
|
14220
|
-
const selectResolution = (resolution) => {
|
|
14221
|
-
const opts = tier.options.filter((o) => o.resolution === resolution);
|
|
14222
|
-
const pick = opts.find((o) => o.precision === (current?.precision ?? "fp32") && o.optimization === (current?.optimization ?? "standard")) ?? opts[0];
|
|
14223
|
-
if (pick) onChange(pick.modelId);
|
|
14224
|
-
};
|
|
14225
|
-
const selectVariant = (opt) => {
|
|
14226
|
-
const id = resolveVariantModelId(catalog, {
|
|
14227
|
-
family: family.family,
|
|
14228
|
-
tier: tier.tier,
|
|
14229
|
-
precision: opt.precision,
|
|
14230
|
-
optimization: opt.optimization,
|
|
14231
|
-
resolution: opt.resolution
|
|
14232
|
-
});
|
|
14233
|
-
if (id) onChange(id);
|
|
14234
|
-
};
|
|
14235
|
-
const selectedOption = tier.options.find((o) => o.modelId === value) ?? null;
|
|
14236
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
14237
|
-
className: "space-y-3",
|
|
14238
|
-
children: [
|
|
14239
|
-
families.length > 1 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
14240
|
-
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
14241
|
-
children: "Family"
|
|
14242
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
14243
|
-
className: "flex flex-wrap gap-1.5",
|
|
14244
|
-
children: families.map((f) => /* @__PURE__ */ jsx(Chip, {
|
|
14245
|
-
active: f.family === family.family,
|
|
14246
|
-
disabled,
|
|
14247
|
-
onClick: () => onChange(f.tiers[0]?.baseModelId ?? ""),
|
|
14248
|
-
children: f.label
|
|
14249
|
-
}, f.family))
|
|
14250
|
-
})] }),
|
|
14251
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsxs("p", {
|
|
14252
|
-
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
14253
|
-
children: [family.label, " — size"]
|
|
14254
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
14255
|
-
className: "grid grid-cols-2 gap-1.5 sm:grid-cols-4",
|
|
14256
|
-
children: family.tiers.map((t) => {
|
|
14257
|
-
const active = t.tier === tier.tier;
|
|
14258
|
-
const base = t.options.find((o) => o.modelId === t.baseModelId) ?? t.options[0];
|
|
14259
|
-
return /* @__PURE__ */ jsxs("button", {
|
|
14260
|
-
type: "button",
|
|
14261
|
-
disabled,
|
|
14262
|
-
onClick: () => selectTier(t.tier),
|
|
14263
|
-
className: cn("rounded-lg border px-2 py-2 text-left transition-all", active ? "border-primary bg-primary/5 ring-1 ring-primary/30" : "border-border bg-background hover:border-foreground-subtle/40", disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer"),
|
|
14264
|
-
children: [/* @__PURE__ */ jsxs("div", {
|
|
14265
|
-
className: "flex items-center gap-1",
|
|
14266
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
14267
|
-
className: "text-xs font-semibold text-foreground",
|
|
14268
|
-
children: t.label
|
|
14269
|
-
}), active && /* @__PURE__ */ jsx(Check, { className: "h-3 w-3 text-primary" })]
|
|
14270
|
-
}), /* @__PURE__ */ jsxs("span", {
|
|
14271
|
-
className: "text-[10px] text-foreground-subtle",
|
|
14272
|
-
children: [
|
|
14273
|
-
"~",
|
|
14274
|
-
base?.sizeMB ?? 0,
|
|
14275
|
-
" MB"
|
|
14276
|
-
]
|
|
14277
|
-
})]
|
|
14278
|
-
}, t.tier);
|
|
14279
|
-
})
|
|
14280
|
-
})] }),
|
|
14281
|
-
resolutions.length > 1 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
14282
|
-
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
14283
|
-
children: "Resolution"
|
|
14284
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
14285
|
-
className: "flex flex-wrap gap-1.5",
|
|
14286
|
-
children: resolutions.map((r) => /* @__PURE__ */ jsx(Chip, {
|
|
14287
|
-
active: r === selectedResolution,
|
|
14288
|
-
disabled,
|
|
14289
|
-
title: r === void 0 ? "native (best accuracy)" : `${r}×${r} (faster)`,
|
|
14290
|
-
onClick: () => selectResolution(r),
|
|
14291
|
-
children: resLabel(r)
|
|
14292
|
-
}, r ?? "native"))
|
|
14293
|
-
})] }),
|
|
14294
|
-
/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("p", {
|
|
14295
|
-
className: "text-[10px] uppercase tracking-wide text-foreground-subtle mb-1.5",
|
|
14296
|
-
children: "Variant"
|
|
14297
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
14298
|
-
className: "flex flex-wrap gap-1.5",
|
|
14299
|
-
children: variantOptions.map((opt) => /* @__PURE__ */ jsx(Chip, {
|
|
14300
|
-
active: opt.modelId === value,
|
|
14301
|
-
disabled,
|
|
14302
|
-
title: `${opt.formats.join(", ")} · ~${opt.sizeMB} MB`,
|
|
14303
|
-
onClick: () => selectVariant(opt),
|
|
14304
|
-
children: /* @__PURE__ */ jsxs("span", {
|
|
14305
|
-
className: "inline-flex items-center gap-1",
|
|
14306
|
-
children: [opt.optimization === "fast" && /* @__PURE__ */ jsx(Zap, { className: "h-3 w-3" }), opt.label]
|
|
14307
|
-
})
|
|
14308
|
-
}, opt.modelId))
|
|
14309
|
-
})] }),
|
|
14310
|
-
/* @__PURE__ */ jsxs("div", {
|
|
14311
|
-
className: "flex items-center gap-2 text-[10px] text-foreground-subtle pt-0.5",
|
|
14312
|
-
children: [
|
|
14313
|
-
/* @__PURE__ */ jsx(Cpu, { className: "h-3 w-3" }),
|
|
14314
|
-
/* @__PURE__ */ jsx("span", {
|
|
14315
|
-
className: "font-mono",
|
|
14316
|
-
children: value || "—"
|
|
14317
|
-
}),
|
|
14318
|
-
selectedOption && /* @__PURE__ */ jsxs("span", { children: [
|
|
14319
|
-
"· ",
|
|
14320
|
-
selectedOption.formats.join(", "),
|
|
14321
|
-
" · ~",
|
|
14322
|
-
selectedOption.sizeMB,
|
|
14323
|
-
" MB"
|
|
14324
|
-
] })
|
|
14325
|
-
]
|
|
14326
|
-
})
|
|
14327
|
-
]
|
|
14328
|
-
});
|
|
14329
|
-
}
|
|
14330
|
-
//#endregion
|
|
14331
14408
|
//#region src/composites/agent-step-editor.tsx
|
|
14332
|
-
/**
|
|
14333
|
-
* Shared model picker for the step editor — renders the grouped
|
|
14334
|
-
* Family→Tier→Variant selector when the step's models declare variant groups
|
|
14335
|
-
* (yolo26 …), else a flat `<select>` (face / plate / classifier catalogs and
|
|
14336
|
-
* custom models). Same component both the agent-default and per-device-override
|
|
14337
|
-
* modes use, so the picker looks identical across the pipeline stepper, the
|
|
14338
|
-
* device stepper and the cluster matrix.
|
|
14339
|
-
*/
|
|
14340
|
-
function ModelPicker({ models, value, onChange, disabled }) {
|
|
14341
|
-
const hasGroups = useMemo(() => buildModelVariantGroups(models).length > 0, [models]);
|
|
14342
|
-
const ungrouped = useMemo(() => models.filter((m) => m.group === void 0), [models]);
|
|
14343
|
-
const unresolvedBanner = value !== "" && !models.some((m) => m.id === value) && /* @__PURE__ */ jsxs("div", {
|
|
14344
|
-
className: "rounded border border-amber-500/40 bg-amber-500/10 px-2 py-1.5 text-[10px] text-amber-300",
|
|
14345
|
-
children: [
|
|
14346
|
-
"Current pin (",
|
|
14347
|
-
/* @__PURE__ */ jsx("span", {
|
|
14348
|
-
className: "font-mono",
|
|
14349
|
-
children: value
|
|
14350
|
-
}),
|
|
14351
|
-
") is a legacy/removed model — no longer offered below. Pick a replacement to change it; Save persists whatever is selected here."
|
|
14352
|
-
]
|
|
14353
|
-
});
|
|
14354
|
-
const flatSelect = (opts, selectPlaceholder) => /* @__PURE__ */ jsxs("select", {
|
|
14355
|
-
disabled,
|
|
14356
|
-
className: "w-full bg-surface border border-border rounded px-2 py-1 text-xs disabled:opacity-50",
|
|
14357
|
-
value: opts.some((m) => m.id === value) ? value : "",
|
|
14358
|
-
onChange: (e) => onChange(e.target.value),
|
|
14359
|
-
children: [selectPlaceholder !== void 0 && /* @__PURE__ */ jsx("option", {
|
|
14360
|
-
value: "",
|
|
14361
|
-
disabled: true,
|
|
14362
|
-
children: selectPlaceholder
|
|
14363
|
-
}), opts.map((m) => /* @__PURE__ */ jsx("option", {
|
|
14364
|
-
value: m.id,
|
|
14365
|
-
children: m.name
|
|
14366
|
-
}, m.id))]
|
|
14367
|
-
});
|
|
14368
|
-
if (!hasGroups) return /* @__PURE__ */ jsxs("div", {
|
|
14369
|
-
className: "space-y-2",
|
|
14370
|
-
children: [unresolvedBanner, flatSelect(models)]
|
|
14371
|
-
});
|
|
14372
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
14373
|
-
className: "space-y-3",
|
|
14374
|
-
children: [
|
|
14375
|
-
unresolvedBanner,
|
|
14376
|
-
/* @__PURE__ */ jsx(GroupedModelSelector, {
|
|
14377
|
-
catalog: models,
|
|
14378
|
-
value,
|
|
14379
|
-
onChange,
|
|
14380
|
-
disabled
|
|
14381
|
-
}),
|
|
14382
|
-
ungrouped.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
|
|
14383
|
-
className: "text-[10px] uppercase tracking-widest text-foreground-subtle mb-1",
|
|
14384
|
-
children: "Other models"
|
|
14385
|
-
}), flatSelect(ungrouped, "— custom / ungrouped model —")] })
|
|
14386
|
-
]
|
|
14387
|
-
});
|
|
14388
|
-
}
|
|
14389
14409
|
function buildDisplayStep(addon, cfg) {
|
|
14390
14410
|
return {
|
|
14391
14411
|
addonId: addon.id,
|
|
@@ -14445,14 +14465,14 @@ function DeviceModeEditor({ addon, agentDefault, agentNodeId, currentPatch, mode
|
|
|
14445
14465
|
onChangePatch?.(hasAnyField ? next : null);
|
|
14446
14466
|
};
|
|
14447
14467
|
const setModel = (modelId) => {
|
|
14448
|
-
const {
|
|
14468
|
+
const { modelId: _prev, ...rest } = currentPatch ?? {};
|
|
14449
14469
|
commitPatch(modelId === void 0 ? rest : {
|
|
14450
14470
|
...rest,
|
|
14451
14471
|
modelId
|
|
14452
14472
|
});
|
|
14453
14473
|
};
|
|
14454
14474
|
const setSettings = (settings) => {
|
|
14455
|
-
const {
|
|
14475
|
+
const { settings: _prev, ...rest } = currentPatch ?? {};
|
|
14456
14476
|
commitPatch(settings === void 0 ? rest : {
|
|
14457
14477
|
...rest,
|
|
14458
14478
|
settings
|
|
@@ -14573,6 +14593,42 @@ function AgentStepEditor(props) {
|
|
|
14573
14593
|
onChangePatch
|
|
14574
14594
|
});
|
|
14575
14595
|
}
|
|
14596
|
+
//#endregion
|
|
14597
|
+
//#region src/composites/pipeline-matrix-shared.tsx
|
|
14598
|
+
/**
|
|
14599
|
+
* Stable column identity. Plain per-node columns key by `agentNodeId` (so the
|
|
14600
|
+
* rendered `key` is byte-identical to the pre-C7.4 matrix); device sub-columns
|
|
14601
|
+
* disambiguate with their `deviceKey`. MUST be used everywhere a React `key`,
|
|
14602
|
+
* selection compare, or column identity is derived.
|
|
14603
|
+
*/
|
|
14604
|
+
function agentColumnKey(a) {
|
|
14605
|
+
return a.deviceKey !== void 0 ? `${a.agentNodeId}::${a.deviceKey}` : a.agentNodeId;
|
|
14606
|
+
}
|
|
14607
|
+
/**
|
|
14608
|
+
* Coalesce CONSECUTIVE columns that share an `agentNodeId` into node groups.
|
|
14609
|
+
* Order-preserving: the flat column order is untouched, so body cells still map
|
|
14610
|
+
* 1:1 to `agents`. A run of length 1 is a plain (ungrouped) node header.
|
|
14611
|
+
*/
|
|
14612
|
+
function groupAgentColumns(agents) {
|
|
14613
|
+
const groups = [];
|
|
14614
|
+
for (const col of agents) {
|
|
14615
|
+
const last = groups[groups.length - 1];
|
|
14616
|
+
if (last && last.agentNodeId === col.agentNodeId) {
|
|
14617
|
+
const columns = [...last.columns, col];
|
|
14618
|
+
groups[groups.length - 1] = {
|
|
14619
|
+
...last,
|
|
14620
|
+
columns,
|
|
14621
|
+
grouped: columns.length > 1
|
|
14622
|
+
};
|
|
14623
|
+
} else groups.push({
|
|
14624
|
+
agentNodeId: col.agentNodeId,
|
|
14625
|
+
engineLabel: col.engineLabel,
|
|
14626
|
+
columns: [col],
|
|
14627
|
+
grouped: false
|
|
14628
|
+
});
|
|
14629
|
+
}
|
|
14630
|
+
return groups;
|
|
14631
|
+
}
|
|
14576
14632
|
function flattenTree(nodes) {
|
|
14577
14633
|
const out = [];
|
|
14578
14634
|
const walk = (list, depth) => {
|
|
@@ -14651,6 +14707,41 @@ function ClassChips({ inputs, outputs }) {
|
|
|
14651
14707
|
]
|
|
14652
14708
|
});
|
|
14653
14709
|
}
|
|
14710
|
+
/**
|
|
14711
|
+
* Grouped node header (C7.4): a node super-label spanning its device
|
|
14712
|
+
* sub-columns, with a per-device sub-label row beneath. Rendered ONLY for a
|
|
14713
|
+
* node expanded into 2+ device sub-columns; a single plain column keeps each
|
|
14714
|
+
* matrix's own byte-identical single-header markup. The spanning cell uses
|
|
14715
|
+
* `gridColumn: span N` so it aligns to its N body columns; the inner flex row
|
|
14716
|
+
* gives each device its own equal-width, padded sub-label slot.
|
|
14717
|
+
*/
|
|
14718
|
+
function GroupedAgentHeader({ group }) {
|
|
14719
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
14720
|
+
className: "sticky top-0 z-10 min-w-0 border-b border-l border-border bg-muted/60",
|
|
14721
|
+
style: { gridColumn: `span ${group.columns.length}` },
|
|
14722
|
+
children: [
|
|
14723
|
+
/* @__PURE__ */ jsx("div", {
|
|
14724
|
+
className: "truncate px-3 pt-2 text-xs font-semibold text-foreground",
|
|
14725
|
+
children: group.agentNodeId
|
|
14726
|
+
}),
|
|
14727
|
+
/* @__PURE__ */ jsx("div", {
|
|
14728
|
+
className: "truncate px-3 text-[10px] text-foreground-subtle",
|
|
14729
|
+
children: group.engineLabel
|
|
14730
|
+
}),
|
|
14731
|
+
/* @__PURE__ */ jsx("div", {
|
|
14732
|
+
className: "mt-1 flex border-t border-border/50",
|
|
14733
|
+
children: group.columns.map((c, i) => /* @__PURE__ */ jsx("div", {
|
|
14734
|
+
className: cn("min-w-0 flex-1 px-3 py-1", i > 0 && "border-l border-border/50"),
|
|
14735
|
+
title: c.deviceLabel ?? c.deviceKey,
|
|
14736
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
14737
|
+
className: "truncate text-[10px] font-medium text-foreground/90",
|
|
14738
|
+
children: c.deviceLabel ?? c.deviceKey
|
|
14739
|
+
})
|
|
14740
|
+
}, agentColumnKey(c)))
|
|
14741
|
+
})
|
|
14742
|
+
]
|
|
14743
|
+
});
|
|
14744
|
+
}
|
|
14654
14745
|
/** Step label (slot heading + addon name + class chips), shared by both views. */
|
|
14655
14746
|
function StepLabel({ node }) {
|
|
14656
14747
|
return /* @__PURE__ */ jsxs("div", {
|
|
@@ -14753,13 +14844,13 @@ function GridRow({ node, depth, agents, getCellState, onCellClick, selectedCell,
|
|
|
14753
14844
|
})
|
|
14754
14845
|
})]
|
|
14755
14846
|
}), agents.map((a) => {
|
|
14756
|
-
const state = getCellState(node.addonId, a
|
|
14847
|
+
const state = getCellState(node.addonId, a);
|
|
14757
14848
|
return /* @__PURE__ */ jsx("button", {
|
|
14758
14849
|
type: "button",
|
|
14759
|
-
onClick: () => onCellClick(node.addonId, a
|
|
14760
|
-
className: cellButtonClass(state, selectedCell
|
|
14850
|
+
onClick: () => onCellClick(node.addonId, a),
|
|
14851
|
+
className: cellButtonClass(state, selectedCell !== null && selectedCell.addonId === node.addonId && agentColumnKey(selectedCell) === agentColumnKey(a), "min-w-0 overflow-hidden px-3 py-1.5 border-b border-l border-border"),
|
|
14761
14852
|
children: renderCellContent(state)
|
|
14762
|
-
}, a
|
|
14853
|
+
}, agentColumnKey(a));
|
|
14763
14854
|
})] });
|
|
14764
14855
|
}
|
|
14765
14856
|
/**
|
|
@@ -14771,7 +14862,8 @@ function GridRow({ node, depth, agents, getCellState, onCellClick, selectedCell,
|
|
|
14771
14862
|
function MatrixGrid$1({ rows, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
|
|
14772
14863
|
const gridTemplate = `${STEP_COL_REM$1}rem repeat(${agents.length}, 13rem)`;
|
|
14773
14864
|
const showToggle = onToggleEnabled !== void 0 && agents.length === 1;
|
|
14774
|
-
const onlyAgent = agents[0]
|
|
14865
|
+
const onlyAgent = agents[0];
|
|
14866
|
+
const groups = groupAgentColumns(agents);
|
|
14775
14867
|
return /* @__PURE__ */ jsx("div", {
|
|
14776
14868
|
className: "overflow-auto border border-border rounded",
|
|
14777
14869
|
children: /* @__PURE__ */ jsxs("div", {
|
|
@@ -14782,16 +14874,16 @@ function MatrixGrid$1({ rows, agents, getCellState, onCellClick, selectedCell, o
|
|
|
14782
14874
|
className: "sticky top-0 left-0 z-20 bg-muted/60 px-3 py-2 text-[10px] uppercase tracking-widest text-foreground-subtle border-b border-border",
|
|
14783
14875
|
children: "Step"
|
|
14784
14876
|
}),
|
|
14785
|
-
|
|
14877
|
+
groups.map((group) => group.grouped ? /* @__PURE__ */ jsx(GroupedAgentHeader, { group }, group.agentNodeId) : group.columns.map((col) => /* @__PURE__ */ jsxs("div", {
|
|
14786
14878
|
className: "sticky top-0 z-10 min-w-0 bg-muted/60 px-3 py-2 border-b border-l border-border",
|
|
14787
14879
|
children: [/* @__PURE__ */ jsx("div", {
|
|
14788
14880
|
className: "text-xs font-semibold text-foreground truncate",
|
|
14789
|
-
children:
|
|
14881
|
+
children: col.agentNodeId
|
|
14790
14882
|
}), /* @__PURE__ */ jsx("div", {
|
|
14791
14883
|
className: "text-[10px] text-foreground-subtle truncate",
|
|
14792
|
-
children:
|
|
14884
|
+
children: col.engineLabel
|
|
14793
14885
|
})]
|
|
14794
|
-
},
|
|
14886
|
+
}, agentColumnKey(col)))),
|
|
14795
14887
|
rows.map(({ node, depth }) => {
|
|
14796
14888
|
const cellState = showToggle && onlyAgent !== void 0 ? getCellState(node.addonId, onlyAgent) : null;
|
|
14797
14889
|
return /* @__PURE__ */ jsx(GridRow, {
|
|
@@ -14827,14 +14919,14 @@ function StackedCards({ rows, agents, getCellState, onCellClick, selectedCell, o
|
|
|
14827
14919
|
className: "bg-muted/60 px-3 py-2 border-b border-border",
|
|
14828
14920
|
children: [/* @__PURE__ */ jsx("div", {
|
|
14829
14921
|
className: "text-xs font-semibold text-foreground truncate",
|
|
14830
|
-
children: a.agentNodeId
|
|
14922
|
+
children: a.deviceLabel ? `${a.agentNodeId} · ${a.deviceLabel}` : a.agentNodeId
|
|
14831
14923
|
}), /* @__PURE__ */ jsx("div", {
|
|
14832
14924
|
className: "text-[10px] text-foreground-subtle truncate",
|
|
14833
14925
|
children: a.engineLabel
|
|
14834
14926
|
})]
|
|
14835
14927
|
}), /* @__PURE__ */ jsx("ul", { children: rows.map(({ node, depth }) => {
|
|
14836
|
-
const state = getCellState(node.addonId, a
|
|
14837
|
-
const isSelected = selectedCell
|
|
14928
|
+
const state = getCellState(node.addonId, a);
|
|
14929
|
+
const isSelected = selectedCell !== null && selectedCell.addonId === node.addonId && agentColumnKey(selectedCell) === agentColumnKey(a);
|
|
14838
14930
|
const toggleProps = showToggle && state !== null ? {
|
|
14839
14931
|
enabled: state.kind === "enabled",
|
|
14840
14932
|
onChange: (next) => onToggleEnabled?.(node.addonId, next),
|
|
@@ -14846,7 +14938,7 @@ function StackedCards({ rows, agents, getCellState, onCellClick, selectedCell, o
|
|
|
14846
14938
|
className: "flex items-center gap-2",
|
|
14847
14939
|
children: [/* @__PURE__ */ jsxs("button", {
|
|
14848
14940
|
type: "button",
|
|
14849
|
-
onClick: () => onCellClick(node.addonId, a
|
|
14941
|
+
onClick: () => onCellClick(node.addonId, a),
|
|
14850
14942
|
className: cellButtonClass(state, isSelected, "flex flex-1 min-w-0 items-start justify-between gap-3 px-3 py-2"),
|
|
14851
14943
|
style: { paddingLeft: `${12 + depth * 14}px` },
|
|
14852
14944
|
children: [/* @__PURE__ */ jsx(StepLabel, { node }), /* @__PURE__ */ jsx("span", {
|
|
@@ -14864,7 +14956,7 @@ function StackedCards({ rows, agents, getCellState, onCellClick, selectedCell, o
|
|
|
14864
14956
|
})
|
|
14865
14957
|
}, node.addonId);
|
|
14866
14958
|
}) })]
|
|
14867
|
-
}, a
|
|
14959
|
+
}, agentColumnKey(a)))
|
|
14868
14960
|
});
|
|
14869
14961
|
}
|
|
14870
14962
|
function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled }) {
|
|
@@ -14972,11 +15064,11 @@ function ZoneBadge() {
|
|
|
14972
15064
|
})]
|
|
14973
15065
|
});
|
|
14974
15066
|
}
|
|
14975
|
-
function StepGateCell({ node, depth, gate, busy, onSet }) {
|
|
15067
|
+
function StepGateCell({ node, depth, gate, busy, onSet, hideGate }) {
|
|
14976
15068
|
return /* @__PURE__ */ jsxs("div", {
|
|
14977
15069
|
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
15070
|
style: { paddingLeft: `${12 + depth * 14}px` },
|
|
14979
|
-
children: [/* @__PURE__ */ jsx(StepLabel, { node }), gate.kind === "zone-driven" ? /* @__PURE__ */ jsx(ZoneBadge, {}) : /* @__PURE__ */ jsx(GateControl, {
|
|
15071
|
+
children: [/* @__PURE__ */ jsx(StepLabel, { node }), hideGate ? null : gate.kind === "zone-driven" ? /* @__PURE__ */ jsx(ZoneBadge, {}) : /* @__PURE__ */ jsx(GateControl, {
|
|
14980
15072
|
gate,
|
|
14981
15073
|
busy,
|
|
14982
15074
|
onSet
|
|
@@ -14985,11 +15077,12 @@ function StepGateCell({ node, depth, gate, busy, onSet }) {
|
|
|
14985
15077
|
}
|
|
14986
15078
|
/**
|
|
14987
15079
|
* Agents-scoped node selector for the B fallback. Styled like the shared
|
|
14988
|
-
* `NodePicker` but driven by THIS matrix's
|
|
15080
|
+
* `NodePicker` but driven by THIS matrix's NODE set — the cluster-wide
|
|
14989
15081
|
* 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.
|
|
15082
|
+
* which would let the operator select a node the matrix can't show. Selects a
|
|
15083
|
+
* NODE (grouping its device sub-columns), never a raw device column.
|
|
14991
15084
|
*/
|
|
14992
|
-
function NodeSelectorBar({
|
|
15085
|
+
function NodeSelectorBar({ nodes, selected, onSelect }) {
|
|
14993
15086
|
return /* @__PURE__ */ jsxs("div", {
|
|
14994
15087
|
className: "flex flex-wrap items-center gap-1.5",
|
|
14995
15088
|
role: "tablist",
|
|
@@ -15002,7 +15095,7 @@ function NodeSelectorBar({ agents, selected, onSelect }) {
|
|
|
15002
15095
|
}),
|
|
15003
15096
|
/* @__PURE__ */ jsx("div", {
|
|
15004
15097
|
className: "flex overflow-hidden rounded-md border border-border text-[11px] font-medium",
|
|
15005
|
-
children:
|
|
15098
|
+
children: nodes.map((a, idx) => {
|
|
15006
15099
|
const isSelected = a.agentNodeId === selected;
|
|
15007
15100
|
return /* @__PURE__ */ jsx("button", {
|
|
15008
15101
|
type: "button",
|
|
@@ -15018,8 +15111,9 @@ function NodeSelectorBar({ agents, selected, onSelect }) {
|
|
|
15018
15111
|
]
|
|
15019
15112
|
});
|
|
15020
15113
|
}
|
|
15021
|
-
function MatrixGrid({ tree, agents, gateFor, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, single }) {
|
|
15114
|
+
function MatrixGrid({ tree, agents, gateFor, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, single, hideGate }) {
|
|
15022
15115
|
const rows = useMemo(() => flattenTree(tree), [tree]);
|
|
15116
|
+
const groups = useMemo(() => groupAgentColumns(agents), [agents]);
|
|
15023
15117
|
const gridTemplate = single ? `minmax(0, 1.35fr) repeat(${agents.length}, minmax(0, 1fr))` : `${STEP_COL_REM}rem repeat(${agents.length}, 13rem)`;
|
|
15024
15118
|
return /* @__PURE__ */ jsx("div", {
|
|
15025
15119
|
className: cn("rounded border border-border", single ? "overflow-hidden" : "overflow-auto"),
|
|
@@ -15029,18 +15123,18 @@ function MatrixGrid({ tree, agents, gateFor, getCellState, onCellClick, selected
|
|
|
15029
15123
|
children: [
|
|
15030
15124
|
/* @__PURE__ */ jsx("div", {
|
|
15031
15125
|
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"
|
|
15126
|
+
children: hideGate ? "Step" : "Step · gate"
|
|
15033
15127
|
}),
|
|
15034
|
-
|
|
15128
|
+
groups.map((group) => group.grouped ? /* @__PURE__ */ jsx(GroupedAgentHeader, { group }, group.agentNodeId) : group.columns.map((col) => /* @__PURE__ */ jsxs("div", {
|
|
15035
15129
|
className: "sticky top-0 z-10 min-w-0 border-b border-l border-border bg-muted/60 px-3 py-2",
|
|
15036
15130
|
children: [/* @__PURE__ */ jsx("div", {
|
|
15037
15131
|
className: "truncate text-xs font-semibold text-foreground",
|
|
15038
|
-
children:
|
|
15132
|
+
children: col.agentNodeId
|
|
15039
15133
|
}), /* @__PURE__ */ jsx("div", {
|
|
15040
15134
|
className: "truncate text-[10px] text-foreground-subtle",
|
|
15041
|
-
children:
|
|
15135
|
+
children: col.engineLabel
|
|
15042
15136
|
})]
|
|
15043
|
-
},
|
|
15137
|
+
}, agentColumnKey(col)))),
|
|
15044
15138
|
rows.map(({ node, depth }) => /* @__PURE__ */ jsx(MatrixRow, {
|
|
15045
15139
|
node,
|
|
15046
15140
|
depth,
|
|
@@ -15050,33 +15144,35 @@ function MatrixGrid({ tree, agents, gateFor, getCellState, onCellClick, selected
|
|
|
15050
15144
|
onCellClick,
|
|
15051
15145
|
selectedCell,
|
|
15052
15146
|
onSetGate,
|
|
15053
|
-
gateBusy
|
|
15147
|
+
gateBusy,
|
|
15148
|
+
hideGate
|
|
15054
15149
|
}, node.addonId))
|
|
15055
15150
|
]
|
|
15056
15151
|
})
|
|
15057
15152
|
});
|
|
15058
15153
|
}
|
|
15059
|
-
function MatrixRow({ node, depth, agents, gate, getCellState, onCellClick, selectedCell, onSetGate, gateBusy }) {
|
|
15154
|
+
function MatrixRow({ node, depth, agents, gate, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, hideGate }) {
|
|
15060
15155
|
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(StepGateCell, {
|
|
15061
15156
|
node,
|
|
15062
15157
|
depth,
|
|
15063
15158
|
gate,
|
|
15064
15159
|
busy: gateBusy,
|
|
15065
|
-
onSet: (next) => onSetGate(node.addonId, next)
|
|
15160
|
+
onSet: (next) => onSetGate(node.addonId, next),
|
|
15161
|
+
hideGate
|
|
15066
15162
|
}), agents.map((a) => {
|
|
15067
|
-
const state = getCellState(node.addonId, a
|
|
15068
|
-
const isSelected = selectedCell
|
|
15163
|
+
const state = getCellState(node.addonId, a);
|
|
15164
|
+
const isSelected = selectedCell !== null && selectedCell.addonId === node.addonId && agentColumnKey(selectedCell) === agentColumnKey(a);
|
|
15069
15165
|
const actionable = state.kind === "enabled" || state.kind === "skip";
|
|
15070
15166
|
return /* @__PURE__ */ jsx("button", {
|
|
15071
15167
|
type: "button",
|
|
15072
15168
|
disabled: !actionable,
|
|
15073
|
-
onClick: () => onCellClick(node.addonId, a
|
|
15169
|
+
onClick: () => onCellClick(node.addonId, a),
|
|
15074
15170
|
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
15171
|
children: renderCellContent(state)
|
|
15076
|
-
}, a
|
|
15172
|
+
}, agentColumnKey(a));
|
|
15077
15173
|
})] });
|
|
15078
15174
|
}
|
|
15079
|
-
function DeviceStepMatrix({ tree, agents, gateFor, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, fallbackNodeId, onFallbackNodeChange }) {
|
|
15175
|
+
function DeviceStepMatrix({ tree, agents, gateFor, getCellState, onCellClick, selectedCell, onSetGate, gateBusy, fallbackNodeId, onFallbackNodeChange, hideGate }) {
|
|
15080
15176
|
const containerRef = useRef(null);
|
|
15081
15177
|
const [width, setWidth] = useState(0);
|
|
15082
15178
|
useLayoutEffect(() => {
|
|
@@ -15088,17 +15184,18 @@ function DeviceStepMatrix({ tree, agents, gateFor, getCellState, onCellClick, se
|
|
|
15088
15184
|
RO?.observe(el);
|
|
15089
15185
|
return () => RO?.disconnect();
|
|
15090
15186
|
}, []);
|
|
15091
|
-
const
|
|
15187
|
+
const nodes = useMemo(() => groupAgentColumns(agents), [agents]);
|
|
15188
|
+
const single = shouldUseSingleNode(width, nodes.length, STEP_COL_PX);
|
|
15092
15189
|
const selectedNode = useMemo(() => {
|
|
15093
|
-
if (
|
|
15094
|
-
return
|
|
15095
|
-
}, [
|
|
15096
|
-
const shownAgents = single && selectedNode ?
|
|
15190
|
+
if (nodes.length === 0) return null;
|
|
15191
|
+
return nodes.find((n) => n.agentNodeId === fallbackNodeId) ?? nodes[0] ?? null;
|
|
15192
|
+
}, [nodes, fallbackNodeId]);
|
|
15193
|
+
const shownAgents = single && selectedNode ? selectedNode.columns : agents;
|
|
15097
15194
|
return /* @__PURE__ */ jsxs("div", {
|
|
15098
15195
|
ref: containerRef,
|
|
15099
15196
|
className: "w-full space-y-2",
|
|
15100
15197
|
children: [single && selectedNode && /* @__PURE__ */ jsx(NodeSelectorBar, {
|
|
15101
|
-
|
|
15198
|
+
nodes,
|
|
15102
15199
|
selected: selectedNode.agentNodeId,
|
|
15103
15200
|
onSelect: onFallbackNodeChange
|
|
15104
15201
|
}), /* @__PURE__ */ jsx(MatrixGrid, {
|
|
@@ -15110,7 +15207,8 @@ function DeviceStepMatrix({ tree, agents, gateFor, getCellState, onCellClick, se
|
|
|
15110
15207
|
selectedCell,
|
|
15111
15208
|
onSetGate,
|
|
15112
15209
|
gateBusy,
|
|
15113
|
-
single: single && selectedNode !== null
|
|
15210
|
+
single: single && selectedNode !== null,
|
|
15211
|
+
hideGate
|
|
15114
15212
|
})]
|
|
15115
15213
|
});
|
|
15116
15214
|
}
|
|
@@ -18826,8 +18924,6 @@ var usePipelineExecutorGetAvailableEngines = trpc.pipelineExecutor.getAvailableE
|
|
|
18826
18924
|
var usePipelineExecutorGetSelectedEngine = trpc.pipelineExecutor.getSelectedEngine.useQuery;
|
|
18827
18925
|
/** Generated alias around `trpc.pipelineExecutor.getDefaultSteps.useQuery`. */
|
|
18828
18926
|
var usePipelineExecutorGetDefaultSteps = trpc.pipelineExecutor.getDefaultSteps.useQuery;
|
|
18829
|
-
/** Generated alias around `trpc.pipelineExecutor.reprobeEngine.useMutation`. */
|
|
18830
|
-
var usePipelineExecutorReprobeEngine = trpc.pipelineExecutor.reprobeEngine.useMutation;
|
|
18831
18927
|
/** Generated alias around `trpc.pipelineExecutor.getEngineProvisioning.useQuery`. */
|
|
18832
18928
|
var usePipelineExecutorGetEngineProvisioning = trpc.pipelineExecutor.getEngineProvisioning.useQuery;
|
|
18833
18929
|
/** Generated alias around `trpc.pipelineExecutor.getVideoPipelineSteps.useQuery`. */
|
|
@@ -18898,6 +18994,10 @@ var usePipelineExecutorGetDetectionConfigSchema = trpc.pipelineExecutor.getDetec
|
|
|
18898
18994
|
var usePipelineOrchestratorAssignPipeline = trpc.pipelineOrchestrator.assignPipeline.useMutation;
|
|
18899
18995
|
/** Generated alias around `trpc.pipelineOrchestrator.unassignPipeline.useMutation`. */
|
|
18900
18996
|
var usePipelineOrchestratorUnassignPipeline = trpc.pipelineOrchestrator.unassignPipeline.useMutation;
|
|
18997
|
+
/** Generated alias around `trpc.pipelineOrchestrator.setPipelineDevicePin.useMutation`. */
|
|
18998
|
+
var usePipelineOrchestratorSetPipelineDevicePin = trpc.pipelineOrchestrator.setPipelineDevicePin.useMutation;
|
|
18999
|
+
/** Generated alias around `trpc.pipelineOrchestrator.getPipelineDevicePin.useQuery`. */
|
|
19000
|
+
var usePipelineOrchestratorGetPipelineDevicePin = trpc.pipelineOrchestrator.getPipelineDevicePin.useQuery;
|
|
18901
19001
|
/** Generated alias around `trpc.pipelineOrchestrator.rebalance.useMutation`. */
|
|
18902
19002
|
var usePipelineOrchestratorRebalance = trpc.pipelineOrchestrator.rebalance.useMutation;
|
|
18903
19003
|
/** Generated alias around `trpc.pipelineOrchestrator.getPipelineAssignments.useQuery`. */
|
|
@@ -18930,8 +19030,6 @@ var usePipelineOrchestratorGetAudioAssignments = trpc.pipelineOrchestrator.getAu
|
|
|
18930
19030
|
var usePipelineOrchestratorGetAgentSettings = trpc.pipelineOrchestrator.getAgentSettings.useQuery;
|
|
18931
19031
|
/** Generated alias around `trpc.pipelineOrchestrator.listAgentSettings.useQuery`. */
|
|
18932
19032
|
var usePipelineOrchestratorListAgentSettings = trpc.pipelineOrchestrator.listAgentSettings.useQuery;
|
|
18933
|
-
/** Generated alias around `trpc.pipelineOrchestrator.setAgentAddonDefaults.useMutation`. */
|
|
18934
|
-
var usePipelineOrchestratorSetAgentAddonDefaults = trpc.pipelineOrchestrator.setAgentAddonDefaults.useMutation;
|
|
18935
19033
|
/** Generated alias around `trpc.pipelineOrchestrator.removeAgentSettings.useMutation`. */
|
|
18936
19034
|
var usePipelineOrchestratorRemoveAgentSettings = trpc.pipelineOrchestrator.removeAgentSettings.useMutation;
|
|
18937
19035
|
/** Generated alias around `trpc.pipelineOrchestrator.setAgentMaxCameras.useMutation`. */
|
|
@@ -18944,6 +19042,8 @@ var usePipelineOrchestratorSetAgentCapabilities = trpc.pipelineOrchestrator.setA
|
|
|
18944
19042
|
var usePipelineOrchestratorSetAgentReachableHost = trpc.pipelineOrchestrator.setAgentReachableHost.useMutation;
|
|
18945
19043
|
/** Generated alias around `trpc.pipelineOrchestrator.setAgentInferenceDevices.useMutation`. */
|
|
18946
19044
|
var usePipelineOrchestratorSetAgentInferenceDevices = trpc.pipelineOrchestrator.setAgentInferenceDevices.useMutation;
|
|
19045
|
+
/** Generated alias around `trpc.pipelineOrchestrator.getNodeInferenceDevices.useQuery`. */
|
|
19046
|
+
var usePipelineOrchestratorGetNodeInferenceDevices = trpc.pipelineOrchestrator.getNodeInferenceDevices.useQuery;
|
|
18947
19047
|
/** Generated alias around `trpc.pipelineOrchestrator.resetNodePipelineDefaults.useMutation`. */
|
|
18948
19048
|
var usePipelineOrchestratorResetNodePipelineDefaults = trpc.pipelineOrchestrator.resetNodePipelineDefaults.useMutation;
|
|
18949
19049
|
/** Generated alias around `trpc.pipelineOrchestrator.getCameraSettings.useQuery`. */
|
|
@@ -28805,15 +28905,34 @@ function DeviceItemPreview({ trpc, device, status, enabled, showStatusPills = fa
|
|
|
28805
28905
|
}
|
|
28806
28906
|
//#endregion
|
|
28807
28907
|
//#region src/composites/device-item/status-dot.tsx
|
|
28908
|
+
/** The states that breathe (are "alive"). Offline + disabled are static. */
|
|
28909
|
+
function isAlive(status) {
|
|
28910
|
+
return status === "online" || status === "recording-continuous" || status === "recording-events";
|
|
28911
|
+
}
|
|
28808
28912
|
function resolveTitle(status, lastChangedAt) {
|
|
28809
|
-
|
|
28810
|
-
|
|
28811
|
-
|
|
28812
|
-
|
|
28913
|
+
switch (status) {
|
|
28914
|
+
case "disabled": return "Disabled";
|
|
28915
|
+
case "online": return "Online";
|
|
28916
|
+
case "recording-continuous": return "Recording · always";
|
|
28917
|
+
case "recording-events": return "Recording · on motion";
|
|
28918
|
+
case "offline": {
|
|
28919
|
+
const lastSeen = formatLastSeen(lastChangedAt);
|
|
28920
|
+
return lastSeen === null ? "Offline" : `Offline · last seen ${lastSeen}`;
|
|
28921
|
+
}
|
|
28922
|
+
}
|
|
28923
|
+
}
|
|
28924
|
+
function colorClass(status) {
|
|
28925
|
+
switch (status) {
|
|
28926
|
+
case "disabled": return "bg-black ring-1 ring-foreground-subtle/60";
|
|
28927
|
+
case "offline": return "bg-foreground-subtle";
|
|
28928
|
+
case "recording-continuous": return "bg-danger";
|
|
28929
|
+
case "recording-events": return "bg-info";
|
|
28930
|
+
case "online": return "bg-success";
|
|
28931
|
+
}
|
|
28813
28932
|
}
|
|
28814
28933
|
function StatusDot({ status, lastChangedAt }) {
|
|
28815
28934
|
return /* @__PURE__ */ jsx("span", {
|
|
28816
|
-
className: cn("h-1.5 w-1.5 rounded-full flex-shrink-0", status
|
|
28935
|
+
className: cn("h-1.5 w-1.5 rounded-full flex-shrink-0", colorClass(status), isAlive(status) && "animate-pulse"),
|
|
28817
28936
|
title: resolveTitle(status, lastChangedAt)
|
|
28818
28937
|
});
|
|
28819
28938
|
}
|
|
@@ -46909,4 +47028,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
|
|
|
46909
47028
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
46910
47029
|
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
46911
47030
|
//#endregion
|
|
46912
|
-
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, usePipelineOrchestratorSetAgentInferenceDevices, 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 };
|
|
47031
|
+
export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DISPLAY_ICON_REGISTRY, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceSelectField, DeviceStepMatrix, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EVENT_KIND_ICONS, EmptyState, ErrorBox, EventKindGlyph, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, GroupedModelSelector, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, ModelPicker, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RECORDED_PLAYBACK_MODES, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordedPlaybackProvider, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, agentColumnKey, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, childListName, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, cursorFractionFor, darkColors, defaultTheme, deriveDeviceKind, deviceMatchesFilter, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, ensureMfHostInit, eventKindLabel, filterDeviceOptions, findTimezone, formatControlDateTime, formatLastSeen, formatNumeric, fuzzyMatch, getClassColor, getPhaseVisual, groupAgentColumns, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, initialScrubState, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, makeScrubBridge, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, parseRecordedServerMessage, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDisplayIcon, resolveEventKindIcon, resolvePrimaryChild, resolveSensorDisplay, 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, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineExecutorValidatePipeline, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDetectWeight, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerReportMotion, usePipelineRunnerRunDetailSubtree, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordedPlayback, useRecordingApplyDeviceSettingsPatch, 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 };
|