@camstack/ui-library 1.2.348 → 1.2.350

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/index.js CHANGED
@@ -5,7 +5,7 @@ import * as __mfHostReact from "react";
5
5
  import React, { Fragment, Suspense, cloneElement, createContext, createElement, forwardRef, lazy, useCallback, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useMemo, useReducer, useRef, useState, useSyncExternalStore } from "react";
6
6
  import * as __mfHostReactJsxRuntime from "react/jsx-runtime";
7
7
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
8
- import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, CLIP_STILL_DISPOSITION_HEADER, CLIP_STILL_REASON_CODE_HEADER, CLIP_STILL_REASON_HEADER, COMPOSER_ADDON_ID, CONTAINER_CHILD_PRIORITY, ConsumableLevelSchema, DEFAULT_DISPLAY_PREFERENCE, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEVICE_HISTORY_ENERGY_KEY, DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS, DEVICE_TYPE_CONTROL_KIND, DISPLAY_PREFERENCES, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EXTENSION_SLOTS, EXTENSION_SLOT_IDS, EventCategory, ExposedDeviceSchema, FIRST_LEVEL_MACRO_CLASSES, HISTORY_CATALOG, ICON_CATEGORIES, KNOWN_CAP_NAMES, MAX_SENSOR_TRIGGER_DEVICES, MODEL_PROVIDER_IDS, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, NODE_COLOR_IDS, NodeColorIdSchema, PALETTE_ENTRY_IDS, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, QUANTITY_BASE, RECORDING_AUDIO_TRIGGER_OFFERED_DBFS, RECORDING_SOURCE_CAMSTACK_ADDON, REDACTED_SECRET, RecordingConfigSchema, RecordingStatusSchema, SECRET_CLEAR, SOURCE_CAP_ACTIVE_FIELD, STATIONARY_OVERLAY_STYLE, SUBJECT_PATH_DWELL_EPS, SUBJECT_PATH_FULL_FRAME_COVERAGE, SUBJECT_PATH_MAX_POINTS, TIMEZONES, USE_ROOT_MODEL_SETTING_KEY, assignNodeColorId, assignNodeColorId as assignNodeColorId$1, baseUnitOf, buildModelVariantGroups, buildSubjectPath, bundledCamstack, canConvertUnit, canonicalIconKey, clearModelBoundOverrides, clearModelBoundSetting, clusterStepSettingFieldsFor, collectModelBoundKeys, consumableFormOf, consumableKindOf, createDeviceProxy, createLazyTrpcSource, createSliceHandle, dehydrateSchema, deriveRecordingMode, describeModelVariant, displayUnitFor, effectiveStepSettings, findTimezone, formatParkedFor, formatReading, hasModelBoundOverrides, iconCategoryLabel, iconsInCategory, isDrawableSubjectPath, isKeychainStoredField, isModelScopedStepSettingKey, isReadingQuantity, isRootSuppliableStepId, isSecretClear, isSecretFieldView, isSecretMarker, modelBindingKey, normalizeUnit, paintHex, parseOccupancyScope, projectSubjectPath, publicEventCategories, resolveContainerPrimaryChild, resolveDeviceControlKind, resolveIconKey, resolveModelBoundSetting, resolveRecordingProfiles, resolveRootSupply, resolveVariantModelId, resolveViewableDeviceIds, searchIcons, selectAssignedProfileSlots, stepSettingSource, subjectPathSampleFromBox, subjectPathSvgPoints, tryConvertUnit, unitsForDimension, withFieldFrom, withoutField, writeModelBoundSetting } from "@camstack/types";
8
+ import { ALL_CAPABILITY_DEFINITIONS, CAM_PROFILE_ORDER, CLIP_STILL_DISPOSITION_HEADER, CLIP_STILL_REASON_CODE_HEADER, CLIP_STILL_REASON_HEADER, COMPOSER_ADDON_ID, CONTAINER_CHILD_PRIORITY, ConsumableLevelSchema, DEFAULT_DISPLAY_PREFERENCE, DEFAULT_EVENTS_BAND_BUFFER_SEC, DEVICE_HISTORY_ENERGY_KEY, DEVICE_HISTORY_QUERY_MANY_MAX_ITEMS, DEVICE_TYPE_CONTROL_KIND, DISPLAY_PREFERENCES, DeviceExportStatusSchema, DeviceFeature, DeviceRole, DeviceType, EXTENSION_SLOTS, EXTENSION_SLOT_IDS, EventCategory, ExportEntityKindSchema, ExposedDeviceSchema, ExposedEntitySchema, FIRST_LEVEL_MACRO_CLASSES, HISTORY_CATALOG, ICON_CATEGORIES, KNOWN_CAP_NAMES, MAX_SENSOR_TRIGGER_DEVICES, MODEL_PROVIDER_IDS, NAVIGATION_LIGHT_LEVEL_MAX, NAVIGATION_LIGHT_LEVEL_MIN, NODE_COLOR_IDS, NodeColorIdSchema, PALETTE_ENTRY_IDS, PET_FEEDER_MANUAL_FEED_MAX, PET_FEEDER_MANUAL_FEED_MIN, QUANTITY_BASE, RECORDING_AUDIO_TRIGGER_OFFERED_DBFS, RECORDING_SOURCE_CAMSTACK_ADDON, REDACTED_SECRET, RecordingConfigSchema, RecordingStatusSchema, SECRET_CLEAR, SOURCE_CAP_ACTIVE_FIELD, STATIONARY_OVERLAY_STYLE, SUBJECT_PATH_DWELL_EPS, SUBJECT_PATH_FULL_FRAME_COVERAGE, SUBJECT_PATH_MAX_POINTS, TIMEZONES, USE_ROOT_MODEL_SETTING_KEY, assignNodeColorId, assignNodeColorId as assignNodeColorId$1, baseUnitOf, buildModelVariantGroups, buildSubjectPath, bundledCamstack, canConvertUnit, canonicalIconKey, clearModelBoundOverrides, clearModelBoundSetting, clusterStepSettingFieldsFor, collectModelBoundKeys, consumableFormOf, consumableKindOf, createDeviceProxy, createLazyTrpcSource, createSliceHandle, dehydrateSchema, deriveRecordingMode, describeModelVariant, displayUnitFor, effectiveStepSettings, findTimezone, formatParkedFor, formatReading, hasModelBoundOverrides, iconCategoryLabel, iconsInCategory, isDrawableSubjectPath, isKeychainStoredField, isModelScopedStepSettingKey, isReadingQuantity, isRootSuppliableStepId, isSecretClear, isSecretFieldView, isSecretMarker, modelBindingKey, normalizeUnit, paintHex, parseOccupancyScope, projectSubjectPath, publicEventCategories, resolveContainerPrimaryChild, resolveDeviceControlKind, resolveIconKey, resolveModelBoundSetting, resolveRecordingProfiles, resolveRootSupply, resolveVariantModelId, resolveViewableDeviceIds, searchIcons, selectAssignedProfileSlots, stepSettingSource, subjectPathSampleFromBox, subjectPathSvgPoints, tryConvertUnit, unitsForDimension, withFieldFrom, withoutField, writeModelBoundSetting } from "@camstack/types";
9
9
  import * as __mfHostTrpcReactQuery from "@trpc/react-query";
10
10
  import { createTRPCReact } from "@trpc/react-query";
11
11
  import * as __mfHostReactDOM from "react-dom";
@@ -1682,6 +1682,19 @@ var EllipsisVertical = createLucideIcon("ellipsis-vertical", [
1682
1682
  * This source code is licensed under the ISC license.
1683
1683
  * See the LICENSE file in the root directory of this source tree.
1684
1684
  */
1685
+ var Eraser = createLucideIcon("eraser", [["path", {
1686
+ d: "M21 21H8a2 2 0 0 1-1.42-.587l-3.994-3.999a2 2 0 0 1 0-2.828l10-10a2 2 0 0 1 2.829 0l5.999 6a2 2 0 0 1 0 2.828L12.834 21",
1687
+ key: "g5wo59"
1688
+ }], ["path", {
1689
+ d: "m5.082 11.09 8.828 8.828",
1690
+ key: "1wx5vj"
1691
+ }]]);
1692
+ /**
1693
+ * @license lucide-react v0.576.0 - ISC
1694
+ *
1695
+ * This source code is licensed under the ISC license.
1696
+ * See the LICENSE file in the root directory of this source tree.
1697
+ */
1685
1698
  var ExternalLink = createLucideIcon("external-link", [
1686
1699
  ["path", {
1687
1700
  d: "M15 3h6v6",
@@ -5376,6 +5389,11 @@ var DEVICE_TYPE_META = {
5376
5389
  labelKey: "uiLibrary.deviceMeta.type.petFeeder",
5377
5390
  labelFallback: "Pet feeder"
5378
5391
  },
5392
+ [DeviceType.PetFountain]: {
5393
+ icon: Droplets,
5394
+ labelKey: "uiLibrary.deviceMeta.type.petFountain",
5395
+ labelFallback: "Pet fountain"
5396
+ },
5379
5397
  [DeviceType.Dishwasher]: {
5380
5398
  icon: Waves,
5381
5399
  labelKey: "uiLibrary.deviceMeta.type.dishwasher",
@@ -5876,7 +5894,7 @@ function lucideExportName(key) {
5876
5894
  function loadIconGlyphs() {
5877
5895
  if (fullTable !== void 0) return Promise.resolve();
5878
5896
  if (failure$1 !== void 0) return Promise.reject(failure$1);
5879
- pending ??= import("./icons-Bd6sbDsv.js").then((module) => {
5897
+ pending ??= import("./icons-Cf1xnXkh.js").then((module) => {
5880
5898
  fullTable = module;
5881
5899
  publish();
5882
5900
  }, (error) => {
@@ -11002,6 +11020,14 @@ var useDeviceExportListExposedDevices = trpc.deviceExport.listExposedDevices.use
11002
11020
  var useDeviceExportExposeDevice = trpc.deviceExport.exposeDevice.useMutation;
11003
11021
  /** Generated alias around `trpc.deviceExport.unexposeDevice.useMutation`. */
11004
11022
  var useDeviceExportUnexposeDevice = trpc.deviceExport.unexposeDevice.useMutation;
11023
+ /** Generated alias around `trpc.deviceExport.listSupportedEntityKinds.useQuery`. */
11024
+ var useDeviceExportListSupportedEntityKinds = trpc.deviceExport.listSupportedEntityKinds.useQuery;
11025
+ /** Generated alias around `trpc.deviceExport.listExposedEntities.useQuery`. */
11026
+ var useDeviceExportListExposedEntities = trpc.deviceExport.listExposedEntities.useQuery;
11027
+ /** Generated alias around `trpc.deviceExport.exposeEntity.useMutation`. */
11028
+ var useDeviceExportExposeEntity = trpc.deviceExport.exposeEntity.useMutation;
11029
+ /** Generated alias around `trpc.deviceExport.unexposeEntity.useMutation`. */
11030
+ var useDeviceExportUnexposeEntity = trpc.deviceExport.unexposeEntity.useMutation;
11005
11031
  /** Generated alias around `trpc.deviceExport.getDeviceSettingsContribution.useQuery`. */
11006
11032
  var useDeviceExportGetDeviceSettingsContribution = trpc.deviceExport.getDeviceSettingsContribution.useQuery;
11007
11033
  /** Generated alias around `trpc.deviceExport.getDeviceLiveContribution.useQuery`. */
@@ -11904,6 +11930,18 @@ var usePetFeederSetFeedSound = trpc.petFeeder.setFeedSound.useMutation;
11904
11930
  var usePetFeederSetVolume = trpc.petFeeder.setVolume.useMutation;
11905
11931
  /** Generated alias around `trpc.petFeeder.getStatus.useQuery`. */
11906
11932
  var usePetFeederGetStatus = trpc.petFeeder.getStatus.useQuery;
11933
+ /** Generated alias around `trpc.petFountain.setPump.useMutation`. */
11934
+ var usePetFountainSetPump = trpc.petFountain.setPump.useMutation;
11935
+ /** Generated alias around `trpc.petFountain.setPumpInterval.useMutation`. */
11936
+ var usePetFountainSetPumpInterval = trpc.petFountain.setPumpInterval.useMutation;
11937
+ /** Generated alias around `trpc.petFountain.setPumpOnMinutes.useMutation`. */
11938
+ var usePetFountainSetPumpOnMinutes = trpc.petFountain.setPumpOnMinutes.useMutation;
11939
+ /** Generated alias around `trpc.petFountain.setPumpOffMinutes.useMutation`. */
11940
+ var usePetFountainSetPumpOffMinutes = trpc.petFountain.setPumpOffMinutes.useMutation;
11941
+ /** Generated alias around `trpc.petFountain.resetDailyConsumption.useMutation`. */
11942
+ var usePetFountainResetDailyConsumption = trpc.petFountain.resetDailyConsumption.useMutation;
11943
+ /** Generated alias around `trpc.petFountain.getStatus.useQuery`. */
11944
+ var usePetFountainGetStatus = trpc.petFountain.getStatus.useQuery;
11907
11945
  /** Generated alias around `trpc.pipelineAnalytics.getActiveTracks.useQuery`. */
11908
11946
  var usePipelineAnalyticsGetActiveTracks = trpc.pipelineAnalytics.getActiveTracks.useQuery;
11909
11947
  /** Generated alias around `trpc.pipelineAnalytics.getTrack.useQuery`. */
@@ -48767,6 +48805,7 @@ var CONTROL_CAP_NAMES = [
48767
48805
  "media-player",
48768
48806
  "control",
48769
48807
  "pet-feeder",
48808
+ "pet-fountain",
48770
48809
  "dishwasher"
48771
48810
  ];
48772
48811
  //#endregion
@@ -53057,6 +53096,10 @@ var HOLD_DELAY_MS = 350;
53057
53096
  var HOLD_INTERVAL_MS = 70;
53058
53097
  var HOLD_ACCEL_AFTER = 8;
53059
53098
  var HOLD_FAST_STEP = 5;
53099
+ /** The slice stores the bowl as a mass in kilograms (D944); the card draws grams. */
53100
+ function bowlGrams(kilograms) {
53101
+ return kilograms === null ? null : Math.round(kilograms * 1e3);
53102
+ }
53060
53103
  function clampPortion(grams) {
53061
53104
  return Math.min(PET_FEEDER_MANUAL_FEED_MAX, Math.max(PET_FEEDER_MANUAL_FEED_MIN, grams));
53062
53105
  }
@@ -53108,7 +53151,7 @@ function PetFeederPanel({ trpc, deviceId, layout, optimistic }) {
53108
53151
  children: [/* @__PURE__ */ jsx(UtensilsCrossed, {
53109
53152
  className: "h-3.5 w-3.5",
53110
53153
  "aria-hidden": true
53111
- }), display.bowlFood ?? "—"]
53154
+ }), bowlGrams(display.bowlFood) ?? "—"]
53112
53155
  }),
53113
53156
  onMains && /* @__PURE__ */ jsxs("span", {
53114
53157
  className: "inline-flex items-center gap-0.5 text-xs text-foreground-subtle",
@@ -53154,7 +53197,7 @@ function PetFeederPanel({ trpc, deviceId, layout, optimistic }) {
53154
53197
  /* @__PURE__ */ jsxs("div", {
53155
53198
  className: "flex items-center gap-4 rounded-lg border border-border/50 bg-surface-subtle/40 p-3",
53156
53199
  children: [/* @__PURE__ */ jsx(BowlGauge, {
53157
- grams: display.bowlFood,
53200
+ grams: bowlGrams(display.bowlFood),
53158
53201
  low: display.lowFood,
53159
53202
  eating: display.eating
53160
53203
  }), /* @__PURE__ */ jsxs("div", {
@@ -53164,7 +53207,7 @@ function PetFeederPanel({ trpc, deviceId, layout, optimistic }) {
53164
53207
  children: [/* @__PURE__ */ jsx("span", {
53165
53208
  className: "text-3xl font-bold leading-none tabular-nums",
53166
53209
  style: { color: display.lowFood ? KIBBLE_LOW : KIBBLE },
53167
- children: display.bowlFood ?? "—"
53210
+ children: bowlGrams(display.bowlFood) ?? "—"
53168
53211
  }), /* @__PURE__ */ jsx("span", {
53169
53212
  className: "text-sm text-foreground-subtle",
53170
53213
  children: t("uiLibrary.petFeeder.inBowl", "in bowl")
@@ -53601,6 +53644,367 @@ function PetFeederHeroCard({ trpc, deviceId, features, optimistic }) {
53601
53644
  });
53602
53645
  }
53603
53646
  //#endregion
53647
+ //#region src/composites/device-controls/pet-fountain-panel.tsx
53648
+ /**
53649
+ * Pet-fountain controls for a `DeviceType.PetFountain` device.
53650
+ *
53651
+ * Reads the `pet-fountain` cap status slice (water level and volume, empty,
53652
+ * pump and its duty cycle, the water drunk) and renders:
53653
+ * - PetFountainInlineControl (device-list row): the tank level and a pump
53654
+ * on/off toggle.
53655
+ * - PetFountainHeroCard (device-detail hero): the tank gauge with the level
53656
+ * and the volume first, what the pet drank today / in 24 h / this hour /
53657
+ * last time, the pump switch, its duty-cycle switch and the run / rest
53658
+ * minutes. The filter is a consumable: the page's Consumables section
53659
+ * draws it, never this card (D915).
53660
+ *
53661
+ * Every reading may be unknown (`null`) and is drawn as a dash, never as
53662
+ * zero. Stored volumes are litres and durations seconds (D944); the card
53663
+ * shows millilitres and minutes. Actions are gated on `available`.
53664
+ */
53665
+ var LITRES_TO_ML = 1e3;
53666
+ var SECONDS_PER_MINUTE = 60;
53667
+ var MAX_PUMP_MINUTES = 240;
53668
+ function millilitres(litres) {
53669
+ return litres === null ? "—" : `${Math.round(litres * LITRES_TO_ML)} mL`;
53670
+ }
53671
+ function minutesOf(seconds) {
53672
+ return seconds === null ? null : Math.round(seconds / SECONDS_PER_MINUTE);
53673
+ }
53674
+ function PetFountainPanel({ trpc, deviceId, layout, optimistic }) {
53675
+ const t = useUiText();
53676
+ const { cap, slice, available } = useDeviceCapability({
53677
+ trpc,
53678
+ deviceId,
53679
+ cap: (d) => d.petFountain,
53680
+ slice: (d) => d.state.petFountain
53681
+ });
53682
+ const { display, applyOptimistic } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
53683
+ if (cap === void 0 || display === void 0) return null;
53684
+ const busy = !available;
53685
+ const fault = display.error !== null && display.error !== "no_error" ? display.error : null;
53686
+ const pumpOn = display.pumpRunning === true;
53687
+ const level = display.waterLevel;
53688
+ const setPump = (on) => {
53689
+ applyOptimistic({ pumpRunning: on });
53690
+ cap.setPump({ on });
53691
+ };
53692
+ if (layout === "compact") return /* @__PURE__ */ jsxs("div", {
53693
+ className: "inline-flex items-center gap-2",
53694
+ children: [
53695
+ (fault !== null || display.empty === true) && /* @__PURE__ */ jsx(TriangleAlert, {
53696
+ className: "h-3.5 w-3.5 text-danger",
53697
+ "aria-label": fault ?? t("uiLibrary.petFountain.empty", "Tank empty")
53698
+ }),
53699
+ /* @__PURE__ */ jsxs("span", {
53700
+ className: cn("inline-flex items-center gap-1 text-xs font-medium tabular-nums", display.empty === true ? "text-danger" : "text-foreground"),
53701
+ children: [/* @__PURE__ */ jsx(Droplet, {
53702
+ className: "h-3.5 w-3.5",
53703
+ "aria-hidden": true
53704
+ }), level === null ? "—" : `${Math.round(level)}%`]
53705
+ }),
53706
+ /* @__PURE__ */ jsx("span", {
53707
+ onClick: (e) => e.stopPropagation(),
53708
+ children: /* @__PURE__ */ jsx(Switch, {
53709
+ checked: pumpOn,
53710
+ disabled: busy,
53711
+ "aria-label": t("uiLibrary.petFountain.pump", "Pump"),
53712
+ onCheckedChange: setPump
53713
+ })
53714
+ })
53715
+ ]
53716
+ });
53717
+ const intervalOn = display.pumpIntervalEnabled === true;
53718
+ const onMinutes = minutesOf(display.pumpOnTime);
53719
+ const offMinutes = minutesOf(display.pumpOffTime);
53720
+ return /* @__PURE__ */ jsxs("div", {
53721
+ className: "flex flex-col items-stretch gap-3 rounded-lg border border-border bg-surface p-4",
53722
+ children: [
53723
+ /* @__PURE__ */ jsxs("div", {
53724
+ className: "flex items-center gap-4 rounded-lg border border-border-subtle bg-background-elevated p-3",
53725
+ children: [/* @__PURE__ */ jsx(TankGauge, {
53726
+ level,
53727
+ empty: display.empty === true
53728
+ }), /* @__PURE__ */ jsxs("div", {
53729
+ className: "flex min-w-0 flex-1 flex-col gap-1.5",
53730
+ children: [/* @__PURE__ */ jsxs("div", {
53731
+ className: "flex items-baseline gap-2",
53732
+ children: [/* @__PURE__ */ jsx("span", {
53733
+ className: cn("text-3xl font-bold leading-none tabular-nums", display.empty === true ? "text-danger" : "text-info"),
53734
+ children: level === null ? "—" : `${Math.round(level)}%`
53735
+ }), /* @__PURE__ */ jsx("span", {
53736
+ className: "text-sm tabular-nums text-foreground-muted",
53737
+ children: millilitres(display.waterVolume)
53738
+ })]
53739
+ }), /* @__PURE__ */ jsx(StatusLine, {
53740
+ empty: display.empty,
53741
+ pumpRunning: display.pumpRunning
53742
+ })]
53743
+ })]
53744
+ }),
53745
+ fault !== null && /* @__PURE__ */ jsxs("div", {
53746
+ className: "flex items-start gap-2 rounded-lg border border-danger/40 bg-danger/10 px-3 py-2 text-xs font-medium text-danger",
53747
+ children: [/* @__PURE__ */ jsx(TriangleAlert, {
53748
+ className: "mt-px h-4 w-4 shrink-0",
53749
+ "aria-hidden": true
53750
+ }), /* @__PURE__ */ jsx("span", {
53751
+ className: "min-w-0 break-words",
53752
+ children: fault
53753
+ })]
53754
+ }),
53755
+ /* @__PURE__ */ jsx(Section$1, {
53756
+ label: t("uiLibrary.petFountain.consumption", "Water drunk"),
53757
+ children: /* @__PURE__ */ jsxs("div", {
53758
+ className: "grid grid-cols-2 gap-2 sm:grid-cols-4",
53759
+ children: [
53760
+ /* @__PURE__ */ jsx(Stat, {
53761
+ label: t("uiLibrary.petFountain.today", "Today"),
53762
+ value: display.todayDrink
53763
+ }),
53764
+ /* @__PURE__ */ jsx(Stat, {
53765
+ label: t("uiLibrary.petFountain.last24h", "Last 24 h"),
53766
+ value: display.last24hDrink
53767
+ }),
53768
+ /* @__PURE__ */ jsx(Stat, {
53769
+ label: t("uiLibrary.petFountain.thisHour", "This hour"),
53770
+ value: display.currentHourDrink
53771
+ }),
53772
+ /* @__PURE__ */ jsx(Stat, {
53773
+ label: t("uiLibrary.petFountain.lastDrink", "Last drink"),
53774
+ value: display.lastDrink
53775
+ })
53776
+ ]
53777
+ })
53778
+ }),
53779
+ /* @__PURE__ */ jsx(Section$1, {
53780
+ label: t("uiLibrary.petFountain.pumpSection", "Controls"),
53781
+ children: /* @__PURE__ */ jsxs("div", {
53782
+ className: "flex flex-col gap-2",
53783
+ children: [
53784
+ /* @__PURE__ */ jsx(SwitchRow, {
53785
+ icon: pumpOn ? /* @__PURE__ */ jsx(Play, { className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Pause, { className: "h-4 w-4" }),
53786
+ label: t("uiLibrary.petFountain.pump", "Pump"),
53787
+ checked: pumpOn,
53788
+ disabled: busy,
53789
+ onChange: setPump
53790
+ }),
53791
+ /* @__PURE__ */ jsx(SwitchRow, {
53792
+ icon: /* @__PURE__ */ jsx(Timer, { className: "h-4 w-4" }),
53793
+ label: t("uiLibrary.petFountain.cycle", "On / off cycle"),
53794
+ checked: intervalOn,
53795
+ disabled: busy,
53796
+ onChange: (on) => {
53797
+ applyOptimistic({ pumpIntervalEnabled: on });
53798
+ cap.setPumpInterval({ on });
53799
+ }
53800
+ }),
53801
+ intervalOn && /* @__PURE__ */ jsxs("div", {
53802
+ className: "flex flex-col gap-2",
53803
+ children: [/* @__PURE__ */ jsx(MinutesStepper, {
53804
+ label: t("uiLibrary.petFountain.runMinutes", "Runs for"),
53805
+ minutes: onMinutes,
53806
+ disabled: busy,
53807
+ onChange: (minutes) => {
53808
+ applyOptimistic({ pumpOnTime: minutes * SECONDS_PER_MINUTE });
53809
+ cap.setPumpOnMinutes({ minutes });
53810
+ }
53811
+ }), /* @__PURE__ */ jsx(MinutesStepper, {
53812
+ label: t("uiLibrary.petFountain.restMinutes", "Rests for"),
53813
+ minutes: offMinutes,
53814
+ disabled: busy,
53815
+ onChange: (minutes) => {
53816
+ applyOptimistic({ pumpOffTime: minutes * SECONDS_PER_MINUTE });
53817
+ cap.setPumpOffMinutes({ minutes });
53818
+ }
53819
+ })]
53820
+ })
53821
+ ]
53822
+ })
53823
+ }),
53824
+ /* @__PURE__ */ jsxs(Button, {
53825
+ variant: "outline",
53826
+ size: "sm",
53827
+ disabled: busy,
53828
+ onClick: () => void cap.resetDailyConsumption({}),
53829
+ children: [/* @__PURE__ */ jsx(Eraser, {
53830
+ className: "h-4 w-4",
53831
+ "aria-hidden": true
53832
+ }), t("uiLibrary.petFountain.clearDaily", "Clear daily count")]
53833
+ })
53834
+ ]
53835
+ });
53836
+ }
53837
+ /** A tank outline whose water rises with the level; danger-coloured when empty. */
53838
+ function TankGauge({ level, empty }) {
53839
+ const t = useUiText();
53840
+ const top = 58 - Math.min(1, Math.max(0, (level ?? 0) / 100)) * 40;
53841
+ return /* @__PURE__ */ jsxs("svg", {
53842
+ width: 72,
53843
+ height: 72,
53844
+ viewBox: "0 0 72 72",
53845
+ role: "img",
53846
+ "aria-label": level === null ? t("uiLibrary.petFountain.levelUnknown", "Water level unknown") : t("uiLibrary.petFountain.levelPercent", "{{percent}}% water", { percent: Math.round(level) }),
53847
+ className: "shrink-0",
53848
+ children: [
53849
+ /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx("clipPath", {
53850
+ id: "pfn-tank-clip",
53851
+ children: /* @__PURE__ */ jsx("rect", {
53852
+ x: "18",
53853
+ y: "14",
53854
+ width: "36",
53855
+ height: "46",
53856
+ rx: "6"
53857
+ })
53858
+ }) }),
53859
+ /* @__PURE__ */ jsx("g", {
53860
+ clipPath: "url(#pfn-tank-clip)",
53861
+ children: /* @__PURE__ */ jsx("rect", {
53862
+ x: "18",
53863
+ y: top,
53864
+ width: "36",
53865
+ height: "46",
53866
+ className: empty ? "fill-danger" : "fill-info",
53867
+ opacity: .75
53868
+ })
53869
+ }),
53870
+ /* @__PURE__ */ jsx("rect", {
53871
+ x: "18",
53872
+ y: "14",
53873
+ width: "36",
53874
+ height: "46",
53875
+ rx: "6",
53876
+ fill: "none",
53877
+ strokeWidth: "2.5",
53878
+ className: "stroke-border"
53879
+ }),
53880
+ /* @__PURE__ */ jsx("rect", {
53881
+ x: "28",
53882
+ y: "8",
53883
+ width: "16",
53884
+ height: "6",
53885
+ rx: "2",
53886
+ className: "fill-border"
53887
+ })
53888
+ ]
53889
+ });
53890
+ }
53891
+ function StatusLine({ empty, pumpRunning }) {
53892
+ const t = useUiText();
53893
+ if (empty === true) return /* @__PURE__ */ jsxs("span", {
53894
+ className: "inline-flex items-center gap-1 text-xs font-medium text-danger",
53895
+ children: [/* @__PURE__ */ jsx(Droplet, {
53896
+ className: "h-3.5 w-3.5",
53897
+ "aria-hidden": true
53898
+ }), t("uiLibrary.petFountain.empty", "Tank empty")]
53899
+ });
53900
+ if (pumpRunning === true) return /* @__PURE__ */ jsxs("span", {
53901
+ className: "inline-flex items-center gap-1 text-xs font-medium text-info",
53902
+ children: [/* @__PURE__ */ jsx(Droplets, {
53903
+ className: "h-3.5 w-3.5",
53904
+ "aria-hidden": true
53905
+ }), t("uiLibrary.petFountain.pumpRunning", "Pump running")]
53906
+ });
53907
+ return /* @__PURE__ */ jsxs("span", {
53908
+ className: "inline-flex items-center gap-1 text-xs text-foreground-subtle",
53909
+ children: [/* @__PURE__ */ jsx(Pause, {
53910
+ className: "h-3.5 w-3.5",
53911
+ "aria-hidden": true
53912
+ }), pumpRunning === false ? t("uiLibrary.petFountain.pumpIdle", "Pump idle") : t("uiLibrary.petFountain.pumpUnknown", "Pump state unknown")]
53913
+ });
53914
+ }
53915
+ function Section$1({ label, children }) {
53916
+ return /* @__PURE__ */ jsxs("div", {
53917
+ className: "flex flex-col gap-1",
53918
+ children: [/* @__PURE__ */ jsx("span", {
53919
+ className: "text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle",
53920
+ children: label
53921
+ }), children]
53922
+ });
53923
+ }
53924
+ function Stat({ label, value }) {
53925
+ return /* @__PURE__ */ jsxs("div", {
53926
+ className: "flex flex-col rounded-lg border border-border-subtle bg-background-elevated px-3 py-2",
53927
+ children: [/* @__PURE__ */ jsx("span", {
53928
+ className: "text-[11px] text-foreground-subtle",
53929
+ children: label
53930
+ }), /* @__PURE__ */ jsx("span", {
53931
+ className: "text-sm font-semibold tabular-nums text-foreground",
53932
+ children: millilitres(value)
53933
+ })]
53934
+ });
53935
+ }
53936
+ function SwitchRow({ icon, label, checked, disabled, onChange }) {
53937
+ return /* @__PURE__ */ jsxs("div", {
53938
+ className: "flex items-center justify-between gap-3 rounded-lg border border-border-subtle bg-background-elevated px-3 py-2",
53939
+ children: [/* @__PURE__ */ jsxs("span", {
53940
+ className: "inline-flex items-center gap-2 text-sm text-foreground",
53941
+ children: [/* @__PURE__ */ jsx("span", {
53942
+ className: "text-foreground-subtle",
53943
+ children: icon
53944
+ }), label]
53945
+ }), /* @__PURE__ */ jsx(Switch, {
53946
+ checked,
53947
+ disabled,
53948
+ "aria-label": label,
53949
+ onCheckedChange: onChange
53950
+ })]
53951
+ });
53952
+ }
53953
+ function MinutesStepper({ label, minutes, disabled, onChange }) {
53954
+ const t = useUiText();
53955
+ const current = minutes ?? 0;
53956
+ const step = (delta) => onChange(Math.min(MAX_PUMP_MINUTES, Math.max(0, current + delta)));
53957
+ return /* @__PURE__ */ jsxs("div", {
53958
+ className: "flex items-center justify-between gap-2 rounded-lg border border-border-subtle bg-background-elevated px-3 py-2",
53959
+ children: [/* @__PURE__ */ jsx("span", {
53960
+ className: "text-sm text-foreground",
53961
+ children: label
53962
+ }), /* @__PURE__ */ jsxs("div", {
53963
+ className: "flex items-center gap-2",
53964
+ children: [
53965
+ /* @__PURE__ */ jsx(Button, {
53966
+ variant: "outline",
53967
+ size: "sm",
53968
+ "aria-label": t("uiLibrary.petFountain.decrease", "Decrease {{label}}", { label }),
53969
+ disabled: disabled || minutes === null || current <= 0,
53970
+ onClick: () => step(-1),
53971
+ children: "−"
53972
+ }),
53973
+ /* @__PURE__ */ jsx("span", {
53974
+ className: "w-14 text-center text-sm font-semibold tabular-nums text-foreground",
53975
+ children: minutes === null ? "—" : t("uiLibrary.petFountain.minutes", "{{count}} min", { count: current })
53976
+ }),
53977
+ /* @__PURE__ */ jsx(Button, {
53978
+ variant: "outline",
53979
+ size: "sm",
53980
+ "aria-label": t("uiLibrary.petFountain.increase", "Increase {{label}}", { label }),
53981
+ disabled: disabled || minutes === null || current >= MAX_PUMP_MINUTES,
53982
+ onClick: () => step(1),
53983
+ children: "+"
53984
+ })
53985
+ ]
53986
+ })]
53987
+ });
53988
+ }
53989
+ function PetFountainInlineControl({ trpc, deviceId, features, optimistic }) {
53990
+ return /* @__PURE__ */ jsx(PetFountainPanel, {
53991
+ trpc,
53992
+ deviceId,
53993
+ features,
53994
+ layout: "compact",
53995
+ optimistic
53996
+ });
53997
+ }
53998
+ function PetFountainHeroCard({ trpc, deviceId, features, optimistic }) {
53999
+ return /* @__PURE__ */ jsx(PetFountainPanel, {
54000
+ trpc,
54001
+ deviceId,
54002
+ features,
54003
+ layout: "full",
54004
+ optimistic
54005
+ });
54006
+ }
54007
+ //#endregion
53604
54008
  //#region src/composites/device-controls/dishwasher-control.tsx
53605
54009
  /**
53606
54010
  * Dishwasher controls for a `DeviceType.Dishwasher` device.
@@ -56723,6 +57127,10 @@ var CONTROL_KIND_COMPONENTS = {
56723
57127
  InlineControl: PetFeederInlineControl,
56724
57128
  HeroCard: PetFeederHeroCard
56725
57129
  },
57130
+ "pet-fountain": {
57131
+ InlineControl: PetFountainInlineControl,
57132
+ HeroCard: PetFountainHeroCard
57133
+ },
56726
57134
  dishwasher: {
56727
57135
  InlineControl: DishwasherInlineControl,
56728
57136
  HeroCard: DishwasherHeroCard
@@ -56804,6 +57212,7 @@ var CONTROL_FILLS = {
56804
57212
  [DeviceType.Container]: false,
56805
57213
  [DeviceType.Image]: false,
56806
57214
  [DeviceType.PetFeeder]: false,
57215
+ [DeviceType.PetFountain]: false,
56807
57216
  [DeviceType.Dishwasher]: false,
56808
57217
  [DeviceType.Washer]: false,
56809
57218
  [DeviceType.Dryer]: false
@@ -60811,6 +61220,88 @@ function deselectShown(current, shown) {
60811
61220
  return new Set([...current].filter((id) => !drop.has(id)));
60812
61221
  }
60813
61222
  //#endregion
61223
+ //#region src/composites/export-entity-rows.ts
61224
+ /**
61225
+ * The action and notification-target rows of the device export table (D968).
61226
+ *
61227
+ * An action and a notifier are list entries, never devices (D954): they are
61228
+ * merged into the SAME table as extra rows, built only from the kinds the
61229
+ * exporter answered. A kinds list that was not answered is UNKNOWN, not
61230
+ * "supports nothing" (D315) — it yields devices only and no filter entry, and
61231
+ * says nothing about what the exporter cannot do.
61232
+ *
61233
+ * Pure functions, so the rules are pinned without a DOM.
61234
+ */
61235
+ /** The type-filter ids of the entity kinds, apart from every device type. */
61236
+ var ENTITY_FILTER_IDS = {
61237
+ action: "entity:action",
61238
+ notifier: "entity:notifier"
61239
+ };
61240
+ var KindsSchema = z.array(ExportEntityKindSchema);
61241
+ var NamedSchema = z.array(z.object({
61242
+ id: z.string(),
61243
+ name: z.string()
61244
+ }));
61245
+ var ExposedSchema = z.array(ExposedEntitySchema);
61246
+ /**
61247
+ * The non-device kinds the exporter answered, or null when it did not answer
61248
+ * (unknown — never an empty set).
61249
+ */
61250
+ function supportedEntityKinds(data) {
61251
+ const parsed = KindsSchema.safeParse(data);
61252
+ if (!parsed.success) return null;
61253
+ const kinds = /* @__PURE__ */ new Set();
61254
+ for (const kind of parsed.data) if (kind === "action" || kind === "notifier") kinds.add(kind);
61255
+ return kinds;
61256
+ }
61257
+ function buildEntityRows(input) {
61258
+ const { kinds } = input;
61259
+ if (kinds === null) return [];
61260
+ const exposed = ExposedSchema.safeParse(input.exposed);
61261
+ const exposedActions = /* @__PURE__ */ new Set();
61262
+ const exposedTargets = /* @__PURE__ */ new Set();
61263
+ if (exposed.success) {
61264
+ for (const row of exposed.data) if (row.entity.kind === "action") exposedActions.add(row.entity.actionId);
61265
+ else if (row.entity.kind === "notifier") exposedTargets.add(row.entity.targetId);
61266
+ }
61267
+ const rows = [];
61268
+ if (kinds.has("action")) {
61269
+ const actions = NamedSchema.safeParse(input.actions);
61270
+ for (const a of actions.success ? actions.data : []) rows.push({
61271
+ kind: "action",
61272
+ key: `action:${a.id}`,
61273
+ ref: {
61274
+ kind: "action",
61275
+ actionId: a.id
61276
+ },
61277
+ name: a.name,
61278
+ exposed: exposedActions.has(a.id)
61279
+ });
61280
+ }
61281
+ if (kinds.has("notifier")) {
61282
+ const targets = NamedSchema.safeParse(input.targets);
61283
+ for (const t of targets.success ? targets.data : []) rows.push({
61284
+ kind: "notifier",
61285
+ key: `notifier:${t.id}`,
61286
+ ref: {
61287
+ kind: "notifier",
61288
+ targetId: t.id
61289
+ },
61290
+ name: t.name,
61291
+ exposed: exposedTargets.has(t.id)
61292
+ });
61293
+ }
61294
+ return rows;
61295
+ }
61296
+ /** The type-filter ids to add beside the device types: one per SUPPORTED kind. */
61297
+ function entityFilterOptionIds(kinds) {
61298
+ if (kinds === null) return [];
61299
+ const ids = [];
61300
+ if (kinds.has("action")) ids.push(ENTITY_FILTER_IDS.action);
61301
+ if (kinds.has("notifier")) ids.push(ENTITY_FILTER_IDS.notifier);
61302
+ return ids;
61303
+ }
61304
+ //#endregion
60814
61305
  //#region src/composites/device-export-panel.tsx
60815
61306
  /**
60816
61307
  * DeviceExportPanel — generic, addon-agnostic surface for the
@@ -61030,19 +61521,28 @@ function ExportSelectCell({ device, checked, onToggle }) {
61030
61521
  * of these live in one table, and "Expose" alone names none of them.
61031
61522
  */
61032
61523
  function ExportRowToggle({ addonId, device, exposed, busy, onToggle }) {
61524
+ return /* @__PURE__ */ jsx(ExposeToggleButton, {
61525
+ addonId,
61526
+ label: useDeviceLabel(device, "compact"),
61527
+ exposed,
61528
+ busy,
61529
+ onToggle: (action) => onToggle(device, action)
61530
+ });
61531
+ }
61532
+ /** The Expose / Exposed button every row kind (device, action, notifier) shares. */
61533
+ function ExposeToggleButton({ addonId, label, exposed, busy, onToggle }) {
61033
61534
  const t = useUiText();
61034
- const deviceLabel = useDeviceLabel(device, "compact");
61035
61535
  const handleClick = (e) => {
61036
61536
  e.stopPropagation();
61037
61537
  if (busy) return;
61038
- onToggle(device, exposed ? "unexpose" : "expose");
61538
+ onToggle(exposed ? "unexpose" : "expose");
61039
61539
  };
61040
61540
  return /* @__PURE__ */ jsx(Button, {
61041
61541
  size: "sm",
61042
61542
  variant: exposed ? "ghost" : "primary",
61043
61543
  disabled: busy,
61044
61544
  onClick: handleClick,
61045
- "aria-label": exposed ? t("uiLibrary.deviceExport.unexposeDevice", "Unexpose {{name}}", { name: deviceLabel }) : t("uiLibrary.deviceExport.exposeDevice", "Expose {{name}}", { name: deviceLabel }),
61545
+ "aria-label": exposed ? t("uiLibrary.deviceExport.unexposeDevice", "Unexpose {{name}}", { name: label }) : t("uiLibrary.deviceExport.exposeDevice", "Expose {{name}}", { name: label }),
61046
61546
  title: exposed ? t("uiLibrary.deviceExport.stopTitle", "Stop exposing to \"{{addon}}\"", { addon: addonId }) : t("uiLibrary.deviceExport.exposeTitle", "Expose to \"{{addon}}\"", { addon: addonId }),
61047
61547
  children: exposed ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Unlink2, { className: "mr-1 h-3.5 w-3.5" }), t("uiLibrary.deviceExport.exposed", "Exposed")] }) : /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Share2, { className: "mr-1 h-3.5 w-3.5" }), t("uiLibrary.deviceExport.expose", "Expose")] })
61048
61548
  });
@@ -61123,11 +61623,34 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61123
61623
  addonId
61124
61624
  }, { retry: false });
61125
61625
  const devicesQuery = useDeviceManagerListAll({ projection: "slim" }, { refetchInterval: FLEET_POLL_INTERVAL_MS });
61626
+ const entityKindsQuery = useDeviceExportListSupportedEntityKinds({
61627
+ nodeId: "hub",
61628
+ addonId
61629
+ }, { retry: false });
61630
+ const entityKinds = useMemo(() => supportedEntityKinds(entityKindsQuery.data), [entityKindsQuery.data]);
61631
+ const exposedEntitiesQuery = useDeviceExportListExposedEntities({
61632
+ nodeId: "hub",
61633
+ addonId
61634
+ }, {
61635
+ refetchInterval: STATUS_POLL_INTERVAL_MS,
61636
+ retry: false,
61637
+ enabled: entityKinds !== null
61638
+ });
61639
+ const actionsQuery = useActionsList({}, {
61640
+ refetchInterval: FLEET_POLL_INTERVAL_MS,
61641
+ enabled: entityKinds?.has("action") === true
61642
+ });
61643
+ const targetsQuery = useNotificationOutputListTargets({}, {
61644
+ refetchInterval: FLEET_POLL_INTERVAL_MS,
61645
+ enabled: entityKinds?.has("notifier") === true
61646
+ });
61126
61647
  const invalidate = useCallback(() => {
61127
61648
  queryClient.invalidateQueries({ queryKey: [["deviceExport"]] });
61128
61649
  }, [queryClient]);
61129
61650
  const exposeMutation = useDeviceExportExposeDevice({ onSuccess: invalidate });
61130
61651
  const unexposeMutation = useDeviceExportUnexposeDevice({ onSuccess: invalidate });
61652
+ const exposeEntityMutation = useDeviceExportExposeEntity({ onSuccess: invalidate });
61653
+ const unexposeEntityMutation = useDeviceExportUnexposeEntity({ onSuccess: invalidate });
61131
61654
  const status = useMemo(() => parseStatus(statusQuery.data), [statusQuery.data]);
61132
61655
  const exposed = useMemo(() => {
61133
61656
  const parsed = ExposedDeviceArraySchema.safeParse(exposedQuery.data);
@@ -61157,10 +61680,37 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61157
61680
  }
61158
61681
  return rows;
61159
61682
  }, [devicesQuery.data, supportedKinds]);
61683
+ const entityRows = useMemo(() => buildEntityRows({
61684
+ kinds: entityKinds,
61685
+ actions: actionsQuery.data,
61686
+ targets: targetsQuery.data,
61687
+ exposed: exposedEntitiesQuery.data
61688
+ }), [
61689
+ entityKinds,
61690
+ actionsQuery.data,
61691
+ targetsQuery.data,
61692
+ exposedEntitiesQuery.data
61693
+ ]);
61694
+ const typeFilterOptions = useMemo(() => {
61695
+ const entityOptions = entityFilterOptionIds(entityKinds).map((id) => id === ENTITY_FILTER_IDS.action ? {
61696
+ id,
61697
+ label: t("uiLibrary.deviceExport.typeAction", "Action"),
61698
+ icon: Play
61699
+ } : {
61700
+ id,
61701
+ label: t("uiLibrary.deviceExport.typeNotifier", "Notifier"),
61702
+ icon: Bell
61703
+ });
61704
+ return [...supportedTypeOptions, ...entityOptions];
61705
+ }, [
61706
+ supportedTypeOptions,
61707
+ entityKinds,
61708
+ t
61709
+ ]);
61160
61710
  const linkState = status?.linkState ?? "unlinked";
61161
- const loading = statusQuery.isLoading || exposedQuery.isLoading || kindsQuery.isLoading || devicesQuery.isLoading;
61711
+ const loading = statusQuery.isLoading || exposedQuery.isLoading || kindsQuery.isLoading || devicesQuery.isLoading || entityKindsQuery.isLoading;
61162
61712
  const exposedCount = status?.exposedDeviceCount ?? exposedIds.size;
61163
- const busy = exposeMutation.isPending || unexposeMutation.isPending;
61713
+ const busy = exposeMutation.isPending || unexposeMutation.isPending || exposeEntityMutation.isPending || unexposeEntityMutation.isPending;
61164
61714
  const [selectedIds, setSelectedIds] = useState(() => /* @__PURE__ */ new Set());
61165
61715
  const [outcome, setOutcome] = useState(null);
61166
61716
  const [running, setRunning] = useState(false);
@@ -61227,10 +61777,71 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61227
61777
  labelFor,
61228
61778
  running
61229
61779
  ]);
61780
+ /**
61781
+ * Expose / unexpose ONE action or notification target. Same contract as the
61782
+ * device runner: the result is recorded either way and a refusal is named on
61783
+ * screen, with the entity (it has no device id to tag).
61784
+ */
61785
+ const runEntityExport = useCallback(async (action, row) => {
61786
+ if (running) return;
61787
+ setRunning(true);
61788
+ setOutcome(null);
61789
+ const mutation = action === "expose" ? exposeEntityMutation : unexposeEntityMutation;
61790
+ const succeeded = [];
61791
+ const failed = [];
61792
+ try {
61793
+ await mutation.mutateAsync({
61794
+ entity: row.ref,
61795
+ nodeId: "hub",
61796
+ addonId
61797
+ });
61798
+ succeeded.push(row.name);
61799
+ } catch (err) {
61800
+ const message = err instanceof Error ? err.message : String(err);
61801
+ console.error(`[device-export] ${action} ${row.kind} failed`, {
61802
+ tags: row.ref.kind === "action" ? { actionId: row.ref.actionId } : { targetId: row.ref.targetId },
61803
+ addonId,
61804
+ error: message
61805
+ });
61806
+ failed.push({
61807
+ label: row.name,
61808
+ message
61809
+ });
61810
+ }
61811
+ setOutcome({
61812
+ action,
61813
+ total: 1,
61814
+ succeeded,
61815
+ failed
61816
+ });
61817
+ setRunning(false);
61818
+ }, [
61819
+ addonId,
61820
+ exposeEntityMutation,
61821
+ unexposeEntityMutation,
61822
+ running
61823
+ ]);
61230
61824
  const [bulkFilters, setBulkFilters] = useState(NO_EXPORT_FILTERS);
61231
61825
  const roleOptions = useMemo(() => roleFilterOptions(candidateDevices), [candidateDevices]);
61232
61826
  const providerOptions = useMemo(() => providerFilterOptions(candidateDevices), [candidateDevices]);
61233
61827
  const shownDevices = useMemo(() => applyExportFilters(candidateDevices, bulkFilters), [candidateDevices, bulkFilters]);
61828
+ const shownRows = useMemo(() => {
61829
+ const deviceRows = shownDevices.map((device) => ({
61830
+ kind: "device",
61831
+ key: String(device.id),
61832
+ device
61833
+ }));
61834
+ const entities = bulkFilters.roles.length > 0 || bulkFilters.providers.length > 0 ? [] : entityRows.map((entity) => ({
61835
+ kind: "entity",
61836
+ key: entity.key,
61837
+ entity
61838
+ }));
61839
+ return [...deviceRows, ...entities];
61840
+ }, [
61841
+ shownDevices,
61842
+ entityRows,
61843
+ bulkFilters
61844
+ ]);
61234
61845
  const setRoleFilter = useCallback((roles) => setBulkFilters((f) => ({
61235
61846
  ...f,
61236
61847
  roles
@@ -61249,27 +61860,35 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61249
61860
  const onRowToggle = useCallback((device, action) => {
61250
61861
  runExport(action, [String(device.id)]);
61251
61862
  }, [runExport]);
61252
- const onRowClick = useCallback((device) => onOpenDevice?.(String(device.id)), [onOpenDevice]);
61253
- const getKey = useCallback((device) => String(device.id), []);
61254
- const getSearchText = useCallback((device) => `${device.name} ${device.stableId}`, []);
61255
- const getFilterType = useCallback((device) => device.type, []);
61863
+ const onRowClick = useCallback((row) => {
61864
+ if (row.kind === "device") onOpenDevice?.(String(row.device.id));
61865
+ }, [onOpenDevice]);
61866
+ const getKey = useCallback((row) => row.key, []);
61867
+ const getSearchText = useCallback((row) => row.kind === "device" ? `${row.device.name} ${row.device.stableId}` : row.entity.name, []);
61868
+ const getFilterType = useCallback((row) => row.kind === "device" ? row.device.type : ENTITY_FILTER_IDS[row.entity.kind], []);
61256
61869
  const columns = useMemo(() => [
61257
61870
  {
61258
61871
  key: "select",
61259
61872
  header: "",
61260
61873
  headerClassName: "w-8",
61261
- cell: (device) => /* @__PURE__ */ jsx(ExportSelectCell, {
61262
- device,
61263
- checked: selectedIds.has(String(device.id)),
61264
- onToggle: () => toggleSelection(String(device.id))
61265
- })
61874
+ cell: (row) => row.kind === "device" ? /* @__PURE__ */ jsx(ExportSelectCell, {
61875
+ device: row.device,
61876
+ checked: selectedIds.has(String(row.device.id)),
61877
+ onToggle: () => toggleSelection(String(row.device.id))
61878
+ }) : null
61266
61879
  },
61267
61880
  {
61268
61881
  key: "type",
61269
61882
  header: t("uiLibrary.deviceExport.colType", "Type"),
61270
61883
  headerClassName: "w-32",
61271
- cell: (device) => {
61272
- const meta = deviceTypeMetaOf(device.type, t);
61884
+ cell: (row) => {
61885
+ const meta = row.kind === "device" ? deviceTypeMetaOf(row.device.type, t) : row.entity.kind === "action" ? {
61886
+ label: t("uiLibrary.deviceExport.typeAction", "Action"),
61887
+ icon: Play
61888
+ } : {
61889
+ label: t("uiLibrary.deviceExport.typeNotifier", "Notifier"),
61890
+ icon: Bell
61891
+ };
61273
61892
  const TypeIcon = meta.icon;
61274
61893
  return /* @__PURE__ */ jsxs("span", {
61275
61894
  className: "inline-flex items-center gap-1.5 text-[11px] text-foreground-subtle",
@@ -61280,10 +61899,13 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61280
61899
  {
61281
61900
  key: "name",
61282
61901
  header: t("uiLibrary.deviceExport.colName", "Name"),
61283
- cell: (device) => /* @__PURE__ */ jsx(DeviceName, {
61284
- device,
61902
+ cell: (row) => row.kind === "device" ? /* @__PURE__ */ jsx(DeviceName, {
61903
+ device: row.device,
61285
61904
  form: "compact",
61286
61905
  className: "text-xs font-medium text-foreground"
61906
+ }) : /* @__PURE__ */ jsx("span", {
61907
+ className: "text-xs font-medium text-foreground",
61908
+ children: row.entity.name
61287
61909
  })
61288
61910
  },
61289
61911
  {
@@ -61291,12 +61913,18 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61291
61913
  header: t("uiLibrary.deviceExport.colExport", "Export"),
61292
61914
  headerClassName: "w-32 text-right",
61293
61915
  cellClassName: "text-right",
61294
- cell: (device) => /* @__PURE__ */ jsx(ExportRowToggle, {
61916
+ cell: (row) => row.kind === "device" ? /* @__PURE__ */ jsx(ExportRowToggle, {
61295
61917
  addonId,
61296
- device,
61297
- exposed: exposedIds.has(String(device.id)),
61918
+ device: row.device,
61919
+ exposed: exposedIds.has(String(row.device.id)),
61298
61920
  busy,
61299
61921
  onToggle: onRowToggle
61922
+ }) : /* @__PURE__ */ jsx(ExposeToggleButton, {
61923
+ addonId,
61924
+ label: row.entity.name,
61925
+ exposed: row.entity.exposed,
61926
+ busy,
61927
+ onToggle: (action) => void runEntityExport(action, row.entity)
61300
61928
  })
61301
61929
  }
61302
61930
  ], [
@@ -61304,67 +61932,71 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61304
61932
  busy,
61305
61933
  exposedIds,
61306
61934
  onRowToggle,
61935
+ runEntityExport,
61307
61936
  selectedIds,
61308
61937
  toggleSelection,
61309
61938
  t
61310
61939
  ]);
61311
- const renderToolbar = useCallback(({ filtered }) => /* @__PURE__ */ jsxs("span", {
61312
- className: "inline-flex flex-wrap items-center gap-1.5",
61313
- children: [
61314
- /* @__PURE__ */ jsx(MultiSelectDropdown, {
61315
- label: t("uiLibrary.deviceExport.filterRole", "Role"),
61316
- options: roleOptions,
61317
- selected: bulkFilters.roles,
61318
- onChange: setRoleFilter
61319
- }),
61320
- /* @__PURE__ */ jsx(MultiSelectDropdown, {
61321
- label: t("uiLibrary.deviceExport.filterProvider", "Provider"),
61322
- options: providerOptions,
61323
- selected: bulkFilters.providers,
61324
- onChange: setProviderFilter
61325
- }),
61326
- /* @__PURE__ */ jsx(Button, {
61327
- size: "sm",
61328
- variant: "secondary",
61329
- disabled: filtered.length === 0,
61330
- onClick: () => setSelectedIds((current) => selectShown(current, filtered)),
61331
- children: t("uiLibrary.deviceExport.selectShown", "Select {{count}} shown", { count: filtered.length })
61332
- }),
61333
- selectedIds.size > 0 && /* @__PURE__ */ jsxs(Fragment$1, { children: [
61334
- /* @__PURE__ */ jsx(Button, {
61335
- size: "sm",
61336
- variant: "ghost",
61337
- onClick: () => setSelectedIds((current) => deselectShown(current, filtered)),
61338
- children: t("uiLibrary.deviceExport.deselectShown", "Deselect shown")
61339
- }),
61340
- /* @__PURE__ */ jsx("span", {
61341
- "data-testid": "export-selection-count",
61342
- className: "text-[11px] text-foreground-subtle",
61343
- children: t("uiLibrary.deviceExport.selected", "{{count}} selected", { count: selectedIds.size })
61940
+ const renderToolbar = useCallback(({ filtered: filteredRows }) => {
61941
+ const filtered = filteredRows.flatMap((row) => row.kind === "device" ? [row.device] : []);
61942
+ return /* @__PURE__ */ jsxs("span", {
61943
+ className: "inline-flex flex-wrap items-center gap-1.5",
61944
+ children: [
61945
+ /* @__PURE__ */ jsx(MultiSelectDropdown, {
61946
+ label: t("uiLibrary.deviceExport.filterRole", "Role"),
61947
+ options: roleOptions,
61948
+ selected: bulkFilters.roles,
61949
+ onChange: setRoleFilter
61344
61950
  }),
61345
- /* @__PURE__ */ jsx(Button, {
61346
- size: "sm",
61347
- variant: "primary",
61348
- disabled: busy,
61349
- onClick: exposeSelected,
61350
- children: t("uiLibrary.deviceExport.exposeN", "Expose {{count}}", { count: selectedIds.size })
61951
+ /* @__PURE__ */ jsx(MultiSelectDropdown, {
61952
+ label: t("uiLibrary.deviceExport.filterProvider", "Provider"),
61953
+ options: providerOptions,
61954
+ selected: bulkFilters.providers,
61955
+ onChange: setProviderFilter
61351
61956
  }),
61352
61957
  /* @__PURE__ */ jsx(Button, {
61353
61958
  size: "sm",
61354
61959
  variant: "secondary",
61355
- disabled: busy,
61356
- onClick: unexposeSelected,
61357
- children: t("uiLibrary.deviceExport.unexposeN", "Unexpose {{count}}", { count: selectedIds.size })
61960
+ disabled: filtered.length === 0,
61961
+ onClick: () => setSelectedIds((current) => selectShown(current, filtered)),
61962
+ children: t("uiLibrary.deviceExport.selectShown", "Select {{count}} shown", { count: filtered.length })
61358
61963
  }),
61359
- /* @__PURE__ */ jsx(Button, {
61360
- size: "sm",
61361
- variant: "ghost",
61362
- onClick: clearSelection,
61363
- children: t("uiLibrary.deviceExport.clear", "Clear")
61364
- })
61365
- ] })
61366
- ]
61367
- }), [
61964
+ selectedIds.size > 0 && /* @__PURE__ */ jsxs(Fragment$1, { children: [
61965
+ /* @__PURE__ */ jsx(Button, {
61966
+ size: "sm",
61967
+ variant: "ghost",
61968
+ onClick: () => setSelectedIds((current) => deselectShown(current, filtered)),
61969
+ children: t("uiLibrary.deviceExport.deselectShown", "Deselect shown")
61970
+ }),
61971
+ /* @__PURE__ */ jsx("span", {
61972
+ "data-testid": "export-selection-count",
61973
+ className: "text-[11px] text-foreground-subtle",
61974
+ children: t("uiLibrary.deviceExport.selected", "{{count}} selected", { count: selectedIds.size })
61975
+ }),
61976
+ /* @__PURE__ */ jsx(Button, {
61977
+ size: "sm",
61978
+ variant: "primary",
61979
+ disabled: busy,
61980
+ onClick: exposeSelected,
61981
+ children: t("uiLibrary.deviceExport.exposeN", "Expose {{count}}", { count: selectedIds.size })
61982
+ }),
61983
+ /* @__PURE__ */ jsx(Button, {
61984
+ size: "sm",
61985
+ variant: "secondary",
61986
+ disabled: busy,
61987
+ onClick: unexposeSelected,
61988
+ children: t("uiLibrary.deviceExport.unexposeN", "Unexpose {{count}}", { count: selectedIds.size })
61989
+ }),
61990
+ /* @__PURE__ */ jsx(Button, {
61991
+ size: "sm",
61992
+ variant: "ghost",
61993
+ onClick: clearSelection,
61994
+ children: t("uiLibrary.deviceExport.clear", "Clear")
61995
+ })
61996
+ ] })
61997
+ ]
61998
+ });
61999
+ }, [
61368
62000
  t,
61369
62001
  roleOptions,
61370
62002
  providerOptions,
@@ -61413,16 +62045,16 @@ function DeviceExportPanel({ addonId, onOpenDevice, showSetup = true }) {
61413
62045
  }),
61414
62046
  /* @__PURE__ */ jsx("div", {
61415
62047
  className: "p-2 sm:p-3",
61416
- children: loading && candidateDevices.length === 0 ? /* @__PURE__ */ jsxs("div", {
62048
+ children: loading && candidateDevices.length === 0 && entityRows.length === 0 ? /* @__PURE__ */ jsxs("div", {
61417
62049
  className: "flex items-center gap-2 px-1 py-6 text-xs text-foreground-subtle",
61418
62050
  children: [/* @__PURE__ */ jsx(LoaderCircle, { className: "h-3.5 w-3.5 animate-spin" }), t("uiLibrary.deviceExport.loading", "Loading exportable devices…")]
61419
- }) : hasSupportedKinds && candidateDevices.length > 0 ? /* @__PURE__ */ jsx(DeviceList, {
62051
+ }) : hasSupportedKinds && candidateDevices.length > 0 || entityRows.length > 0 ? /* @__PURE__ */ jsx(DeviceList, {
61420
62052
  mode: "generic",
61421
- items: shownDevices,
62053
+ items: shownRows,
61422
62054
  getKey,
61423
62055
  getSearchText,
61424
62056
  getFilterType,
61425
- filterOptions: supportedTypeOptions,
62057
+ filterOptions: typeFilterOptions,
61426
62058
  columns,
61427
62059
  onRowClick: onOpenDevice ? onRowClick : void 0,
61428
62060
  toolbar: renderToolbar,
@@ -63566,7 +64198,8 @@ function SectionedPage({ icon, title, subtitle, actions, sections, defaultSectio
63566
64198
  tabKey: activeId,
63567
64199
  fill,
63568
64200
  children: fill ? /* @__PURE__ */ jsx("div", {
63569
- className: "flex min-h-0 flex-1 flex-col",
64201
+ className: "flex min-h-0 flex-1 flex-col overflow-y-auto",
64202
+ "data-testid": "sectioned-page-body",
63570
64203
  children: active?.content
63571
64204
  }) : active?.content
63572
64205
  });
@@ -71006,6 +71639,90 @@ function useDeviceCapSlice(trpc, deviceId, capName) {
71006
71639
  return useDeviceStateSlice(handleRef.current);
71007
71640
  }
71008
71641
  //#endregion
71642
+ //#region src/hooks/merge-detections.ts
71643
+ /** Minimum IoU between an enriched root and a raw root to call them one subject
71644
+ * when no trackId pairs them. */
71645
+ var EXTRA_MATCH_IOU_THRESHOLD = .3;
71646
+ function iou(a, b) {
71647
+ const x1 = Math.max(a.x, b.x);
71648
+ const y1 = Math.max(a.y, b.y);
71649
+ const x2 = Math.min(a.x + a.width, b.x + b.width);
71650
+ const y2 = Math.min(a.y + a.height, b.y + b.height);
71651
+ const inter = Math.max(0, x2 - x1) * Math.max(0, y2 - y1);
71652
+ const union = a.width * a.height + b.width * b.height - inter;
71653
+ return union > 0 ? inter / union : 0;
71654
+ }
71655
+ function isRoot(d) {
71656
+ return d.kind !== "detail";
71657
+ }
71658
+ function scaleBox(b, sx, sy) {
71659
+ return {
71660
+ x: b.x * sx,
71661
+ y: b.y * sy,
71662
+ width: b.width * sx,
71663
+ height: b.height * sy
71664
+ };
71665
+ }
71666
+ /** The raw root an enriched root describes: same trackId, else best IoU. */
71667
+ function matchRawRoot(enrichedRoot, rawRoots, sx, sy) {
71668
+ const trackId = enrichedRoot.track?.trackId;
71669
+ if (trackId !== void 0) {
71670
+ const byTrack = rawRoots.find((r) => r.track?.trackId === trackId);
71671
+ if (byTrack) return byTrack;
71672
+ }
71673
+ const scaled = scaleBox(enrichedRoot.bbox, sx, sy);
71674
+ let best = null;
71675
+ let bestIou = EXTRA_MATCH_IOU_THRESHOLD;
71676
+ for (const r of rawRoots) {
71677
+ const v = iou(scaled, r.bbox);
71678
+ if (v >= bestIou) {
71679
+ best = r;
71680
+ bestIou = v;
71681
+ }
71682
+ }
71683
+ return best;
71684
+ }
71685
+ function mergeDetections(raw, extras) {
71686
+ if (!extras) return raw;
71687
+ const frameWidth = raw?.frameWidth ?? extras.frameWidth;
71688
+ const frameHeight = raw?.frameHeight ?? extras.frameHeight;
71689
+ const sx = extras.frameWidth > 0 ? frameWidth / extras.frameWidth : 1;
71690
+ const sy = extras.frameHeight > 0 ? frameHeight / extras.frameHeight : 1;
71691
+ const rawDets = raw?.detections ?? [];
71692
+ const rawRoots = rawDets.filter(isRoot);
71693
+ const rawRootFor = /* @__PURE__ */ new Map();
71694
+ const extraLabels = /* @__PURE__ */ new Map();
71695
+ for (const root of extras.detections.filter(isRoot)) {
71696
+ const match = matchRawRoot(root, rawRoots, sx, sy);
71697
+ rawRootFor.set(root.id, match);
71698
+ if (match && root.labels.length > 0) extraLabels.set(match, [...extraLabels.get(match) ?? [], ...root.labels]);
71699
+ }
71700
+ const out = rawDets.map((d) => {
71701
+ const add = extraLabels.get(d);
71702
+ if (!add) return d;
71703
+ const have = new Set(d.labels.map((l) => l.label));
71704
+ const fresh = add.filter((l) => !have.has(l.label));
71705
+ return fresh.length > 0 ? {
71706
+ ...d,
71707
+ labels: [...d.labels, ...fresh]
71708
+ } : d;
71709
+ });
71710
+ for (const d of extras.detections) {
71711
+ if (isRoot(d)) continue;
71712
+ const parent = d.parentId !== void 0 ? rawRootFor.get(d.parentId) : void 0;
71713
+ out.push({
71714
+ ...d,
71715
+ bbox: scaleBox(d.bbox, sx, sy),
71716
+ ...parent ? { parentId: parent.id } : {}
71717
+ });
71718
+ }
71719
+ return {
71720
+ detections: out,
71721
+ frameWidth,
71722
+ frameHeight
71723
+ };
71724
+ }
71725
+ //#endregion
71009
71726
  //#region src/hooks/use-device-detections.ts
71010
71727
  /**
71011
71728
  * useDeviceDetections — subscribes to motion, raw motion, and detection events for a device.
@@ -71014,12 +71731,18 @@ function useDeviceCapSlice(trpc, deviceId, capName) {
71014
71731
  * admin-ui (BackendClient.trpc) and addon pages (AddonPageProps.trpc).
71015
71732
  */
71016
71733
  var MOTION_FADE_MS = 500;
71017
- /** Detection overlay fade — ALSO the raw-fallback suppression window: while an
71018
- * enriched frame-tracked event arrived within this window, raw detection.result
71019
- * frames are ignored (post-analysis is the richer source; raw remains the
71020
- * fallback when post-analysis is absent). Keeping the two equal means raw
71021
- * resumes exactly when the enriched display fades — no blank gap. */
71734
+ /** Fade of each detection source (raw roots, enriched extras), counted from the
71735
+ * frame's capture time so a late frame is not kept for the full window. */
71022
71736
  var DETECTION_FADE_MS = 800;
71737
+ /** A frame older than this at arrival is replayed pre-roll and never drawn.
71738
+ * Same meaning as the server's OVERLAY_MAX_FRAME_AGE_MS. */
71739
+ var OVERLAY_MAX_FRAME_AGE_MS = 1e3;
71740
+ /**
71741
+ * The most of a frame's age (arrival minus its capture timestamp) the fade
71742
+ * deducts. Bounded so a skewed server/browser clock can never make boxes vanish
71743
+ * on arrival.
71744
+ */
71745
+ var MAX_FRAME_AGE_FADE_DEDUCTION_MS = DETECTION_FADE_MS / 2;
71023
71746
  /** Helper: subscribe to live.onEvent without optional chaining on subscribe() */
71024
71747
  function safeSubscribe(trpc, category, onData) {
71025
71748
  try {
@@ -71042,8 +71765,26 @@ function useDeviceDetections(trpc, deviceId) {
71042
71765
  const [phase, setPhase] = useState("watching");
71043
71766
  const motionTimer = useRef(void 0);
71044
71767
  const motionRawTimer = useRef(void 0);
71045
- const detectionTimer = useRef(void 0);
71046
- const lastEnrichedAt = useRef(0);
71768
+ const rawTimer = useRef(void 0);
71769
+ const extrasTimer = useRef(void 0);
71770
+ /** Live part of each source: raw roots and enriched extras fade independently. */
71771
+ const rawPart = useRef(null);
71772
+ const extrasPart = useRef(null);
71773
+ /** Capture timestamp of the newest frame shown, per source; older arrivals are dropped. */
71774
+ const lastRawTs = useRef(0);
71775
+ const lastExtrasTs = useRef(0);
71776
+ const publish = useCallback(() => {
71777
+ setDetection(mergeDetections(rawPart.current, extrasPart.current));
71778
+ }, []);
71779
+ /** Admit a frame: null = rejected (stale or out of order), else its fade in ms. */
71780
+ const admit = useCallback((frameTs, lastTs) => {
71781
+ if (frameTs !== null) {
71782
+ if (Date.now() - frameTs > OVERLAY_MAX_FRAME_AGE_MS) return null;
71783
+ if (frameTs < lastTs.current) return null;
71784
+ lastTs.current = frameTs;
71785
+ }
71786
+ return DETECTION_FADE_MS - (frameTs === null ? 0 : Math.min(Math.max(Date.now() - frameTs, 0), MAX_FRAME_AGE_FADE_DEDUCTION_MS));
71787
+ }, []);
71047
71788
  useEffect(() => {
71048
71789
  if (deviceId === null) return;
71049
71790
  const sub = safeSubscribe(trpc, "detection.motion-analysis", (event) => {
@@ -71092,48 +71833,72 @@ function useDeviceDetections(trpc, deviceId) {
71092
71833
  };
71093
71834
  }, [trpc, deviceId]);
71094
71835
  useEffect(() => {
71095
- lastEnrichedAt.current = 0;
71836
+ extrasPart.current = null;
71837
+ rawPart.current = null;
71838
+ lastExtrasTs.current = 0;
71839
+ lastRawTs.current = 0;
71840
+ setDetection(null);
71096
71841
  if (deviceId === null) return;
71097
71842
  const sub = safeSubscribe(trpc, "pipeline-analytics.frame-tracked", (event) => {
71098
71843
  const data = event?.data;
71099
71844
  if (!data || data.deviceId !== deviceId) return;
71100
71845
  if (!data.detections?.length) return;
71101
71846
  if (typeof data.detections[0]?.kind !== "string") return;
71102
- lastEnrichedAt.current = Date.now();
71103
- setDetection({
71847
+ const fadeInMs = admit(typeof data.timestamp === "number" ? data.timestamp : null, lastExtrasTs);
71848
+ if (fadeInMs === null) return;
71849
+ extrasPart.current = {
71104
71850
  detections: data.detections,
71105
71851
  frameWidth: data.frameWidth,
71106
71852
  frameHeight: data.frameHeight
71107
- });
71108
- if (detectionTimer.current) clearTimeout(detectionTimer.current);
71109
- detectionTimer.current = setTimeout(() => setDetection(null), DETECTION_FADE_MS);
71853
+ };
71854
+ publish();
71855
+ if (extrasTimer.current) clearTimeout(extrasTimer.current);
71856
+ extrasTimer.current = setTimeout(() => {
71857
+ extrasPart.current = null;
71858
+ publish();
71859
+ }, fadeInMs);
71110
71860
  });
71111
71861
  return () => {
71112
71862
  sub?.unsubscribe();
71113
- if (detectionTimer.current) clearTimeout(detectionTimer.current);
71863
+ if (extrasTimer.current) clearTimeout(extrasTimer.current);
71114
71864
  };
71115
- }, [trpc, deviceId]);
71865
+ }, [
71866
+ trpc,
71867
+ deviceId,
71868
+ admit,
71869
+ publish
71870
+ ]);
71116
71871
  useEffect(() => {
71117
71872
  if (deviceId === null) return;
71118
71873
  const sub = safeSubscribe(trpc, "detection.result", (event) => {
71119
71874
  const e = event;
71120
71875
  if (!matchesDevice(e?.source, deviceId)) return;
71121
- if (Date.now() - lastEnrichedAt.current < DETECTION_FADE_MS) return;
71122
71876
  const frame = e.data?.frame;
71123
71877
  if (!frame?.detections?.length) return;
71124
- setDetection({
71878
+ const fadeInMs = admit(typeof frame.timestamp === "number" ? frame.timestamp : null, lastRawTs);
71879
+ if (fadeInMs === null) return;
71880
+ rawPart.current = {
71125
71881
  detections: frame.detections,
71126
71882
  frameWidth: frame.width,
71127
71883
  frameHeight: frame.height
71128
- });
71129
- if (detectionTimer.current) clearTimeout(detectionTimer.current);
71130
- detectionTimer.current = setTimeout(() => setDetection(null), DETECTION_FADE_MS);
71884
+ };
71885
+ publish();
71886
+ if (rawTimer.current) clearTimeout(rawTimer.current);
71887
+ rawTimer.current = setTimeout(() => {
71888
+ rawPart.current = null;
71889
+ publish();
71890
+ }, fadeInMs);
71131
71891
  });
71132
71892
  return () => {
71133
71893
  sub?.unsubscribe();
71134
- if (detectionTimer.current) clearTimeout(detectionTimer.current);
71894
+ if (rawTimer.current) clearTimeout(rawTimer.current);
71135
71895
  };
71136
- }, [trpc, deviceId]);
71896
+ }, [
71897
+ trpc,
71898
+ deviceId,
71899
+ admit,
71900
+ publish
71901
+ ]);
71137
71902
  useEffect(() => {
71138
71903
  if (deviceId === null) return;
71139
71904
  const sub = safeSubscribe(trpc, "detection.phase-transition", (event) => {
@@ -71580,8 +72345,8 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-BCU2NW7w.js")
71580
72345
  /** Lazy-wrapped `SceneMonitorEditor` — code-split off the main bundle for the
71581
72346
  * same reason: it mounts `MaskShapeCanvas`, which chains react-konva. Render
71582
72347
  * inside `<Suspense>`; the admin-ui `/scenes` dialog is its only caller. */
71583
- var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-BgqJYVdM.js").then((m) => ({ default: m.SceneMonitorEditor })));
72348
+ var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-A1U5eCrC.js").then((m) => ({ default: m.SceneMonitorEditor })));
71584
72349
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
71585
72350
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-VntwpB1u.js").then((m) => ({ default: m.PrivacyMaskSettings })));
71586
72351
  //#endregion
71587
- export { Shield as $, CloudFog as $n, LocateFixed as $t, Trash2 as A, AddProviderEntryDialog, AddonGlobalSettingsForm, AdminLinkQuickAction, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, Film as An, AppShell, Bird as Ar, ArcKnob, PawPrint as At, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, Sun as B, BATTERY_BADGE_LOW_KEY, BATTERY_BADGE_NORMAL_KEY, BINARY_BATTERY_LOW_BELOW, BOOLEAN_STATES, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, BackToStepsButton, Badge, BarSeries, BatteryBadge, DoorOpen as Bn, BottomSheet, Ban as Br, Breadcrumb, BrightnessPanel, Moon as Bt, Button, ButtonControl, ButtonHeroCard, Unlink2 as C, CENTER, CHART_SERIES_TOKENS, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONSUMABLE_LOW_PERCENT, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, ChartFrame, ChartPlaceholder, ChartSwatch, ChartWindowToggle, Checkbox, ChildSectionAccordion, ClimatePanel, Gauge as Cn, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigNotificationTargetMultiSelectFieldView, ConfigNotificationTargetSelectFieldView, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumableLevelBadge, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, Cable as Cr, Plus as Ct, CustomFieldRenderersProvider, TriangleAlert as D, DATA_RECORDS_KIND_PARAM, DATA_RECORDS_OWNER_PARAM, DATA_RECORD_FACET_GROUPS, DEFAULT_COLOR, DEFAULT_PAGINATION_LABELS, DEFAULT_UNIT_PREFERENCES, DEVICE_COLUMNS, DEVICE_EXPORT_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_NAME_FORMS, DEVICE_NAME_JOIN, DEVICE_PICKER_GROUP_STORAGE_KEY, DEVICE_ROLE_META, DEVICE_ROLE_NOUNS, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DEVICE_TYPE_NOUNS, DataRecordsHub, DataTable, DataTableFilterBar, DataTablePager, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceExportSetup, DeviceFilterBar, DeviceFleetFromServer, DeviceFleetProvider, DeviceGrid, DeviceHistoryView, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceName, DevicePicker, DeviceQuickDetailProvider, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, DevicesFailedLine, DevicesLoadingLine, DevicesWidenWarning, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DisplayPaletteProvider, Flashlight as Dn, DoorbellRecentPanel, Bot as Dr, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, Pin as Dt, DummyHeroCard, DummyInline, Truck as E, EMPTY_DATA_TABLE_FILTER, EMPTY_HISTORY_PANELS, EVENT_KIND_ICONS, EmptyState, Footprints as En, EndpointResultsCard, EndpointTestCard, EntryJsonSchemaForm, Box as Er, ErrorBox, Pipette as Et, EventKindGlyph, EventStream, ExtensionsPanel, Timer as F, FALLBACK_SCOPE, FAST_ICON_GLYPHS, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, ExternalLink as Fn, FormField$1 as FormField, BatteryWarning as Fr, Music as Ft, Sparkles as G, GAP_INTERVAL_FACTOR, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GateBadge, GateControl, Cpu as Gn, ArrowLeft as Gr, GripTrack, GroupedModelSelector, GroupedTilePicker, MessageSquare as Gt, Star as H, HISTORY_PAGE_PATH, HISTORY_PANELS_NAMESPACE, HISTORY_SELECTION_MAX, HISTORY_WINDOW_IDS, HISTORY_WINDOW_MS, HOST_WIDGETS, HUB_SESSION_RUN_MS, HistoryChart, HistoryWindowBar, HlsVideo, Dog as Hn, HotkeyProvider, HotkeyScope, HoverZoomImage, ArrowUp as Hr, Minus as Ht, HubSessionTestCard, HumidifierHeroCard, HumidifierInlineControl, Thermometer as I, INPUT_COMPACT, INPUT_SHELL, IconAction, IconButton, IconPicker, ImageHeroCard, ImageInlineControl, ImageSelector, EllipsisVertical as In, InferenceConfigSelector, Input, BatteryMedium as Ir, Move as It, ItemFormDialog, SlidersHorizontal as J, Cloud as Jn, AlarmSmoke as Jr, Maximize2 as Jt, Snowflake as K, KebabMenu, KeyValueList, Copy as Kn, ArrowDown as Kr, Menu as Kt, Target as L, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LayeredSettingsForm, LightHeroCard, LightInlineControl, Droplets as Ln, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, BatteryLow as Lr, MoveVertical as Lt, Tractor as M, MEDIA_GRID, MODE_COLOR, MaskShapeCanvas, MediaCard, MediaGrid, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, Fan as Mn, MobileDrawer, ModelPicker, MotionZonesSettings, Bell as Mr, Package as Mt, ToggleRight as N, NAVIGATION_DRIVE_INTERVAL_MS, NODE_COLOR_IDS, NatResultCard, NavigationPanel, NetworkLinkBadge, Eye as Nn, NodeMultiSelectField, NodePicker, NodeSelectField, NotificationTargetSelectField, NotificationTargetsField, BellRing as Nr, Network as Nt, TrendingDown as O, OCCUPANCY_KEY, OPTION_SELECT_SEARCH_MIN_OPTIONS, OfflineBadge, FlashlightOff as On, OptionSelect, Bone as Or, Phone as Ot, ToggleLeft as P, PAGE_SIZE_ALL, PHASE_CONFIG, PICKER_CHIP_LIMIT, PICKER_DEFAULT_GROUP_BY, PICKER_GROUP_BY_MODES, PICKER_GROUP_COLLAPSE_AT, PICKER_NONE_KEY, PICKER_NOUN_PLURAL, PICKER_NO_FILTERS, PICKER_PAGE_SIZE, PICKER_SEARCH_DEBOUNCE_MS, PICKER_WINDOW, PRIORITY, PTZOverlay, PageHeader, PageShell, PageSizeSelect, Pagination, PasswordInput, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PlaceholderChipField, PlayerOverlaysProvider, EyeOff as Pn, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, Battery as Pr, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, ProviderEntryPills, Navigation as Pt, PtzPanel, Ship as Q, CloudLightning as Qn, QrCode, LockOpen as Qt, Tag as R, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RESOLUTION_BUCKET_MS, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, ROOT_DETECTOR_STEP_ID, RadialGauge, RecordEntriesPanel, RecordedPlaybackProvider, RecordingPanel, ResponseLog, RetrainReviewBadge, Droplet as Rn, RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, RoleNodePill, RootModelSourceControl, RootSuppliedModelNote, BatteryFull as Rr, MoveHorizontal as Rt, RunReport, RunningBadge, RunningStatusLine, Upload as S, SCENE_CAPTURE_VARIANTS, SECRET_MASK_PLACEHOLDER, SECRET_REVEAL_MS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, STEP_DOCK_WIDTH_PX, SUBJECT_PATH_DWELL_EPS, SUBJECT_PATH_FULL_FRAME_COVERAGE, SUBJECT_PATH_MAX_POINTS, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, SecretFieldControl, SecretRevealProvider, SectionCard, SectionToolbar, SectionedPage, SegmentedChoice, Select, SelectedChip, SemanticBadge, SendFrameToTrainingButton, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideToggle, GraduationCap as Sn, SnapshotButton, SortHeaderButton, Sparkline, Camera as Sr, Plug as St, StableTabPanel, StatCard, StateTimeline, StateValuesStream, StatusBadge, StepDetailDock, StepInspectorPanel, StepModelRow, StepTimings, Stepper, StorageRecordsPanel, StreamBrokerSelector, StreamDebugOverlay, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, Type as T, TABLE_SCROLL_MAX_H, TEMPERATURE_SCALES, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimeSeriesChart, TimezoneSelector, Funnel as Tn, Tooltip, TooltipContent, TooltipTrigger, Bug as Tr, TrainingBaseModelPicker, TrainingCollectionPicker, Plane as Tt, Square as U, UNIT_PREFERENCES_NAMESPACE, UiTextProvider, UiTrans, Database as Un, UnitPicker, UnitPreferencesFromServer, UnitPreferencesProvider, ArrowUpToLine as Ur, Minimize2 as Ut, SunMedium as V, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, ViewSwitch, DoorClosed as Vn, VodPlaybackProvider, Baby as Vr, MonitorPlay as Vt, Sprout as W, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, Crosshair as Wn, ArrowRight as Wr, Mic as Wt, SkipBack as X, CloudSnow as Xn, Activity as Xr, Mail as Xt, SkipForward as Y, CloudSun as Yn, AirVent as Yr, MapPin as Yt, Siren as Z, CloudRain as Zn, ZoneEditingProvider, Lock as Zt, Vibrate as _, HardDrive as _n, Check as _r, Radar as _t, Wrench as a, acceleratorLabel, acceleratorShortLabel, agentColumnKey, alignSeries, allDeviceTypeFilterOptions, Leaf as an, anchorNow, applyFleetQueryDefaults, applyPickerFilters, CirclePlus as ar, ariaSortForColumn, assignNodeColorId, Server as at, axisTicks, User as b, badgeFor, binaryBatteryIsLow, bindsToModel, GripHorizontal as bn, booleanLabels, Cast as br, Power as bt, bucketTotals, buildColorByNodeId, buildDataRecordRows, buildPeerConnectionConfig, buildStepTreeFromSchema, buildSubjectPath, buildTimeSeriesModel, Wifi as c, catalogHasDraft, chartKeys, chartSeriesStyle, childEntityId, childListName, chipOverflow, chunk, classifyAddressScope, classifyCapability, classifySessionVerdict, clearPickerGroup, clusterRootModelIds, cn, colorIdForNode, columnsForContext, compareSrflxMappings, computePageButtons, consumableItemLevel, consumableLevelBarClass, consumableLevelLabel, consumableLevelVariant, containerChildToRef, countableDevices, coverHighlight, coverageLine, CircleCheck as cr, createAddonI18n, createSharedContext, createTheme, Scan as ct, currentAddonLanguage, cursorFractionFor, WifiLow as d, darkColors, dataRecordContents, dataRecordKey, dataRecordSearchText, dataRecordType, dataTableFacetGroups, dataTableFacets, decodeCustomWindow, decodeSeriesRef, defaultAxisSpec, defaultOfField, defaultSelectClusterRoots, defaultSingleClusterRoot, defaultTheme, defaultUiText, deriveDeviceKind, deriveWebrtcDebugStats, describeDeviceSelector, detectPlatform, deviceIntegrationResolver, deviceListStateOf, deviceMatchesFilter, deviceNameNouns, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, Image as dn, dockBox, ChevronsUpDown as dr, draftFromQuery, Route as dt, effectivePageSize, emptyDevicesWidens, emptySessionRun, LoaderCircle as en, encodeCustomWindow, encodeSeriesRef, energyBuckets, ensureMfHostInit, Clock as er, ShieldOff as et, eventKindLabel, WifiHigh as f, filterDataTableRows, filterDeviceOptions, filterOccupancyLines, filterOptions as filterOptionSelectOptions, filterPickerDevices, finalizeSessionRun, findTimezone, flattenPickerGrouping, flattenPickerRows, fleetViewOf, ImageOff as fn, foldDeviceName, formatChartBytes, formatChartNumber, formatChartValue, formatControlDateTime, formatDeviceName, formatLastSeen, formatNumeric, formatSettingValue, formatSpan, formatTimeLabel, ChevronsDownUp as fr, freezeVerdict, RotateCw as ft, fuzzyMatch, Volume2 as g, gapThresholdMs, getClassColor, getPhaseVisual, Hash as gn, ChevronDown as gr, groupAgentColumns, groupChildrenByLayout, groupDeviceSeries, groupPickerDevices, groupPickerDevicesBy, RadioTower as gt, VolumeX as h, hardwareLabel, historyPageHref, Heater as hn, ChevronLeft as hr, Radio as ht, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humanizeName, humidifierTint, X as i, iconGlyphsFailed, iconGlyphsLoaded, Lightbulb as in, indexDeviceNames, initialScrubState, insertAtSelection, CircleQuestionMark as ir, isAbsentProvider, isByteUnit, isConsumableLevelField, isDataTableFilterActive, isDeviceNameStock, isDrawableSubjectPath, isFieldVisible, isGroupExpanded, isHistoryWindowId, isKeychainFieldValue, isModelScopedField, isRedactedSecret, isRefusal, isSecretField, isValueField, Settings as it, TrainFront as j, Feather as jn, Bike as jr, Pause as jt, TrendingUp as k, Flame as kn, Blinds as kr, Pencil as kt, WifiZero as l, lawnMowerActivityMeta, lightColors, linePoints, Info as ln, loadIconGlyphs, loadRemoteBundle, CircleCheckBig as lr, Save as lt, lucideExportName, WashingMachine as m, makeScrubBridge, mapRootDetectorPlacements, matchesCombo, mergeSecretForSubmit, metadataEntries, metadataString, History as mn, mountAddonPage, mountPath, ChevronRight as mr, RefreshCw as mt, ZoomIn as n, nextGridPosition, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, niceMax, niceRange, ListChecks as nn, nodeColorClass, nodeSoftBgClass, nodeTextColorClass, normalizeForSearch, normalizeLanguage, normalizeSelection, nounSpecFor, CircleX as nr, ShieldAlert as nt, Workflow as o, occupancyFacets, occupancyLines, offListSelections, LayoutGrid as on, openTopLayer, optionSearchText as optionSelectSearchText, CirclePause as or, orphanDeviceLabel, Search as ot, overrideEntityIdFromLink, Waves as p, pageRows, pageSizeLabel, paginateRows, parentDetailOf, parseCapKey, parseCombo, parseConsumableLevel, parseIceCandidate, parsePickerGroupBy, parseProducerKey, parseRecordedServerMessage, partitionSelected as partitionOptionSelectSelected, partitionSuggested, pickerFacetFilterShown, pickerFacetKey, pickerFacetOptions, pickerFiltersActive, pickerGroupKey, pickerHiddenSelectedCount, pickerLocationKey, pickerQueryTokens, pickerRowFacts, pickerSearchText, pickerZoneFilterSuspended, pinnedStreamChoices, placePopover, House as pn, ChevronUp as pr, preferenceForQuantity, previousWindow, projectSubjectPath, providerIcons, RotateCcw as pt, Smartphone as q, Cog as qn, ArrowDownToLine as qr, Megaphone as qt, Zap as r, readHistory, readHistoryPanels, readItemId, readStoredGroupBy, readUnitPreferences, reduceSessionRun, registerAddonBundle, renderMarkup, renderTagged, resetHubMountForTests, resetPickerFilters, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDeviceIntegration, resolveDeviceLabel, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolveHistoryWindow, resolveSearchable as resolveOptionSelectSearchable, resolveParentNames, resolvePrimaryChild, resolveSelectedDevices, resolveSensorDisplay, resolveStepDefaultModel, retrainReviewBadgeLook, Link2 as rn, roiTooLarge, rootSourceState, routerBasename, CircleStop as rr, Share2 as rt, runningDurationSince, runningStatusParts, Wind as s, sameDeviceName, sameLocationSuggestions, scrubReducer, searchSteps, secretDisplayValue, secretSubmitValue, segmentsFromChanges, selectPickerGroup, selectedDeviceOptions, serializeRecordedCommand, seriesRefId, settingsModelIdFor, sharedGapSpans, shiftPoints, shouldCommit, shouldEmit, shouldShowAddNewFooter, shouldShowUseQueryRow, shouldUseSingleNode, showsNoCamerasHint, Laugh as sn, sortRows, sortRowsByColumn, CircleDot as sr, ScrollText as st, stackBuckets, stackSeries, stateAt, stateRow, stateStyle, statusIcons, statusLine, stepFieldDomId, stepHasModelForFormat, stepLocalFields, stepModelOptions, stripDeviceParentPrefix, stripParentNamePrefix, subjectPathSampleFromBox, subjectPathSvgPoints, summarizeHubCandidates, swatchFillClass, swatchLineClass, ZoomOut as t, tabForSelector, themeToCss, themeToRootCss, timeInState, List as tn, toStationaryOverlayBox, toggleDataTableFacet, toggleDataTableGroupFacet, togglePickerDevice, togglePickerKey, Clapperboard as tr, trainingRefusalText, translateAddonKey, trpc, ShieldCheck as tt, typeLabel, WifiOff as u, Inbox as un, unitAxes, CircleAlert as ur, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAccountUnitPreferences, useActionSourceListActions, useActionSourceRunAction, useActionSourceStopAction, useActionsCreate, useActionsDelete, useActionsGet, useActionsGetLinks, useActionsGetTraces, useActionsList, useActionsListForCamera, useActionsRun, useActionsSetLinks, useActionsStop, useActionsUpdate, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonT, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetPackageDocs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListInstallations, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupCheckBackupKey, useBackupDelete, useBackupDeleteSchedule, useBackupDisableEncryption, useBackupGetEncryption, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListAvailableDatabases, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupSetupEncryption, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCalendarsGetPreferences, useCalendarsListCalendars, useCalendarsListEvents, useCalendarsSetCalendarPreference, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraGridLayoutApplyDeviceSettingsPatch, useCameraGridLayoutGetDeviceLiveContribution, useCameraGridLayoutGetDeviceSettingsContribution, useCameraGridLayoutGetLayout, useCameraGridLayoutSaveLayout, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCapabilityPresence, useCarbonMonoxideGetStatus, useClassPainter, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksCreateComposition, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetAutomationRunState, useCoreBlocksGetBlockSettings, useCoreBlocksGetComposition, useCoreBlocksGetCustomization, useCoreBlocksGetTraces, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksListComposableCaps, useCoreBlocksListCompositions, useCoreBlocksMigrateRawSecrets, useCoreBlocksReportAutomationRun, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoreBlocksUpdateBlockSettings, useCoreBlocksUpdateComposition, useCoreBlocksValidateComposition, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDataTableFilter, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderGetInfo, useDecoderReprobeHwaccel, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdminLink, useDeviceAdminLinkGetAdminLink, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceCredentialsDeleteDeviceCredential, useDeviceCredentialsGetDeviceCaStatus, useDeviceCredentialsGetDeviceCertificateSettings, useDeviceCredentialsListDeviceCredentials, useDeviceCredentialsRenameDeviceCredential, useDeviceCredentialsRevokeDeviceCredential, useDeviceCredentialsSetDeviceCertificateSettings, useDeviceCredentialsStartEnrollment, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceExtensionListCandidates, useDeviceExtensionListSlots, useDeviceExtensionListSources, useDeviceExtensionSetSlot, useDeviceHistoryDeclareSeries, useDeviceHistoryDeleteOrphanSeries, useDeviceHistoryGetDeviceEnabled, useDeviceHistoryGetStatus, useDeviceHistoryListNodeSeries, useDeviceHistoryListOrphanSeries, useDeviceHistoryListSeries, useDeviceHistoryQuery, useDeviceHistoryQueryMany, useDeviceHistoryQueryNode, useDeviceHistoryRecord, useDeviceHistoryRecordBuckets, useDeviceHistorySetDeviceEnabled, useDeviceId, useDeviceLabel, useDeviceLabelById, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCleanupDeletedDevicesData, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerGetWrapperActivation, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListDeletedSince, useDeviceManagerListDeviceIdsByCaps, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNameIndex, useDeviceNameNouns, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceQuickDetailOpen, useDeviceSeriesList, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateClaimFields, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetNativeCapSlice, useDeviceStateGetSnapshot, useDeviceStateListClaims, useDeviceStatePatchOwnedFields, useDeviceStateReleaseClaim, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDishwasherGetOptions, useDishwasherGetStatus, useDishwasherPause, useDishwasherResume, useDishwasherSetChildLock, useDishwasherSetExtraDry, useDishwasherSetHalfLoad, useDishwasherSetHygienePlus, useDishwasherSetIntensiveZone, useDishwasherSetOption, useDishwasherSetPower, useDishwasherSetProgram, useDishwasherSetVarioSpeedPlus, useDishwasherStart, useDishwasherStop, useDisplayIconResolver, useDisplayPaletteGetPalette, useDisplayPaletteListPresets, useDisplayPaletteSetPalette, useDisplayPaletteView, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useGroupActiveGetStatus, useGroupCommandsGetStatus, useGroupStatusGetStatus, useHeatingValveGetStatus, useHistoryPanels, useHistoryReader, useHistoryReads, useHotkey, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useIconGlyphsVersion, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIrTransmitterGetInfo, useIrTransmitterSend, useIsMidWidth, useIsMobile, useItemFormUrl, useKeychainAdminAcknowledgeReset, useKeychainAdminDeleteOrphans, useKeychainAdminDownloadRecoveryKey, useKeychainAdminImportSecret, useKeychainAdminListAudit, useKeychainAdminListSecrets, useKeychainAdminPurgeRetiredKeys, useKeychainAdminResetKeychain, useKeychainAdminResetReport, useKeychainAdminReveal, useKeychainAdminRotateMasterKey, useKeychainAdminSetSystemSecret, useKeychainAdminStatus, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmMigrateRawSecrets, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkAddCustomAddress, useLocalNetworkDownloadCa, useLocalNetworkGetAddresses, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetHubAddresses, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkRemoveCustomAddress, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAddressRole, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLocalNetworkUseStoredUploadedCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMeterGetStatus, useMetricsProviderCollectSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesDirectory, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputGetTarget, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputProbeTargetConfig, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesActivateAlarmProfile, useNotificationRulesCancelSnooze, useNotificationRulesCreateAlarmProfile, useNotificationRulesCreateRule, useNotificationRulesCreateSequence, useNotificationRulesCreateSnooze, useNotificationRulesDeleteAlarmProfile, useNotificationRulesDeleteRule, useNotificationRulesDeleteSequence, useNotificationRulesGetAlarmConfig, useNotificationRulesGetAlarmSensors, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesGetRuleLastRuns, useNotificationRulesGetSequence, useNotificationRulesGetTemplateCatalog, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSequences, useNotificationRulesListSnoozes, useNotificationRulesPreviewStateSummary, useNotificationRulesPreviewTemplate, useNotificationRulesRenameAlarmProfile, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotificationRulesUpdateSequence, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOidcConnectionsConnectionFormSchema, useOidcConnectionsCreateConnection, useOidcConnectionsDeleteConnection, useOidcConnectionsListConnections, useOidcConnectionsUpdateConnection, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerDeleteTemplate, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerListTemplates, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdManagerSetSlotCameraEnabled, useOsdManagerUpsertTemplate, useOsdSetOverlay, usePTZ, usePersistedDisclosure, usePersistedPageSize, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePickerSiteZones, usePipelineAnalyticsAddRetrainFrameFromRecording, usePipelineAnalyticsAddRetrainFramesToCollection, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsBackfillRetrainOrigins, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTrackRelation, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsCreateRetrainCollection, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteRetrainCollection, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainCorpusKpi, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainAssistProfiles, usePipelineAnalyticsListRetrainCollectionFrames, usePipelineAnalyticsListRetrainCollections, usePipelineAnalyticsListRetrainCorpusPage, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTrackRelations, usePipelineAnalyticsListTracks, usePipelineAnalyticsOfferRetrainArchive, usePipelineAnalyticsOwnersWithMedia, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsProposeRetrainAnnotationsWithLlm, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRemoveRetrainFrameFromCollection, usePipelineAnalyticsRenameRetrainCollection, usePipelineAnalyticsResolveRetrainTrainingCorpus, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetRetrainFrameComplete, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsSetTrackPurity, usePipelineAnalyticsSetTrackRelation, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineAnalyticsWriteRetrainArchive, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorValidatePipeline, usePipelineOrchestratorAbortNodeBenchmark, usePipelineOrchestratorApplyAutoTune, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteNodeBenchmarkResult, usePipelineOrchestratorForgetInferenceDevice, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraDetectionSource, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetClusterModelChoice, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetEffectiveShares, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeBenchmarkCandidates, usePipelineOrchestratorGetNodeBenchmarkPreflight, usePipelineOrchestratorGetNodeBenchmarkStatus, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetPlacementStats, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListNodeBenchmarkResults, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorPlanAutoTune, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorRequestOccupancyLook, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraDetectionSource, usePipelineOrchestratorSetCameraSensors, usePipelineOrchestratorSetCameraStepSettings, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetLoadBalancingShares, usePipelineOrchestratorSetNodeStepSettings, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorSetShareSource, usePipelineOrchestratorStartNodeBenchmark, usePipelineOrchestratorSuggestShares, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineRunnerAbortNodeBench, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetNodeBenchStatus, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePipelineRunnerStartNodeBench, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzCaptureHomeHere, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, usePtzStop, useRebootReboot, useRecordEntriesDeleteEntry, useRecordEntriesListEntries, useRecordEntriesListEntryKinds, useRecordEntriesPutEntry, useRecordedPlayback, useRecordingArchiveApplyDeviceSettingsPatch, useRecordingArchiveCancelRelocateJob, useRecordingArchiveCancelStorageMigrationMove, useRecordingArchiveDeleteFootprint, useRecordingArchiveGetAvailabilityBatch, useRecordingArchiveGetDaysWithRecordingsBatch, useRecordingArchiveGetDeviceConfig, useRecordingArchiveGetDeviceLiveContribution, useRecordingArchiveGetDeviceSettingsContribution, useRecordingArchiveGetPlacement, useRecordingArchiveGetRelocateResidue, useRecordingArchiveGetStatus, useRecordingArchiveGetStorageMigrationMoveStatus, useRecordingArchiveGetStorageUsage, useRecordingArchiveListOpsLog, useRecordingArchiveListRelocateJobs, useRecordingArchiveLocateSegment, useRecordingArchivePauseForStorageMigration, useRecordingArchivePlanStorageRebalance, useRecordingArchivePruneFootage, useRecordingArchiveReadGopBytes, useRecordingArchiveReadSegmentBytes, useRecordingArchiveReadWindowBytes, useRecordingArchiveReconcileLedgerAgainstDisk, useRecordingArchiveRefreshStorageLocationsForMigration, useRecordingArchiveRelocateFootage, useRecordingArchiveRenderClip, useRecordingArchiveRenderGif, useRecordingArchiveRescanStorage, useRecordingArchiveResumeForStorageMigration, useRecordingArchiveSetDeviceConfig, useRecordingArchiveSetDevicePlacement, useRecordingArchiveStartStorageMigrationMove, useRecordingArchiveStartStorageRebalance, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetPlayback, useRecordingGetPlaybackOptions, useRecordingListSources, useRecordingOnboardGetOptions, useRecordingOnboardGetStatus, useRecordingOnboardSetSettings, useRecordingSignalGetStatus, useRemoteComponent, useRemoteGetConfig, useRemoteListCommands, useRemoteSendCommand, useRemoteSendMediaCommand, useRemoteSetConfig, useRoleDisplayDefaults, useRunningStateGetStatus, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useSearchFieldHotkey, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreTransact, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSettingsStoreUpsertMany, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMoverClearance, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStoredGroupBy, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetLiveViewerCounts, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTemplateCreate, useTemplateDelete, useTemplateGet, useTemplateList, useTemplateUpdate, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTrainingCanaryResult, useTrainingCancelJob, useTrainingDiscardResult, useTrainingGetJob, useTrainingGetJobResult, useTrainingListBaseModels, useTrainingListCanaryTargets, useTrainingListJobs, useTrainingPlanJob, useTrainingRegisterResult, useTrainingRollbackCanary, useTrainingStartJob, useTrainingStartJobBatch, useTurnProviderGetTurnServers, useUiText, useUnitPreferences, useUpdateGetStatus, useUpdateInstallUpdate, useUrlQueryParam, useUserManagementConfirmTotp, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementFindUserByExternalIdentity, useUserManagementGetTotpStatus, useUserManagementListExternalIdentities, useUserManagementListOauthSessions, useUserManagementListUsers, useUserManagementMigrateRawSecrets, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeOauthSession, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUnlinkExternalIdentity, useUserManagementUpdateUser, useUserManagementValidateCredentials, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsDialClipStream, useVideoclipsGetClipPlayback, useVideoclipsGetPlaybackOptions, useVideoclipsListClips, useVideoclipsListSources, useVideoclipsOfferClipBytes, useVideoclipsReadClipBytes, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionApplyDownlinkProbe, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionDebug, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, Sailboat as ut, UtensilsCrossed as v, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, Hand as vn, ChartLine as vr, QrCode$1 as vt, Undo2 as w, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint, withHiddenChart, withPanel, withResolvedParentDetail, withUseRootModel, withoutModelScopedFields, withoutPanel, Gamepad2 as wn, Bus as wr, writeStoredGroupBy, Play as wt, UserCheck as x, Grid2x2 as xn, Car as xr, PowerOff as xt, Users as y, Hammer as yn, Cat as yr, Puzzle as yt, Sunrise as z, Download as zn, Bath as zr, MousePointerClick as zt };
72352
+ export { Shield as $, CloudLightning as $n, LocateFixed as $t, Trash2 as A, AddProviderEntryDialog, AddonGlobalSettingsForm, AdminLinkQuickAction, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, Film as An, AppShell, Blinds as Ar, ArcKnob, PawPrint as At, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, Sun as B, BATTERY_BADGE_LOW_KEY, BATTERY_BADGE_NORMAL_KEY, BINARY_BATTERY_LOW_BELOW, BOOLEAN_STATES, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, BackToStepsButton, Badge, BarSeries, BatteryBadge, Download as Bn, BottomSheet, Bath as Br, Breadcrumb, BrightnessPanel, Moon as Bt, Button, ButtonControl, ButtonHeroCard, Unlink2 as C, CENTER, CHART_SERIES_TOKENS, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, CONSUMABLE_LOW_PERCENT, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, ChartFrame, ChartPlaceholder, ChartSwatch, ChartWindowToggle, Checkbox, ChildSectionAccordion, ClimatePanel, Gauge as Cn, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigNotificationTargetMultiSelectFieldView, ConfigNotificationTargetSelectFieldView, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumableLevelBadge, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, Camera as Cr, Plus as Ct, CustomFieldRenderersProvider, TriangleAlert as D, DATA_RECORDS_KIND_PARAM, DATA_RECORDS_OWNER_PARAM, DATA_RECORD_FACET_GROUPS, DEFAULT_COLOR, DEFAULT_PAGINATION_LABELS, DEFAULT_UNIT_PREFERENCES, DEVICE_COLUMNS, DEVICE_EXPORT_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_NAME_FORMS, DEVICE_NAME_JOIN, DEVICE_PICKER_GROUP_STORAGE_KEY, DEVICE_ROLE_META, DEVICE_ROLE_NOUNS, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DEVICE_TYPE_NOUNS, DataRecordsHub, DataTable, DataTableFilterBar, DataTablePager, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceExportSetup, DeviceFilterBar, DeviceFleetFromServer, DeviceFleetProvider, DeviceGrid, DeviceHistoryView, DeviceItem, DeviceList, DeviceMultiSelectField, DeviceName, DevicePicker, DeviceQuickDetailProvider, DeviceSelectField, DeviceSelectorPicker, DeviceStepMatrix, DevicesFailedLine, DevicesLoadingLine, DevicesWidenWarning, Dialog, DialogBody, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DisplayPaletteProvider, Flashlight as Dn, DoorbellRecentPanel, Box as Dr, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, Pin as Dt, DummyHeroCard, DummyInline, Truck as E, EMPTY_DATA_TABLE_FILTER, EMPTY_HISTORY_PANELS, EVENT_KIND_ICONS, EmptyState, Footprints as En, EndpointResultsCard, EndpointTestCard, EntryJsonSchemaForm, Bug as Er, ErrorBox, Pipette as Et, EventKindGlyph, EventStream, ExtensionsPanel, Timer as F, FALLBACK_SCOPE, FAST_ICON_GLYPHS, FILL, FLEET_LIST_GC_TIME_MS, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, ExternalLink as Fn, FormField$1 as FormField, Battery as Fr, Music as Ft, Sparkles as G, GAP_INTERVAL_FACTOR, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GateBadge, GateControl, Crosshair as Gn, ArrowRight as Gr, GripTrack, GroupedModelSelector, GroupedTilePicker, MessageSquare as Gt, Star as H, HISTORY_PAGE_PATH, HISTORY_PANELS_NAMESPACE, HISTORY_SELECTION_MAX, HISTORY_WINDOW_IDS, HISTORY_WINDOW_MS, HOST_WIDGETS, HUB_SESSION_RUN_MS, HistoryChart, HistoryWindowBar, HlsVideo, DoorClosed as Hn, HotkeyProvider, HotkeyScope, HoverZoomImage, Baby as Hr, Minus as Ht, HubSessionTestCard, HumidifierHeroCard, HumidifierInlineControl, Thermometer as I, INPUT_COMPACT, INPUT_SHELL, IconAction, IconButton, IconPicker, ImageHeroCard, ImageInlineControl, ImageSelector, Eraser as In, InferenceConfigSelector, Input, BatteryWarning as Ir, Move as It, ItemFormDialog, SlidersHorizontal as J, Cog as Jn, ArrowDownToLine as Jr, Maximize2 as Jt, Snowflake as K, KebabMenu, KeyValueList, Cpu as Kn, ArrowLeft as Kr, Menu as Kt, Target as L, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LayeredSettingsForm, LightHeroCard, LightInlineControl, EllipsisVertical as Ln, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, BatteryMedium as Lr, MoveVertical as Lt, Tractor as M, MEDIA_GRID, MODE_COLOR, MaskShapeCanvas, MediaCard, MediaGrid, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, Fan as Mn, MobileDrawer, ModelPicker, MotionZonesSettings, Bike as Mr, Package as Mt, ToggleRight as N, NAVIGATION_DRIVE_INTERVAL_MS, NODE_COLOR_IDS, NatResultCard, NavigationPanel, NetworkLinkBadge, Eye as Nn, NodeMultiSelectField, NodePicker, NodeSelectField, NotificationTargetSelectField, NotificationTargetsField, Bell as Nr, Network as Nt, TrendingDown as O, OCCUPANCY_KEY, OPTION_SELECT_SEARCH_MIN_OPTIONS, OfflineBadge, FlashlightOff as On, OptionSelect, Bot as Or, Phone as Ot, ToggleLeft as P, PAGE_SIZE_ALL, PHASE_CONFIG, PICKER_CHIP_LIMIT, PICKER_DEFAULT_GROUP_BY, PICKER_GROUP_BY_MODES, PICKER_GROUP_COLLAPSE_AT, PICKER_NONE_KEY, PICKER_NOUN_PLURAL, PICKER_NO_FILTERS, PICKER_PAGE_SIZE, PICKER_SEARCH_DEBOUNCE_MS, PICKER_WINDOW, PRIORITY, PTZOverlay, PageHeader, PageShell, PageSizeSelect, Pagination, PasswordInput, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PlaceholderChipField, PlayerOverlaysProvider, EyeOff as Pn, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, BellRing as Pr, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, ProviderEntryPills, Navigation as Pt, PtzPanel, Ship as Q, CloudRain as Qn, QrCode, LockOpen as Qt, Tag as R, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RESOLUTION_BUCKET_MS, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, ROOT_DETECTOR_STEP_ID, RadialGauge, RecordEntriesPanel, RecordedPlaybackProvider, RecordingPanel, ResponseLog, RetrainReviewBadge, Droplets as Rn, RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, RoleNodePill, RootModelSourceControl, RootSuppliedModelNote, BatteryLow as Rr, MoveHorizontal as Rt, RunReport, RunningBadge, RunningStatusLine, Upload as S, SCENE_CAPTURE_VARIANTS, SECRET_MASK_PLACEHOLDER, SECRET_REVEAL_MS, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SETTING_ROW, SETTING_ROW_LABEL, SETTING_ROW_STACK_BREAKPOINT, SETTING_ROW_VALUE, SETTING_ROW_VALUE_TEXT, SNAPSHOT_MEDIA_PATH, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, STEP_DOCK_WIDTH_PX, SUBJECT_PATH_DWELL_EPS, SUBJECT_PATH_FULL_FRAME_COVERAGE, SUBJECT_PATH_MAX_POINTS, SceneMonitorEditor, ScopePicker, ScriptHeroCard, ScriptInlineControl, ScrollArea, SecretFieldControl, SecretRevealProvider, SectionCard, SectionToolbar, SectionedPage, SegmentedChoice, Select, SelectedChip, SemanticBadge, SendFrameToTrainingButton, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, SettingRow, Sidebar, SidebarItem, Skeleton, SlideToggle, GraduationCap as Sn, SnapshotButton, SortHeaderButton, Sparkline, Car as Sr, Plug as St, StableTabPanel, StatCard, StateTimeline, StateValuesStream, StatusBadge, StepDetailDock, StepInspectorPanel, StepModelRow, StepTimings, Stepper, StorageRecordsPanel, StreamBrokerSelector, StreamDebugOverlay, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, Type as T, TABLE_SCROLL_MAX_H, TEMPERATURE_SCALES, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimeSeriesChart, TimezoneSelector, Funnel as Tn, Tooltip, TooltipContent, TooltipTrigger, Bus as Tr, TrainingBaseModelPicker, TrainingCollectionPicker, Plane as Tt, Square as U, UNIT_PREFERENCES_NAMESPACE, UiTextProvider, UiTrans, Dog as Un, UnitPicker, UnitPreferencesFromServer, UnitPreferencesProvider, ArrowUp as Ur, Minimize2 as Ut, SunMedium as V, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, ViewSwitch, DoorOpen as Vn, VodPlaybackProvider, Ban as Vr, MonitorPlay as Vt, Sprout as W, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, Database as Wn, ArrowUpToLine as Wr, Mic as Wt, SkipBack as X, CloudSun as Xn, AirVent as Xr, Mail as Xt, SkipForward as Y, Cloud as Yn, AlarmSmoke as Yr, MapPin as Yt, Siren as Z, CloudSnow as Zn, ZoneEditingProvider, Activity as Zr, Lock as Zt, Vibrate as _, HardDrive as _n, ChevronDown as _r, Radar as _t, Wrench as a, acceleratorLabel, acceleratorShortLabel, agentColumnKey, alignSeries, allDeviceTypeFilterOptions, Leaf as an, anchorNow, applyFleetQueryDefaults, applyPickerFilters, CircleQuestionMark as ar, ariaSortForColumn, assignNodeColorId, Server as at, axisTicks, User as b, badgeFor, binaryBatteryIsLow, bindsToModel, GripHorizontal as bn, booleanLabels, Cat as br, Power as bt, bucketTotals, buildColorByNodeId, buildDataRecordRows, buildPeerConnectionConfig, buildStepTreeFromSchema, buildSubjectPath, buildTimeSeriesModel, Wifi as c, catalogHasDraft, chartKeys, chartSeriesStyle, childEntityId, childListName, chipOverflow, chunk, classifyAddressScope, classifyCapability, classifySessionVerdict, clearPickerGroup, clusterRootModelIds, cn, colorIdForNode, columnsForContext, compareSrflxMappings, computePageButtons, consumableItemLevel, consumableLevelBarClass, consumableLevelLabel, consumableLevelVariant, containerChildToRef, countableDevices, coverHighlight, coverageLine, CircleDot as cr, createAddonI18n, createSharedContext, createTheme, Scan as ct, currentAddonLanguage, cursorFractionFor, WifiLow as d, darkColors, dataRecordContents, dataRecordKey, dataRecordSearchText, dataRecordType, dataTableFacetGroups, dataTableFacets, decodeCustomWindow, decodeSeriesRef, defaultAxisSpec, defaultOfField, defaultSelectClusterRoots, defaultSingleClusterRoot, defaultTheme, defaultUiText, deriveDeviceKind, deriveWebrtcDebugStats, describeDeviceSelector, detectPlatform, deviceIntegrationResolver, deviceListStateOf, deviceMatchesFilter, deviceNameNouns, deviceOptionLabel, deviceRoleMeta, deviceRoleMetaOf, deviceTypeLabel, deviceTypeMeta, deviceTypeMetaOf, devicesToOptions, Image as dn, dockBox, CircleAlert as dr, draftFromQuery, Route as dt, effectivePageSize, emptyDevicesWidens, emptySessionRun, LoaderCircle as en, encodeCustomWindow, encodeSeriesRef, energyBuckets, ensureMfHostInit, CloudFog as er, ShieldOff as et, eventKindLabel, WifiHigh as f, filterDataTableRows, filterDeviceOptions, filterOccupancyLines, filterOptions as filterOptionSelectOptions, filterPickerDevices, finalizeSessionRun, findTimezone, flattenPickerGrouping, flattenPickerRows, fleetViewOf, ImageOff as fn, foldDeviceName, formatChartBytes, formatChartNumber, formatChartValue, formatControlDateTime, formatDeviceName, formatLastSeen, formatNumeric, formatSettingValue, formatSpan, formatTimeLabel, ChevronsUpDown as fr, freezeVerdict, RotateCw as ft, fuzzyMatch, Volume2 as g, gapThresholdMs, getClassColor, getPhaseVisual, Hash as gn, ChevronLeft as gr, groupAgentColumns, groupChildrenByLayout, groupDeviceSeries, groupPickerDevices, groupPickerDevicesBy, RadioTower as gt, VolumeX as h, hardwareLabel, historyPageHref, Heater as hn, ChevronRight as hr, Radio as ht, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humanizeName, humidifierTint, X as i, iconGlyphsFailed, iconGlyphsLoaded, Lightbulb as in, indexDeviceNames, initialScrubState, insertAtSelection, CircleStop as ir, isAbsentProvider, isByteUnit, isConsumableLevelField, isDataTableFilterActive, isDeviceNameStock, isDrawableSubjectPath, isFieldVisible, isGroupExpanded, isHistoryWindowId, isKeychainFieldValue, isModelScopedField, isRedactedSecret, isRefusal, isSecretField, isValueField, Settings as it, TrainFront as j, Feather as jn, Bird as jr, Pause as jt, TrendingUp as k, Flame as kn, Bone as kr, Pencil as kt, WifiZero as l, lawnMowerActivityMeta, lightColors, linePoints, Info as ln, loadIconGlyphs, loadRemoteBundle, CircleCheck as lr, Save as lt, lucideExportName, WashingMachine as m, makeScrubBridge, mapRootDetectorPlacements, matchesCombo, mergeSecretForSubmit, metadataEntries, metadataString, History as mn, mountAddonPage, mountPath, ChevronUp as mr, RefreshCw as mt, ZoomIn as n, nextGridPosition, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, niceMax, niceRange, ListChecks as nn, nodeColorClass, nodeSoftBgClass, nodeTextColorClass, normalizeForSearch, normalizeLanguage, normalizeSelection, nounSpecFor, Clapperboard as nr, ShieldAlert as nt, Workflow as o, occupancyFacets, occupancyLines, offListSelections, LayoutGrid as on, openTopLayer, optionSearchText as optionSelectSearchText, CirclePlus as or, orphanDeviceLabel, Search as ot, overrideEntityIdFromLink, Waves as p, pageRows, pageSizeLabel, paginateRows, parentDetailOf, parseCapKey, parseCombo, parseConsumableLevel, parseIceCandidate, parsePickerGroupBy, parseProducerKey, parseRecordedServerMessage, partitionSelected as partitionOptionSelectSelected, partitionSuggested, pickerFacetFilterShown, pickerFacetKey, pickerFacetOptions, pickerFiltersActive, pickerGroupKey, pickerHiddenSelectedCount, pickerLocationKey, pickerQueryTokens, pickerRowFacts, pickerSearchText, pickerZoneFilterSuspended, pinnedStreamChoices, placePopover, House as pn, ChevronsDownUp as pr, preferenceForQuantity, previousWindow, projectSubjectPath, providerIcons, RotateCcw as pt, Smartphone as q, Copy as qn, ArrowDown as qr, Megaphone as qt, Zap as r, readHistory, readHistoryPanels, readItemId, readStoredGroupBy, readUnitPreferences, reduceSessionRun, registerAddonBundle, renderMarkup, renderTagged, resetHubMountForTests, resetPickerFilters, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolveDeviceIntegration, resolveDeviceLabel, resolveDisplayIcon, resolveEffectiveDefaultModel, resolveEffectiveStepModel, resolveEventKindIcon, resolveHistoryWindow, resolveSearchable as resolveOptionSelectSearchable, resolveParentNames, resolvePrimaryChild, resolveSelectedDevices, resolveSensorDisplay, resolveStepDefaultModel, retrainReviewBadgeLook, Link2 as rn, roiTooLarge, rootSourceState, routerBasename, CircleX as rr, Share2 as rt, runningDurationSince, runningStatusParts, Wind as s, sameDeviceName, sameLocationSuggestions, scrubReducer, searchSteps, secretDisplayValue, secretSubmitValue, segmentsFromChanges, selectPickerGroup, selectedDeviceOptions, serializeRecordedCommand, seriesRefId, settingsModelIdFor, sharedGapSpans, shiftPoints, shouldCommit, shouldEmit, shouldShowAddNewFooter, shouldShowUseQueryRow, shouldUseSingleNode, showsNoCamerasHint, Laugh as sn, sortRows, sortRowsByColumn, CirclePause as sr, ScrollText as st, stackBuckets, stackSeries, stateAt, stateRow, stateStyle, statusIcons, statusLine, stepFieldDomId, stepHasModelForFormat, stepLocalFields, stepModelOptions, stripDeviceParentPrefix, stripParentNamePrefix, subjectPathSampleFromBox, subjectPathSvgPoints, summarizeHubCandidates, swatchFillClass, swatchLineClass, ZoomOut as t, tabForSelector, themeToCss, themeToRootCss, timeInState, List as tn, toStationaryOverlayBox, toggleDataTableFacet, toggleDataTableGroupFacet, togglePickerDevice, togglePickerKey, Clock as tr, trainingRefusalText, translateAddonKey, trpc, ShieldCheck as tt, typeLabel, WifiOff as u, Inbox as un, unitAxes, CircleCheckBig as ur, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAccountUnitPreferences, useActionSourceListActions, useActionSourceRunAction, useActionSourceStopAction, useActionsCreate, useActionsDelete, useActionsGet, useActionsGetLinks, useActionsGetTraces, useActionsList, useActionsListForCamera, useActionsRun, useActionsSetLinks, useActionsStop, useActionsUpdate, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonT, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetPackageDocs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListInstallations, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlert, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerAttachDevice, useAudioAnalyzerClassify, useAudioAnalyzerDetachDevice, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupCancel, useBackupCheckBackupKey, useBackupDelete, useBackupDeleteSchedule, useBackupDisableEncryption, useBackupGetEncryption, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListAvailableDatabases, useBackupListDestinations, useBackupListLocations, useBackupListRuns, useBackupListSchedules, useBackupPreviewSchedule, useBackupRestore, useBackupSetupEncryption, useBackupTrigger, useBackupUpsertDestinationPolicy, useBackupUpsertSchedule, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCalendarsGetPreferences, useCalendarsListCalendars, useCalendarsListEvents, useCalendarsSetCalendarPreference, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraGridLayoutApplyDeviceSettingsPatch, useCameraGridLayoutGetDeviceLiveContribution, useCameraGridLayoutGetDeviceSettingsContribution, useCameraGridLayoutGetLayout, useCameraGridLayoutSaveLayout, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCapabilityPresence, useCarbonMonoxideGetStatus, useClassPainter, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useClusterTopology, useColorGetStatus, useColorSetColor, useConfirm, useConnectionTestDescribeTest, useConnectionTestTestSettings, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoreBlocksCompile, useCoreBlocksCreate, useCoreBlocksCreateComposition, useCoreBlocksDelete, useCoreBlocksGet, useCoreBlocksGetAutomationRunState, useCoreBlocksGetBlockSettings, useCoreBlocksGetComposition, useCoreBlocksGetCustomization, useCoreBlocksGetTraces, useCoreBlocksGetTypeDefs, useCoreBlocksList, useCoreBlocksListComposableCaps, useCoreBlocksListCompositions, useCoreBlocksMigrateRawSecrets, useCoreBlocksReportAutomationRun, useCoreBlocksRestart, useCoreBlocksSetEnabled, useCoreBlocksUpdate, useCoreBlocksUpdateBlockSettings, useCoreBlocksUpdateComposition, useCoreBlocksValidateComposition, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDataTableFilter, useDayNightGetOptions, useDayNightGetStatus, useDayNightSetSettings, useDebouncedString, useDecoderGetInfo, useDecoderReprobeHwaccel, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdminLink, useDeviceAdminLinkGetAdminLink, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceCredentialsDeleteDeviceCredential, useDeviceCredentialsGetDeviceCaStatus, useDeviceCredentialsGetDeviceCertificateSettings, useDeviceCredentialsListDeviceCredentials, useDeviceCredentialsRenameDeviceCredential, useDeviceCredentialsRevokeDeviceCredential, useDeviceCredentialsSetDeviceCertificateSettings, useDeviceCredentialsStartEnrollment, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportExposeEntity, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListExposedEntities, useDeviceExportListSupportedDeviceKinds, useDeviceExportListSupportedEntityKinds, useDeviceExportUnexposeDevice, useDeviceExportUnexposeEntity, useDeviceExtensionListCandidates, useDeviceExtensionListSlots, useDeviceExtensionListSources, useDeviceExtensionSetSlot, useDeviceHistoryDeclareSeries, useDeviceHistoryDeleteOrphanSeries, useDeviceHistoryGetDeviceEnabled, useDeviceHistoryGetStatus, useDeviceHistoryListNodeSeries, useDeviceHistoryListOrphanSeries, useDeviceHistoryListSeries, useDeviceHistoryQuery, useDeviceHistoryQueryMany, useDeviceHistoryQueryNode, useDeviceHistoryRecord, useDeviceHistoryRecordBuckets, useDeviceHistorySetDeviceEnabled, useDeviceId, useDeviceLabel, useDeviceLabelById, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionCancelJob, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionListJobs, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAdoptionStartJob, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCleanupDeletedDevicesData, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetBindingsBatch, useDeviceManagerGetChildren, useDeviceManagerGetChildrenBatch, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetDeviceStatusAggregateBatch, useDeviceManagerGetLinkedDevices, useDeviceManagerGetLinkedDevicesBatch, useDeviceManagerGetRoleDisplayDefaults, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerGetWrapperActivation, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListDeletedSince, useDeviceManagerListDeviceIdsByCaps, useDeviceManagerListLocationDescriptions, useDeviceManagerListLocationIcons, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListSiteZones, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerMigrateDevice, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRemoveSiteZone, useDeviceManagerRenameLocation, useDeviceManagerRenameSiteZone, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDisabled, useDeviceManagerSetDisplay, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetLocationDescription, useDeviceManagerSetLocationIcon, useDeviceManagerSetLocationZone, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetRoleDisplayDefaults, useDeviceManagerSetSiteZone, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceNameIndex, useDeviceNameNouns, useDeviceNetworkLink, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceQuickDetailOpen, useDeviceSeriesList, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateClaimFields, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetNativeCapSlice, useDeviceStateGetSnapshot, useDeviceStateListClaims, useDeviceStatePatchOwnedFields, useDeviceStateReleaseClaim, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDishwasherGetOptions, useDishwasherGetStatus, useDishwasherPause, useDishwasherResume, useDishwasherSetChildLock, useDishwasherSetExtraDry, useDishwasherSetHalfLoad, useDishwasherSetHygienePlus, useDishwasherSetIntensiveZone, useDishwasherSetOption, useDishwasherSetPower, useDishwasherSetProgram, useDishwasherSetVarioSpeedPlus, useDishwasherStart, useDishwasherStop, useDisplayIconResolver, useDisplayPaletteGetPalette, useDisplayPaletteListPresets, useDisplayPaletteSetPalette, useDisplayPaletteView, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryAuditIdentitySamples, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useGroupActiveGetStatus, useGroupCommandsGetStatus, useGroupStatusGetStatus, useHeatingValveGetStatus, useHistoryPanels, useHistoryReader, useHistoryReads, useHotkey, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useIconGlyphsVersion, useImageGetStatus, useImageSettingsGetOptions, useImageSettingsGetStatus, useImageSettingsSetSettings, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIrTransmitterGetInfo, useIrTransmitterSend, useIsMidWidth, useIsMobile, useItemFormUrl, useKeychainAdminAcknowledgeReset, useKeychainAdminDeleteOrphans, useKeychainAdminDownloadRecoveryKey, useKeychainAdminImportSecret, useKeychainAdminListAudit, useKeychainAdminListSecrets, useKeychainAdminPurgeRetiredKeys, useKeychainAdminResetKeychain, useKeychainAdminResetReport, useKeychainAdminReveal, useKeychainAdminRotateMasterKey, useKeychainAdminSetSystemSecret, useKeychainAdminStatus, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLlmCancel, useLlmDeleteModel, useLlmDeleteProfile, useLlmGenerate, useLlmGenerateVision, useLlmGetDefaults, useLlmGetRuntimeStatus, useLlmGetUsage, useLlmInstallModel, useLlmListModelCatalog, useLlmListModels, useLlmListNodeModels, useLlmListProfileKinds, useLlmListProfiles, useLlmListRuntimeNodes, useLlmMigrateRawSecrets, useLlmResolveModelRef, useLlmSetDefault, useLlmStartRuntime, useLlmStopRuntime, useLlmTestProfile, useLlmUpsertProfile, useLocalNetworkAddCustomAddress, useLocalNetworkDownloadCa, useLocalNetworkGetAddresses, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetHubAddresses, useLocalNetworkGetNotificationEndpoint, useLocalNetworkGetPreferred, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkRemoveCustomAddress, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkSetAddressRole, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLocalNetworkUseStoredUploadedCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMeterGetStatus, useMetricsProviderCollectSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetLoadSeries, useMetricsProviderGetProcessStats, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetOptions, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNativeObjectDetectionSetSettings, useNavigation, useNavigationGetFeatures, useNavigationGetStatus, useNavigationGoToPoint, useNavigationListActions, useNavigationMove, useNavigationPlaySound, useNavigationRunAction, useNavigationSetLightLevel, useNavigationSetLightMode, useNavigationSetLightOn, useNavigationStop, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkLinkGetStatus, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesDirectory, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputDeleteTarget, useNotificationOutputDiscoverTargets, useNotificationOutputGetTarget, useNotificationOutputListTargetKinds, useNotificationOutputListTargets, useNotificationOutputProbeTargetConfig, useNotificationOutputSend, useNotificationOutputSetTargetEnabled, useNotificationOutputTestTarget, useNotificationOutputUpsertTarget, useNotificationRulesActivateAlarmProfile, useNotificationRulesCancelSnooze, useNotificationRulesCreateAlarmProfile, useNotificationRulesCreateRule, useNotificationRulesCreateSequence, useNotificationRulesCreateSnooze, useNotificationRulesDeleteAlarmProfile, useNotificationRulesDeleteRule, useNotificationRulesDeleteSequence, useNotificationRulesGetAlarmConfig, useNotificationRulesGetAlarmSensors, useNotificationRulesGetClipRetentionAsks, useNotificationRulesGetConditionCatalog, useNotificationRulesGetHistory, useNotificationRulesGetRule, useNotificationRulesGetRuleLastRuns, useNotificationRulesGetSequence, useNotificationRulesGetTemplateCatalog, useNotificationRulesListDeviceMutes, useNotificationRulesListRules, useNotificationRulesListSequences, useNotificationRulesListSnoozes, useNotificationRulesPreviewStateSummary, useNotificationRulesPreviewTemplate, useNotificationRulesRenameAlarmProfile, useNotificationRulesResolveArtifactUrl, useNotificationRulesSetAlarmConfig, useNotificationRulesSetDeviceMuted, useNotificationRulesSetRuleEnabled, useNotificationRulesTestRule, useNotificationRulesUpdateRule, useNotificationRulesUpdateSequence, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOidcConnectionsConnectionFormSchema, useOidcConnectionsCreateConnection, useOidcConnectionsDeleteConnection, useOidcConnectionsListConnections, useOidcConnectionsUpdateConnection, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdManagerClearSlotBinding, useOsdManagerCopyDeviceConfiguration, useOsdManagerDeleteTemplate, useOsdManagerGetConditionSupport, useOsdManagerGetDeviceOsd, useOsdManagerGetSourceCatalog, useOsdManagerListTemplates, useOsdManagerPreviewSlot, useOsdManagerRenderDevice, useOsdManagerSetSlotBinding, useOsdManagerSetSlotCameraEnabled, useOsdManagerUpsertTemplate, useOsdSetOverlay, usePTZ, usePersistedDisclosure, usePersistedPageSize, usePetFeederCallPet, usePetFeederCancelFeed, usePetFeederFeed, usePetFeederGetStatus, usePetFeederMarkFoodReplenished, usePetFeederPlaySound, usePetFeederResetDesiccant, usePetFeederSetChildLock, usePetFeederSetFeedSound, usePetFeederSetIndicatorLight, usePetFeederSetVolume, usePetFountainGetStatus, usePetFountainResetDailyConsumption, usePetFountainSetPump, usePetFountainSetPumpInterval, usePetFountainSetPumpOffMinutes, usePetFountainSetPumpOnMinutes, usePickerSiteZones, usePipelineAnalyticsAddRetrainFrameFromRecording, usePipelineAnalyticsAddRetrainFramesToCollection, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsBackfillRetrainOrigins, usePipelineAnalyticsCancelRelocateMedia, usePipelineAnalyticsCancelStorageMigrationMove, usePipelineAnalyticsClearTrackRelation, usePipelineAnalyticsClearTracks, usePipelineAnalyticsCompleteRetrainTrack, usePipelineAnalyticsCountRelocatableMedia, usePipelineAnalyticsCountUnstampedEventMedia, usePipelineAnalyticsCreateRetrainCollection, usePipelineAnalyticsDeleteDeviceEvents, usePipelineAnalyticsDeleteRetrainCollection, usePipelineAnalyticsDeleteTracks, usePipelineAnalyticsDeselectRetrainFrame, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventDensityBatch, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetEventMediaFootprintByKind, usePipelineAnalyticsGetEventStoreFootprint, usePipelineAnalyticsGetKeyEvents, usePipelineAnalyticsGetKeyEventsBatch, usePipelineAnalyticsGetMediaReclaimStatus, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEmbeddingRebuildStatus, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetRetrainCorpusKpi, usePipelineAnalyticsGetRetrainExportUrl, usePipelineAnalyticsGetRetrainFrameImage, usePipelineAnalyticsGetSensorEvents, usePipelineAnalyticsGetStorageMigrationMoveStatus, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsGetTrainingExportSummary, usePipelineAnalyticsGetTrainingExportUrl, usePipelineAnalyticsListArchivedDebugNotes, usePipelineAnalyticsListBirthDecisions, usePipelineAnalyticsListEventKinds, usePipelineAnalyticsListEventKindsBatch, usePipelineAnalyticsListEventMedia, usePipelineAnalyticsListOpsLog, usePipelineAnalyticsListRecentTracks, usePipelineAnalyticsListRelocateMediaJobs, usePipelineAnalyticsListRetrainAnnotations, usePipelineAnalyticsListRetrainAssistProfiles, usePipelineAnalyticsListRetrainCollectionFrames, usePipelineAnalyticsListRetrainCollections, usePipelineAnalyticsListRetrainCorpusPage, usePipelineAnalyticsListRetrainFrames, usePipelineAnalyticsListRetrainStaging, usePipelineAnalyticsListTrackMedia, usePipelineAnalyticsListTrackRelations, usePipelineAnalyticsListTracks, usePipelineAnalyticsOfferRetrainArchive, usePipelineAnalyticsOwnersWithMedia, usePipelineAnalyticsPauseForStorageMigration, usePipelineAnalyticsProposeRetrainAnnotations, usePipelineAnalyticsProposeRetrainAnnotationsWithLlm, usePipelineAnalyticsPruneEvents, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsPruneTracksBefore, usePipelineAnalyticsReadLongTermSeries, usePipelineAnalyticsRebuildObjectEmbeddings, usePipelineAnalyticsReclaimDebugMedia, usePipelineAnalyticsReconcileFromDisk, usePipelineAnalyticsRefreshStorageLocationsForMigration, usePipelineAnalyticsRelocateMedia, usePipelineAnalyticsRemoveRetrainFrameFromCollection, usePipelineAnalyticsRenameRetrainCollection, usePipelineAnalyticsResolveRetrainTrainingCorpus, usePipelineAnalyticsRestageRetrainTrack, usePipelineAnalyticsResumeForStorageMigration, usePipelineAnalyticsSaveRetrainAnnotations, usePipelineAnalyticsSearchObjectEvents, usePipelineAnalyticsSelectRetrainFrames, usePipelineAnalyticsSetRetrainFrameComplete, usePipelineAnalyticsSetTrackFlags, usePipelineAnalyticsSetTrackPurity, usePipelineAnalyticsSetTrackRelation, usePipelineAnalyticsStartStorageMigrationMove, usePipelineAnalyticsWipeAllAnalytics, usePipelineAnalyticsWipeObjectEmbeddings, usePipelineAnalyticsWriteRetrainArchive, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetInferenceDeviceHealth, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorRearmInferenceDevice, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorValidatePipeline, usePipelineOrchestratorAbortNodeBenchmark, usePipelineOrchestratorApplyAutoTune, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteNodeBenchmarkResult, usePipelineOrchestratorForgetInferenceDevice, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraDetectionSource, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraSwitches, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetClusterModelChoice, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetEffectiveShares, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetIngestOwner, usePipelineOrchestratorGetNodeBenchmarkCandidates, usePipelineOrchestratorGetNodeBenchmarkPreflight, usePipelineOrchestratorGetNodeBenchmarkStatus, usePipelineOrchestratorGetNodeInferenceDevices, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorGetPipelineDevicePin, usePipelineOrchestratorGetPlacementStats, usePipelineOrchestratorGetReconcileFromDiskStatus, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListNodeBenchmarkResults, usePipelineOrchestratorPauseForStorageMigration, usePipelineOrchestratorPlanAutoTune, usePipelineOrchestratorRebalance, usePipelineOrchestratorReconcileFromDisk, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorRequestOccupancyLook, usePipelineOrchestratorResetNodePipelineDefaults, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorResumeForStorageMigration, usePipelineOrchestratorSetAgentCapabilities, usePipelineOrchestratorSetAgentDecodeLimits, usePipelineOrchestratorSetAgentInferenceDevices, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetAgentReachableHost, usePipelineOrchestratorSetCameraDetectionSource, usePipelineOrchestratorSetCameraSensors, usePipelineOrchestratorSetCameraStepSettings, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCameraSwitch, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorSetLoadBalancingShares, usePipelineOrchestratorSetNodeStepSettings, usePipelineOrchestratorSetPipelineDevicePin, usePipelineOrchestratorSetShareSource, usePipelineOrchestratorStartNodeBenchmark, usePipelineOrchestratorSuggestShares, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignPipeline, usePipelineRunnerAbortNodeBench, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerGetNativeCrop, usePipelineRunnerGetNodeBenchStatus, usePipelineRunnerGetParkedTrackFrame, usePipelineRunnerParkTrackFrame, usePipelineRunnerReleaseParkedTrackFrames, usePipelineRunnerReportMotion, usePipelineRunnerRequestOccupancyBurst, usePipelineRunnerRunDetailSubtree, usePipelineRunnerRunStatelessStep, usePipelineRunnerStartNodeBench, usePlateGalleryAssignPlate, usePlateGalleryAssignPlates, usePlateGalleryCorrectPlateText, usePlateGalleryCreateVehicle, usePlateGalleryDeletePlate, usePlateGalleryDeleteVehicle, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGalleryListVehicleSamples, usePlateGalleryListVehicles, usePlateGalleryRemoveVehicleSample, usePlateGalleryRenameVehicle, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlateGalleryUnassignPlate, usePlateGalleryUnassignPlates, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetAudioEnabled, usePrivacyMaskSetMask, usePrompt, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzCaptureHomeHere, usePtzContinuousMove, usePtzDeletePreset, usePtzGetHomePreset, usePtzGetHomeReturn, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzSetHomePreset, usePtzSetHomeReturn, usePtzStop, useRebootReboot, useRecordEntriesDeleteEntry, useRecordEntriesListEntries, useRecordEntriesListEntryKinds, useRecordEntriesPutEntry, useRecordedPlayback, useRecordingArchiveApplyDeviceSettingsPatch, useRecordingArchiveCancelRelocateJob, useRecordingArchiveCancelStorageMigrationMove, useRecordingArchiveDeleteFootprint, useRecordingArchiveGetAvailabilityBatch, useRecordingArchiveGetDaysWithRecordingsBatch, useRecordingArchiveGetDeviceConfig, useRecordingArchiveGetDeviceLiveContribution, useRecordingArchiveGetDeviceSettingsContribution, useRecordingArchiveGetPlacement, useRecordingArchiveGetRelocateResidue, useRecordingArchiveGetStatus, useRecordingArchiveGetStorageMigrationMoveStatus, useRecordingArchiveGetStorageUsage, useRecordingArchiveListOpsLog, useRecordingArchiveListRelocateJobs, useRecordingArchiveLocateSegment, useRecordingArchivePauseForStorageMigration, useRecordingArchivePlanStorageRebalance, useRecordingArchivePruneFootage, useRecordingArchiveReadGopBytes, useRecordingArchiveReadSegmentBytes, useRecordingArchiveReadWindowBytes, useRecordingArchiveReconcileLedgerAgainstDisk, useRecordingArchiveRefreshStorageLocationsForMigration, useRecordingArchiveRelocateFootage, useRecordingArchiveRenderClip, useRecordingArchiveRenderGif, useRecordingArchiveRescanStorage, useRecordingArchiveResumeForStorageMigration, useRecordingArchiveSetDeviceConfig, useRecordingArchiveSetDevicePlacement, useRecordingArchiveStartStorageMigrationMove, useRecordingArchiveStartStorageRebalance, useRecordingExportCancelExport, useRecordingExportCreateExport, useRecordingExportDeleteExport, useRecordingExportGetDownloadUrl, useRecordingExportGetExport, useRecordingExportListExports, useRecordingExportReadExportBytes, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetPlayback, useRecordingGetPlaybackOptions, useRecordingListSources, useRecordingOnboardGetOptions, useRecordingOnboardGetStatus, useRecordingOnboardSetSettings, useRecordingSignalGetStatus, useRemoteComponent, useRemoteGetConfig, useRemoteListCommands, useRemoteSendCommand, useRemoteSendMediaCommand, useRemoteSetConfig, useRoleDisplayDefaults, useRunningStateGetStatus, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useSearchFieldHotkey, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetServerPackageStatus, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useSettingsStoreAggregate, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreDeleteWhere, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreInsertMany, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreTransact, useSettingsStoreUpdate, useSettingsStoreUpdateWhere, useSettingsStoreUpsert, useSettingsStoreUpsertMany, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDebugState, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetSnapshotLinks, useSnapshotGetSnapshotOverview, useSnapshotGetStatus, useSnapshotInvalidateCache, useStationaryOverlay, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageList, useStorageListDrainProgress, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageMigrationCancel, useStorageMigrationCleanupCancel, useStorageMigrationCleanupStart, useStorageMigrationCleanupStatus, useStorageMigrationDrain, useStorageMigrationHistory, useStorageMigrationMoverClearance, useStorageMigrationMovers, useStorageMigrationPlan, useStorageMigrationResidue, useStorageMigrationStart, useStorageMigrationStatus, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStoredGroupBy, useStreamBrokerAcquireEgressTranscode, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerFetchEventMedia, useStreamBrokerForgetDeviceHardware, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceAudioMute, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetLiveViewerCounts, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerProduceEventMedia, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseEgressTranscode, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRenderPreBufferClip, useStreamBrokerReportStreamSignal, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetDeviceAudioMute, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useStreamSignalsListSignals, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemDetectSiteLocation, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetFailureContributions, useSystemGetLoadContributions, useSystemGetLoggingSettings, useSystemGetRequestCensus, useSystemGetRetentionConfig, useSystemGetSiteLocation, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetLoggingSettings, useSystemSetRetentionConfig, useSystemSetSiteLocation, useTamperGetStatus, useTemperatureSensorGetStatus, useTemplateCreate, useTemplateDelete, useTemplateGet, useTemplateList, useTemplateUpdate, useTerminalSessionAdoptLegacyMonitor, useTerminalSessionClose, useTerminalSessionCreateInstance, useTerminalSessionDeleteInstance, useTerminalSessionListInstances, useTerminalSessionListLegacyCameras, useTerminalSessionListProfiles, useTerminalSessionListSessions, useTerminalSessionOpenSession, useTerminalSessionPullOutput, useTerminalSessionResize, useTerminalSessionSetInstanceEnabled, useTerminalSessionUpdateInstance, useTerminalSessionWriteInput, useThemeMode, useToastOnToast, useTrainingCanaryResult, useTrainingCancelJob, useTrainingDiscardResult, useTrainingGetJob, useTrainingGetJobResult, useTrainingListBaseModels, useTrainingListCanaryTargets, useTrainingListJobs, useTrainingPlanJob, useTrainingRegisterResult, useTrainingRollbackCanary, useTrainingStartJob, useTrainingStartJobBatch, useTurnProviderGetTurnServers, useUiText, useUnitPreferences, useUpdateGetStatus, useUpdateInstallUpdate, useUrlQueryParam, useUserManagementConfirmTotp, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementFindUserByExternalIdentity, useUserManagementGetTotpStatus, useUserManagementListExternalIdentities, useUserManagementListOauthSessions, useUserManagementListUsers, useUserManagementMigrateRawSecrets, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeOauthSession, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUnlinkExternalIdentity, useUserManagementUpdateUser, useUserManagementValidateCredentials, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsDialClipStream, useVideoclipsGetClipPlayback, useVideoclipsGetPlaybackOptions, useVideoclipsListClips, useVideoclipsListSources, useVideoclipsOfferClipBytes, useVideoclipsReadClipBytes, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionApplyDownlinkProbe, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionDebug, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetCurrentSnapshotBatch, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, Sailboat as ut, UtensilsCrossed as v, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, Hand as vn, Check as vr, QrCode$1 as vt, Undo2 as w, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint, withHiddenChart, withPanel, withResolvedParentDetail, withUseRootModel, withoutModelScopedFields, withoutPanel, Gamepad2 as wn, Cable as wr, writeStoredGroupBy, Play as wt, UserCheck as x, Grid2x2 as xn, Cast as xr, PowerOff as xt, Users as y, Hammer as yn, ChartLine as yr, Puzzle as yt, Sunrise as z, Droplet as zn, BatteryFull as zr, MousePointerClick as zt };