@camstack/ui-library 1.2.367 → 1.2.369
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/CHANGELOG.md +15 -0
- package/dist/{MotionZonesSettings-dx3wObgK.js → MotionZonesSettings-Zcfa5c9l.js} +1 -1
- package/dist/{PrivacyMaskSettings-BM2C_xWz.js → PrivacyMaskSettings-B_X42yzN.js} +1 -1
- package/dist/{SceneMonitorEditor-CI72S4eN.js → SceneMonitorEditor-C8YXVzYI.js} +1 -1
- package/dist/composites/device-controls/ac-panel.d.ts +18 -0
- package/dist/composites/device-controls/appliance-control.d.ts +14 -0
- package/dist/composites/device-controls/heater-control.d.ts +4 -0
- package/dist/composites/device-controls/timed-run-control.d.ts +13 -0
- package/dist/generated/system-hooks.d.ts +20 -6
- package/dist/{icons-jbAtRNh8.cjs → icons-DXwPEKdJ.cjs} +1 -29
- package/dist/{icons-CZwJd50b.js → icons-e-xohmFb.js} +1 -29
- package/dist/index.cjs +1214 -671
- package/dist/index.js +1210 -675
- package/package.json +1 -1
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, 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, baseUnitForQuantity, baseUnitOf, buildModelVariantGroups, buildSubjectPath, bundledCamstack, canConvertUnit, canonicalIconKey, clearModelBoundOverrides, clearModelBoundSetting, clusterStepSettingFieldsFor, collectModelBoundKeys, consumableFormOf, consumableKindOf, convertQuantityInput, coreBlockComposition, createDeviceProxy, createLazyTrpcSource, createSliceHandle, dehydrateSchema, deriveRecordingMode, describeModelVariant, displayUnitFor, effectiveStepSettings, findTimezone, formatParkedFor, formatReading, hasModelBoundOverrides, iconCategoryLabel, iconsInCategory, isDrawableSubjectPath, isKeychainStoredField, isModelScopedStepSettingKey, isReadingQuantity, isRootSuppliableStepId, isSecretClear, isSecretFieldView, isSecretMarker, lockDoorLinkOfComposition, modelBindingKey, normalizeUnit, paintHex, parseOccupancyScope, projectSubjectPath, publicEventCategories, resolveContainerPrimaryChild, resolveDeviceControlKind, resolveIconKey, resolveModelBoundSetting, resolveRecordingProfiles, resolveRootSupply, resolveVariantModelId, resolveViewableDeviceIds, searchIcons, selectAssignedProfileSlots, stepSettingSource, subjectPathSampleFromBox, subjectPathSvgPoints, tryConvertUnit, unitDimension, unitsForDimension, unitsForQuantity, 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, TIMED_RUN_LIMITS, TIMEZONES, USE_ROOT_MODEL_SETTING_KEY, assignNodeColorId, assignNodeColorId as assignNodeColorId$1, baseUnitForQuantity, baseUnitOf, buildModelVariantGroups, buildSubjectPath, bundledCamstack, canConvertUnit, canonicalIconKey, clearModelBoundOverrides, clearModelBoundSetting, clusterStepSettingFieldsFor, collectModelBoundKeys, consumableFormOf, consumableKindOf, convertQuantityInput, coreBlockComposition, createDeviceProxy, createLazyTrpcSource, createSliceHandle, dehydrateSchema, deriveRecordingMode, describeModelVariant, displayUnitFor, effectiveStepSettings, findTimezone, formatParkedFor, formatReading, hasModelBoundOverrides, iconCategoryLabel, iconsInCategory, isDrawableSubjectPath, isKeychainStoredField, isModelScopedStepSettingKey, isReadingQuantity, isRootSuppliableStepId, isSecretClear, isSecretFieldView, isSecretMarker, lockDoorLinkOfComposition, modelBindingKey, normalizeUnit, paintHex, parseOccupancyScope, projectSubjectPath, publicEventCategories, resolveContainerPrimaryChild, resolveDeviceControlKind, resolveIconKey, resolveModelBoundSetting, resolveRecordingProfiles, resolveRootSupply, resolveVariantModelId, resolveViewableDeviceIds, searchIcons, selectAssignedProfileSlots, stepSettingSource, subjectPathSampleFromBox, subjectPathSvgPoints, tryConvertUnit, unitDimension, unitsForDimension, unitsForQuantity, 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";
|
|
@@ -4260,6 +4260,34 @@ var Thermometer = createLucideIcon("thermometer", [["path", {
|
|
|
4260
4260
|
* This source code is licensed under the ISC license.
|
|
4261
4261
|
* See the LICENSE file in the root directory of this source tree.
|
|
4262
4262
|
*/
|
|
4263
|
+
var TimerOff = createLucideIcon("timer-off", [
|
|
4264
|
+
["path", {
|
|
4265
|
+
d: "M10 2h4",
|
|
4266
|
+
key: "n1abiw"
|
|
4267
|
+
}],
|
|
4268
|
+
["path", {
|
|
4269
|
+
d: "M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7",
|
|
4270
|
+
key: "10he05"
|
|
4271
|
+
}],
|
|
4272
|
+
["path", {
|
|
4273
|
+
d: "M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2",
|
|
4274
|
+
key: "15f7sh"
|
|
4275
|
+
}],
|
|
4276
|
+
["path", {
|
|
4277
|
+
d: "m2 2 20 20",
|
|
4278
|
+
key: "1ooewy"
|
|
4279
|
+
}],
|
|
4280
|
+
["path", {
|
|
4281
|
+
d: "M12 12v-2",
|
|
4282
|
+
key: "fwoke6"
|
|
4283
|
+
}]
|
|
4284
|
+
]);
|
|
4285
|
+
/**
|
|
4286
|
+
* @license lucide-react v0.576.0 - ISC
|
|
4287
|
+
*
|
|
4288
|
+
* This source code is licensed under the ISC license.
|
|
4289
|
+
* See the LICENSE file in the root directory of this source tree.
|
|
4290
|
+
*/
|
|
4263
4291
|
var Timer = createLucideIcon("timer", [
|
|
4264
4292
|
["line", {
|
|
4265
4293
|
x1: "10",
|
|
@@ -5432,6 +5460,11 @@ var DEVICE_TYPE_META = {
|
|
|
5432
5460
|
labelKey: "uiLibrary.deviceMeta.type.petFountain",
|
|
5433
5461
|
labelFallback: "Pet fountain"
|
|
5434
5462
|
},
|
|
5463
|
+
[DeviceType.Heater]: {
|
|
5464
|
+
icon: Flame,
|
|
5465
|
+
labelKey: "uiLibrary.deviceMeta.type.heater",
|
|
5466
|
+
labelFallback: "Heater"
|
|
5467
|
+
},
|
|
5435
5468
|
[DeviceType.Dishwasher]: {
|
|
5436
5469
|
icon: Waves,
|
|
5437
5470
|
labelKey: "uiLibrary.deviceMeta.type.dishwasher",
|
|
@@ -5937,7 +5970,7 @@ function lucideExportName(key) {
|
|
|
5937
5970
|
function loadIconGlyphs() {
|
|
5938
5971
|
if (fullTable !== void 0) return Promise.resolve();
|
|
5939
5972
|
if (failure$1 !== void 0) return Promise.reject(failure$1);
|
|
5940
|
-
pending ??= import("./icons-
|
|
5973
|
+
pending ??= import("./icons-e-xohmFb.js").then((module) => {
|
|
5941
5974
|
fullTable = module;
|
|
5942
5975
|
publish();
|
|
5943
5976
|
}, (error) => {
|
|
@@ -10670,12 +10703,6 @@ var useAddonsGetLogs = /*#__PURE__*/ alias(() => trpc.addons.getLogs.useQuery);
|
|
|
10670
10703
|
var useAddonsListPackages = /*#__PURE__*/ alias(() => trpc.addons.listPackages.useQuery);
|
|
10671
10704
|
/** Generated alias around `trpc.addons.installPackage.useMutation`. */
|
|
10672
10705
|
var useAddonsInstallPackage = /*#__PURE__*/ alias(() => trpc.addons.installPackage.useMutation);
|
|
10673
|
-
/** Generated alias around `trpc.addons.installFromWorkspace.useMutation`. */
|
|
10674
|
-
var useAddonsInstallFromWorkspace = /*#__PURE__*/ alias(() => trpc.addons.installFromWorkspace.useMutation);
|
|
10675
|
-
/** Generated alias around `trpc.addons.isWorkspaceAvailable.useQuery`. */
|
|
10676
|
-
var useAddonsIsWorkspaceAvailable = /*#__PURE__*/ alias(() => trpc.addons.isWorkspaceAvailable.useQuery);
|
|
10677
|
-
/** Generated alias around `trpc.addons.listWorkspacePackages.useQuery`. */
|
|
10678
|
-
var useAddonsListWorkspacePackages = /*#__PURE__*/ alias(() => trpc.addons.listWorkspacePackages.useQuery);
|
|
10679
10706
|
/** Generated alias around `trpc.addons.uninstallPackage.useMutation`. */
|
|
10680
10707
|
var useAddonsUninstallPackage = /*#__PURE__*/ alias(() => trpc.addons.uninstallPackage.useMutation);
|
|
10681
10708
|
/** Generated alias around `trpc.addons.listInstallations.useQuery`. */
|
|
@@ -11398,6 +11425,12 @@ var useDeviceProviderGetChildCreationSchema = /*#__PURE__*/ alias(() => trpc.dev
|
|
|
11398
11425
|
var useDeviceProviderCreateDevice = /*#__PURE__*/ alias(() => trpc.deviceProvider.createDevice.useMutation);
|
|
11399
11426
|
/** Generated alias around `trpc.deviceProvider.testCreationField.useMutation`. */
|
|
11400
11427
|
var useDeviceProviderTestCreationField = /*#__PURE__*/ alias(() => trpc.deviceProvider.testCreationField.useMutation);
|
|
11428
|
+
/** Generated alias around `trpc.deviceRuns.listRuns.useQuery`. */
|
|
11429
|
+
var useDeviceRunsListRuns = /*#__PURE__*/ alias(() => trpc.deviceRuns.listRuns.useQuery);
|
|
11430
|
+
/** Generated alias around `trpc.deviceRuns.getRun.useQuery`. */
|
|
11431
|
+
var useDeviceRunsGetRun = /*#__PURE__*/ alias(() => trpc.deviceRuns.getRun.useQuery);
|
|
11432
|
+
/** Generated alias around `trpc.deviceRuns.getCurrentRun.useQuery`. */
|
|
11433
|
+
var useDeviceRunsGetCurrentRun = /*#__PURE__*/ alias(() => trpc.deviceRuns.getCurrentRun.useQuery);
|
|
11401
11434
|
/** Generated alias around `trpc.deviceState.getSnapshot.useQuery`. */
|
|
11402
11435
|
var useDeviceStateGetSnapshot = /*#__PURE__*/ alias(() => trpc.deviceState.getSnapshot.useQuery);
|
|
11403
11436
|
/** Generated alias around `trpc.deviceState.getCapSlice.useQuery`. */
|
|
@@ -11502,6 +11535,14 @@ var useFanControlSetDirection = /*#__PURE__*/ alias(() => trpc.fanControl.setDir
|
|
|
11502
11535
|
var useFanControlSetOscillating = /*#__PURE__*/ alias(() => trpc.fanControl.setOscillating.useMutation);
|
|
11503
11536
|
/** Generated alias around `trpc.fanControl.getStatus.useQuery`. */
|
|
11504
11537
|
var useFanControlGetStatus = /*#__PURE__*/ alias(() => trpc.fanControl.getStatus.useQuery);
|
|
11538
|
+
/** Generated alias around `trpc.fanPresets.getPresets.useQuery`. */
|
|
11539
|
+
var useFanPresetsGetPresets = /*#__PURE__*/ alias(() => trpc.fanPresets.getPresets.useQuery);
|
|
11540
|
+
/** Generated alias around `trpc.fanPresets.setPresets.useMutation`. */
|
|
11541
|
+
var useFanPresetsSetPresets = /*#__PURE__*/ alias(() => trpc.fanPresets.setPresets.useMutation);
|
|
11542
|
+
/** Generated alias around `trpc.fanPresets.applyPreset.useMutation`. */
|
|
11543
|
+
var useFanPresetsApplyPreset = /*#__PURE__*/ alias(() => trpc.fanPresets.applyPreset.useMutation);
|
|
11544
|
+
/** Generated alias around `trpc.fanPresets.capturePreset.useQuery`. */
|
|
11545
|
+
var useFanPresetsCapturePreset = /*#__PURE__*/ alias(() => trpc.fanPresets.capturePreset.useQuery);
|
|
11505
11546
|
/** Generated alias around `trpc.featureProbe.getStatus.useQuery`. */
|
|
11506
11547
|
var useFeatureProbeGetStatus = /*#__PURE__*/ alias(() => trpc.featureProbe.getStatus.useQuery);
|
|
11507
11548
|
/** Generated alias around `trpc.flood.getStatus.useQuery`. */
|
|
@@ -13032,6 +13073,12 @@ var useTerminalSessionPullOutput = /*#__PURE__*/ alias(() => trpc.terminalSessio
|
|
|
13032
13073
|
var useTerminalSessionWriteInput = /*#__PURE__*/ alias(() => trpc.terminalSession.writeInput.useMutation);
|
|
13033
13074
|
/** Generated alias around `trpc.terminalSession.close.useMutation`. */
|
|
13034
13075
|
var useTerminalSessionClose = /*#__PURE__*/ alias(() => trpc.terminalSession.close.useMutation);
|
|
13076
|
+
/** Generated alias around `trpc.timedRun.runFor.useMutation`. */
|
|
13077
|
+
var useTimedRunRunFor = /*#__PURE__*/ alias(() => trpc.timedRun.runFor.useMutation);
|
|
13078
|
+
/** Generated alias around `trpc.timedRun.cancel.useMutation`. */
|
|
13079
|
+
var useTimedRunCancel = /*#__PURE__*/ alias(() => trpc.timedRun.cancel.useMutation);
|
|
13080
|
+
/** Generated alias around `trpc.timedRun.getStatus.useQuery`. */
|
|
13081
|
+
var useTimedRunGetStatus = /*#__PURE__*/ alias(() => trpc.timedRun.getStatus.useQuery);
|
|
13035
13082
|
/** Generated alias around `trpc.toast.onToast.useSubscription`. */
|
|
13036
13083
|
var useToastOnToast = /*#__PURE__*/ alias(() => trpc.toast.onToast.useSubscription);
|
|
13037
13084
|
/** Generated alias around `trpc.training.listBaseModels.useQuery`. */
|
|
@@ -30560,8 +30607,8 @@ function RecordingPanel({ deviceId }) {
|
|
|
30560
30607
|
* `type:'widget'` ConfigField. `WidgetSlot` resolves these BEFORE the
|
|
30561
30608
|
* Module-Federation `WidgetRegistry`. ids are namespaced `host/<name>`. */
|
|
30562
30609
|
var HOST_WIDGETS = {
|
|
30563
|
-
"host/motion-zones-grid": lazy(() => import("./MotionZonesSettings-
|
|
30564
|
-
"host/privacy-mask-grid": lazy(() => import("./PrivacyMaskSettings-
|
|
30610
|
+
"host/motion-zones-grid": lazy(() => import("./MotionZonesSettings-Zcfa5c9l.js").then((m) => ({ default: m.MotionZonesSettings }))),
|
|
30611
|
+
"host/privacy-mask-grid": lazy(() => import("./PrivacyMaskSettings-B_X42yzN.js").then((m) => ({ default: m.PrivacyMaskSettings }))),
|
|
30565
30612
|
"host/ptz-panel": PtzPanel,
|
|
30566
30613
|
"host/navigation-panel": NavigationPanel,
|
|
30567
30614
|
"host/consumables-panel": ConsumablesPanel,
|
|
@@ -36246,15 +36293,15 @@ function MobileDrawer({ open, onClose, children, className, width = "w-64" }) {
|
|
|
36246
36293
|
document.body.style.overflow = "";
|
|
36247
36294
|
};
|
|
36248
36295
|
}, [open, onClose]);
|
|
36249
|
-
return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("div", {
|
|
36250
|
-
className:
|
|
36296
|
+
return /* @__PURE__ */ jsxs(Fragment$1, { children: [open && /* @__PURE__ */ jsx("div", {
|
|
36297
|
+
className: "fixed inset-0 z-40 bg-black/50 animate-in fade-in duration-200",
|
|
36251
36298
|
onClick: onClose,
|
|
36252
36299
|
"aria-hidden": "true"
|
|
36253
36300
|
}), /* @__PURE__ */ jsx("div", {
|
|
36254
36301
|
ref: drawerRef,
|
|
36255
36302
|
role: "dialog",
|
|
36256
36303
|
"aria-modal": "true",
|
|
36257
|
-
className: cn("fixed inset-y-0 left-0 z-50 flex flex-col bg-surface border-r border-border shadow-2xl transition-transform duration-200 ease-out pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]", width, open ? "translate-x-0" : "-translate-x-full", className),
|
|
36304
|
+
className: cn("fixed inset-y-0 left-0 z-50 flex flex-col bg-surface border-r border-border shadow-2xl transition-transform duration-200 ease-out pt-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)]", width, open ? "translate-x-0" : "-translate-x-full shadow-none", className),
|
|
36258
36305
|
children
|
|
36259
36306
|
})] });
|
|
36260
36307
|
}
|
|
@@ -53570,7 +53617,7 @@ function resolveBowlReading(kilograms, system) {
|
|
|
53570
53617
|
function clampPortion(grams) {
|
|
53571
53618
|
return Math.min(PET_FEEDER_MANUAL_FEED_MAX, Math.max(PET_FEEDER_MANUAL_FEED_MIN, grams));
|
|
53572
53619
|
}
|
|
53573
|
-
var KEYFRAMES$
|
|
53620
|
+
var KEYFRAMES$3 = `
|
|
53574
53621
|
@keyframes pf-eat { 0%,100%{transform:translateY(0)} 50%{transform:translateY(2px)} }
|
|
53575
53622
|
@keyframes pf-pulse { 0%,100%{opacity:.55} 50%{opacity:1} }
|
|
53576
53623
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -53661,7 +53708,7 @@ function PetFeederPanel({ trpc, deviceId, layout, optimistic }) {
|
|
|
53661
53708
|
return /* @__PURE__ */ jsxs("div", {
|
|
53662
53709
|
className: "relative flex flex-col items-stretch gap-3 overflow-hidden rounded-lg border border-border bg-surface p-4",
|
|
53663
53710
|
children: [
|
|
53664
|
-
/* @__PURE__ */ jsx("style", { children: KEYFRAMES$
|
|
53711
|
+
/* @__PURE__ */ jsx("style", { children: KEYFRAMES$3 }),
|
|
53665
53712
|
/* @__PURE__ */ jsxs("div", {
|
|
53666
53713
|
className: "flex items-center gap-4 rounded-lg border border-border/50 bg-surface-subtle/40 p-3",
|
|
53667
53714
|
children: [/* @__PURE__ */ jsx(BowlGauge, {
|
|
@@ -54120,6 +54167,137 @@ function PetFeederHeroCard({ trpc, deviceId, features, optimistic }) {
|
|
|
54120
54167
|
});
|
|
54121
54168
|
}
|
|
54122
54169
|
//#endregion
|
|
54170
|
+
//#region src/composites/device-controls/timed-run-control.tsx
|
|
54171
|
+
/**
|
|
54172
|
+
* "Run for N" - the inline control of the `timed-run` cap (D993).
|
|
54173
|
+
*
|
|
54174
|
+
* A number, the unit it is in, and a Run button: the hub turns the device on and
|
|
54175
|
+
* switches it off again after that long. While a run is armed the control shows
|
|
54176
|
+
* the time left (counted down from the slice's `activeUntil`) and a Cancel. The
|
|
54177
|
+
* maximum is the device type's own bound (`TIMED_RUN_LIMITS`); a value above it
|
|
54178
|
+
* is refused by the hub with a typed reason, which this control says in words.
|
|
54179
|
+
*
|
|
54180
|
+
* Rendered only when the device binds `timed-run`. An unknown slice is "nothing
|
|
54181
|
+
* armed", never a running timer.
|
|
54182
|
+
*/
|
|
54183
|
+
var TICK_MS = 1e3;
|
|
54184
|
+
var SECONDS_PER_MINUTE$1 = 60;
|
|
54185
|
+
var MS_PER_SECOND = 1e3;
|
|
54186
|
+
var DEFAULT_MINUTES = 30;
|
|
54187
|
+
var DEFAULT_SECONDS = 60;
|
|
54188
|
+
/** `m:ss` for a countdown; a started run never shows a negative time. */
|
|
54189
|
+
function formatCountdown(remainingMs) {
|
|
54190
|
+
const total = Math.max(0, Math.ceil(remainingMs / MS_PER_SECOND));
|
|
54191
|
+
const minutes = Math.floor(total / SECONDS_PER_MINUTE$1);
|
|
54192
|
+
const seconds = total % SECONDS_PER_MINUTE$1;
|
|
54193
|
+
return `${minutes}:${String(seconds).padStart(2, "0")}`;
|
|
54194
|
+
}
|
|
54195
|
+
/** The largest value the field accepts, in the limit's unit. */
|
|
54196
|
+
function maxInUnit(limit) {
|
|
54197
|
+
return limit.unit === "min" ? limit.maxSeconds / SECONDS_PER_MINUTE$1 : limit.maxSeconds;
|
|
54198
|
+
}
|
|
54199
|
+
function useNow(active) {
|
|
54200
|
+
const [now, setNow] = useState(() => Date.now());
|
|
54201
|
+
useEffect(() => {
|
|
54202
|
+
if (!active) return void 0;
|
|
54203
|
+
setNow(Date.now());
|
|
54204
|
+
const handle = setInterval(() => setNow(Date.now()), TICK_MS);
|
|
54205
|
+
return () => clearInterval(handle);
|
|
54206
|
+
}, [active]);
|
|
54207
|
+
return now;
|
|
54208
|
+
}
|
|
54209
|
+
function TimedRunControl({ trpc, deviceId, limit }) {
|
|
54210
|
+
const t = useUiText();
|
|
54211
|
+
const { cap, slice, online } = useDeviceCapability({
|
|
54212
|
+
trpc,
|
|
54213
|
+
deviceId,
|
|
54214
|
+
cap: (d) => d.timedRun,
|
|
54215
|
+
slice: (d) => d.state.timedRun
|
|
54216
|
+
});
|
|
54217
|
+
const max = maxInUnit(limit);
|
|
54218
|
+
const [draft, setDraft] = useState(Math.min(max, limit.unit === "min" ? DEFAULT_MINUTES : DEFAULT_SECONDS));
|
|
54219
|
+
const [refusal, setRefusal] = useState(null);
|
|
54220
|
+
const activeUntil = slice?.activeUntil ?? null;
|
|
54221
|
+
const now = useNow(activeUntil !== null);
|
|
54222
|
+
if (cap === void 0) return null;
|
|
54223
|
+
const unitLabel = limit.unit === "min" ? t("uiLibrary.timedRun.minutes", "min") : t("uiLibrary.timedRun.seconds", "s");
|
|
54224
|
+
const valid = Number.isFinite(draft) && draft > 0 && draft <= max;
|
|
54225
|
+
const armed = activeUntil !== null && activeUntil > now;
|
|
54226
|
+
const run = () => {
|
|
54227
|
+
if (!valid) return;
|
|
54228
|
+
setRefusal(null);
|
|
54229
|
+
cap.runFor({
|
|
54230
|
+
duration: draft,
|
|
54231
|
+
unit: limit.unit
|
|
54232
|
+
}).then((result) => {
|
|
54233
|
+
if (!result.ok) setRefusal(result.reason);
|
|
54234
|
+
});
|
|
54235
|
+
};
|
|
54236
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
54237
|
+
className: "flex flex-col gap-1.5",
|
|
54238
|
+
"data-testid": "timed-run-control",
|
|
54239
|
+
children: [
|
|
54240
|
+
/* @__PURE__ */ jsxs("div", {
|
|
54241
|
+
className: "flex items-center gap-2",
|
|
54242
|
+
children: [
|
|
54243
|
+
/* @__PURE__ */ jsx(Input, {
|
|
54244
|
+
type: "number",
|
|
54245
|
+
inputMode: "numeric",
|
|
54246
|
+
min: 1,
|
|
54247
|
+
max,
|
|
54248
|
+
step: 1,
|
|
54249
|
+
value: Number.isFinite(draft) ? draft : "",
|
|
54250
|
+
disabled: !online,
|
|
54251
|
+
"aria-label": t("uiLibrary.timedRun.duration", "Run for"),
|
|
54252
|
+
className: "w-20 tabular-nums",
|
|
54253
|
+
onChange: (event) => setDraft(event.target.valueAsNumber)
|
|
54254
|
+
}),
|
|
54255
|
+
/* @__PURE__ */ jsx("span", {
|
|
54256
|
+
className: "text-xs text-foreground-muted",
|
|
54257
|
+
children: unitLabel
|
|
54258
|
+
}),
|
|
54259
|
+
/* @__PURE__ */ jsxs(Button, {
|
|
54260
|
+
size: "sm",
|
|
54261
|
+
disabled: !online || !valid,
|
|
54262
|
+
onClick: run,
|
|
54263
|
+
children: [/* @__PURE__ */ jsx(Timer, {
|
|
54264
|
+
className: "h-4 w-4",
|
|
54265
|
+
"aria-hidden": true
|
|
54266
|
+
}), t("uiLibrary.timedRun.run", "Run")]
|
|
54267
|
+
}),
|
|
54268
|
+
armed && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
|
|
54269
|
+
className: "text-xs font-medium tabular-nums text-foreground",
|
|
54270
|
+
"data-testid": "timed-run-countdown",
|
|
54271
|
+
children: t("uiLibrary.timedRun.remaining", "{{time}} left", { time: formatCountdown(activeUntil - now) })
|
|
54272
|
+
}), /* @__PURE__ */ jsx(Button, {
|
|
54273
|
+
size: "sm",
|
|
54274
|
+
variant: "outline",
|
|
54275
|
+
disabled: !online,
|
|
54276
|
+
"aria-label": t("uiLibrary.timedRun.cancel", "Cancel the timer"),
|
|
54277
|
+
onClick: () => void cap.cancel({}),
|
|
54278
|
+
children: /* @__PURE__ */ jsx(TimerOff, {
|
|
54279
|
+
className: "h-4 w-4",
|
|
54280
|
+
"aria-hidden": true
|
|
54281
|
+
})
|
|
54282
|
+
})] })
|
|
54283
|
+
]
|
|
54284
|
+
}),
|
|
54285
|
+
!valid && /* @__PURE__ */ jsx("span", {
|
|
54286
|
+
className: "text-xs text-danger",
|
|
54287
|
+
children: t("uiLibrary.timedRun.range", "Enter 1 to {{max}} {{unit}}", {
|
|
54288
|
+
max,
|
|
54289
|
+
unit: unitLabel
|
|
54290
|
+
})
|
|
54291
|
+
}),
|
|
54292
|
+
refusal !== null && /* @__PURE__ */ jsx("span", {
|
|
54293
|
+
className: "text-xs text-danger",
|
|
54294
|
+
role: "alert",
|
|
54295
|
+
children: refusal === "over-max" ? t("uiLibrary.timedRun.overMax", "That is longer than this device may run.") : refusal === "command-failed" ? t("uiLibrary.timedRun.commandFailed", "The device did not turn on.") : t("uiLibrary.timedRun.unsupported", "This device cannot run on a timer.")
|
|
54296
|
+
})
|
|
54297
|
+
]
|
|
54298
|
+
});
|
|
54299
|
+
}
|
|
54300
|
+
//#endregion
|
|
54123
54301
|
//#region src/composites/device-controls/pet-fountain-panel.tsx
|
|
54124
54302
|
/**
|
|
54125
54303
|
* Pet-fountain controls for a `DeviceType.PetFountain` device.
|
|
@@ -54138,6 +54316,17 @@ function PetFeederHeroCard({ trpc, deviceId, features, optimistic }) {
|
|
|
54138
54316
|
* zero. Stored volumes are litres and durations seconds (D944); the card
|
|
54139
54317
|
* shows millilitres and minutes. Actions are gated on `available`.
|
|
54140
54318
|
*/
|
|
54319
|
+
var KEYFRAMES$2 = `
|
|
54320
|
+
@keyframes pfn-ripple { 0% { transform: scale(.45); opacity: .7 } 100% { transform: scale(1.15); opacity: 0 } }
|
|
54321
|
+
@keyframes pfn-rise { 0% { transform: translateY(0); opacity: 0 } 20% { opacity: .8 } 100% { transform: translateY(-16px); opacity: 0 } }
|
|
54322
|
+
.pfn-ripple, .pfn-bubble { transform-box: fill-box; transform-origin: center; }
|
|
54323
|
+
.pfn-ripple { animation: pfn-ripple 2.4s ease-out infinite; }
|
|
54324
|
+
.pfn-bubble { animation: pfn-rise 2.2s ease-in infinite; }
|
|
54325
|
+
@media (prefers-reduced-motion: reduce) {
|
|
54326
|
+
.pfn-ripple, .pfn-bubble { animation: none !important; opacity: 0; }
|
|
54327
|
+
}
|
|
54328
|
+
`;
|
|
54329
|
+
var PUMP_LIMIT = TIMED_RUN_LIMITS[DeviceType.PetFountain];
|
|
54141
54330
|
var LITRES_TO_ML = 1e3;
|
|
54142
54331
|
var SECONDS_PER_MINUTE = 60;
|
|
54143
54332
|
var MAX_PUMP_MINUTES = 240;
|
|
@@ -54198,25 +54387,30 @@ function PetFountainPanel({ trpc, deviceId, layout, optimistic }) {
|
|
|
54198
54387
|
children: [
|
|
54199
54388
|
/* @__PURE__ */ jsxs("div", {
|
|
54200
54389
|
className: "flex items-center gap-4 rounded-lg border border-border-subtle bg-background-elevated p-3",
|
|
54201
|
-
children: [
|
|
54202
|
-
|
|
54203
|
-
|
|
54204
|
-
|
|
54205
|
-
|
|
54206
|
-
|
|
54207
|
-
|
|
54208
|
-
|
|
54209
|
-
|
|
54210
|
-
|
|
54211
|
-
|
|
54212
|
-
|
|
54213
|
-
|
|
54390
|
+
children: [
|
|
54391
|
+
/* @__PURE__ */ jsx("style", { children: KEYFRAMES$2 }),
|
|
54392
|
+
/* @__PURE__ */ jsx(TankGauge, {
|
|
54393
|
+
level,
|
|
54394
|
+
empty: display.empty === true,
|
|
54395
|
+
pumping: display.pumpRunning === true
|
|
54396
|
+
}),
|
|
54397
|
+
/* @__PURE__ */ jsxs("div", {
|
|
54398
|
+
className: "flex min-w-0 flex-1 flex-col gap-1.5",
|
|
54399
|
+
children: [/* @__PURE__ */ jsxs("div", {
|
|
54400
|
+
className: "flex items-baseline gap-2",
|
|
54401
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
54402
|
+
className: cn("text-3xl font-bold leading-none tabular-nums", display.empty === true ? "text-danger" : "text-info"),
|
|
54403
|
+
children: level === null ? "—" : `${Math.round(level)}%`
|
|
54404
|
+
}), /* @__PURE__ */ jsx("span", {
|
|
54405
|
+
className: "text-sm tabular-nums text-foreground-muted",
|
|
54406
|
+
children: millilitres(display.waterVolume)
|
|
54407
|
+
})]
|
|
54408
|
+
}), /* @__PURE__ */ jsx(StatusLine, {
|
|
54409
|
+
empty: display.empty,
|
|
54410
|
+
pumpRunning: display.pumpRunning
|
|
54214
54411
|
})]
|
|
54215
|
-
})
|
|
54216
|
-
|
|
54217
|
-
pumpRunning: display.pumpRunning
|
|
54218
|
-
})]
|
|
54219
|
-
})]
|
|
54412
|
+
})
|
|
54413
|
+
]
|
|
54220
54414
|
}),
|
|
54221
54415
|
fault !== null && /* @__PURE__ */ jsxs("div", {
|
|
54222
54416
|
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",
|
|
@@ -54297,6 +54491,11 @@ function PetFountainPanel({ trpc, deviceId, layout, optimistic }) {
|
|
|
54297
54491
|
]
|
|
54298
54492
|
})
|
|
54299
54493
|
}),
|
|
54494
|
+
PUMP_LIMIT !== void 0 && /* @__PURE__ */ jsx(TimedRunControl, {
|
|
54495
|
+
trpc,
|
|
54496
|
+
deviceId,
|
|
54497
|
+
limit: PUMP_LIMIT
|
|
54498
|
+
}),
|
|
54300
54499
|
/* @__PURE__ */ jsxs(Button, {
|
|
54301
54500
|
variant: "outline",
|
|
54302
54501
|
size: "sm",
|
|
@@ -54311,7 +54510,7 @@ function PetFountainPanel({ trpc, deviceId, layout, optimistic }) {
|
|
|
54311
54510
|
});
|
|
54312
54511
|
}
|
|
54313
54512
|
/** A tank outline whose water rises with the level; danger-coloured when empty. */
|
|
54314
|
-
function TankGauge({ level, empty }) {
|
|
54513
|
+
function TankGauge({ level, empty, pumping }) {
|
|
54315
54514
|
const t = useUiText();
|
|
54316
54515
|
const top = 58 - Math.min(1, Math.max(0, (level ?? 0) / 100)) * 40;
|
|
54317
54516
|
return /* @__PURE__ */ jsxs("svg", {
|
|
@@ -54332,16 +54531,56 @@ function TankGauge({ level, empty }) {
|
|
|
54332
54531
|
rx: "6"
|
|
54333
54532
|
})
|
|
54334
54533
|
}) }),
|
|
54335
|
-
/* @__PURE__ */
|
|
54534
|
+
/* @__PURE__ */ jsxs("g", {
|
|
54336
54535
|
clipPath: "url(#pfn-tank-clip)",
|
|
54337
|
-
children: /* @__PURE__ */ jsx("rect", {
|
|
54536
|
+
children: [/* @__PURE__ */ jsx("rect", {
|
|
54338
54537
|
x: "18",
|
|
54339
54538
|
y: top,
|
|
54340
54539
|
width: "36",
|
|
54341
54540
|
height: "46",
|
|
54342
54541
|
className: empty ? "fill-danger" : "fill-info",
|
|
54343
54542
|
opacity: .75
|
|
54344
|
-
})
|
|
54543
|
+
}), pumping && level !== null && !empty && /* @__PURE__ */ jsxs("g", {
|
|
54544
|
+
"data-testid": "fountain-ripple",
|
|
54545
|
+
children: [
|
|
54546
|
+
/* @__PURE__ */ jsx("ellipse", {
|
|
54547
|
+
cx: "36",
|
|
54548
|
+
cy: top,
|
|
54549
|
+
rx: "14",
|
|
54550
|
+
ry: "3.5",
|
|
54551
|
+
fill: "none",
|
|
54552
|
+
strokeWidth: "1.5",
|
|
54553
|
+
className: "pfn-ripple stroke-info"
|
|
54554
|
+
}),
|
|
54555
|
+
/* @__PURE__ */ jsx("ellipse", {
|
|
54556
|
+
cx: "36",
|
|
54557
|
+
cy: top,
|
|
54558
|
+
rx: "14",
|
|
54559
|
+
ry: "3.5",
|
|
54560
|
+
fill: "none",
|
|
54561
|
+
strokeWidth: "1.5",
|
|
54562
|
+
className: "pfn-ripple stroke-info [animation-delay:1.2s]"
|
|
54563
|
+
}),
|
|
54564
|
+
/* @__PURE__ */ jsx("circle", {
|
|
54565
|
+
cx: "28",
|
|
54566
|
+
cy: "54",
|
|
54567
|
+
r: "1.8",
|
|
54568
|
+
className: "pfn-bubble fill-info"
|
|
54569
|
+
}),
|
|
54570
|
+
/* @__PURE__ */ jsx("circle", {
|
|
54571
|
+
cx: "38",
|
|
54572
|
+
cy: "56",
|
|
54573
|
+
r: "1.4",
|
|
54574
|
+
className: "pfn-bubble fill-info [animation-delay:0.8s]"
|
|
54575
|
+
}),
|
|
54576
|
+
/* @__PURE__ */ jsx("circle", {
|
|
54577
|
+
cx: "45",
|
|
54578
|
+
cy: "54",
|
|
54579
|
+
r: "1.6",
|
|
54580
|
+
className: "pfn-bubble fill-info [animation-delay:1.5s]"
|
|
54581
|
+
})
|
|
54582
|
+
]
|
|
54583
|
+
})]
|
|
54345
54584
|
}),
|
|
54346
54585
|
/* @__PURE__ */ jsx("rect", {
|
|
54347
54586
|
x: "18",
|
|
@@ -54481,661 +54720,215 @@ function PetFountainHeroCard({ trpc, deviceId, features, optimistic }) {
|
|
|
54481
54720
|
});
|
|
54482
54721
|
}
|
|
54483
54722
|
//#endregion
|
|
54484
|
-
//#region src/composites/device-controls/
|
|
54485
|
-
/**
|
|
54486
|
-
|
|
54487
|
-
|
|
54488
|
-
|
|
54489
|
-
|
|
54490
|
-
|
|
54491
|
-
|
|
54492
|
-
|
|
54493
|
-
|
|
54494
|
-
|
|
54495
|
-
* reported, and this view renders that as "—" / a disabled control, never as an unchecked
|
|
54496
|
-
* box or a zero. It also does not echo a command before the appliance confirms it: the
|
|
54497
|
-
* slice moves when the appliance says so.
|
|
54498
|
-
*/
|
|
54499
|
-
/** What the operation state is called to a person, and how it is toned. */
|
|
54500
|
-
function dishwasherOperationMeta(operationState, t = defaultUiText) {
|
|
54501
|
-
switch (operationState) {
|
|
54502
|
-
case "Run": return {
|
|
54503
|
-
label: t("uiLibrary.dishwasher.op.run", "Running"),
|
|
54504
|
-
tone: "text-primary"
|
|
54505
|
-
};
|
|
54506
|
-
case "Pause": return {
|
|
54507
|
-
label: t("uiLibrary.dishwasher.op.pause", "Paused"),
|
|
54508
|
-
tone: "text-warning"
|
|
54509
|
-
};
|
|
54510
|
-
case "Finished": return {
|
|
54511
|
-
label: t("uiLibrary.dishwasher.op.finished", "Finished"),
|
|
54512
|
-
tone: "text-success"
|
|
54513
|
-
};
|
|
54514
|
-
case "Error": return {
|
|
54515
|
-
label: t("uiLibrary.dishwasher.op.error", "Error"),
|
|
54516
|
-
tone: "text-danger"
|
|
54517
|
-
};
|
|
54518
|
-
case "Aborting": return {
|
|
54519
|
-
label: t("uiLibrary.dishwasher.op.aborting", "Stopping"),
|
|
54520
|
-
tone: "text-warning"
|
|
54521
|
-
};
|
|
54522
|
-
case "ActionRequired": return {
|
|
54523
|
-
label: t("uiLibrary.dishwasher.op.actionRequired", "Action required"),
|
|
54524
|
-
tone: "text-warning"
|
|
54525
|
-
};
|
|
54526
|
-
case "DelayedStart": return {
|
|
54527
|
-
label: t("uiLibrary.dishwasher.op.delayedStart", "Delayed start"),
|
|
54528
|
-
tone: "text-primary"
|
|
54529
|
-
};
|
|
54530
|
-
case "Ready": return {
|
|
54531
|
-
label: t("uiLibrary.dishwasher.op.ready", "Ready"),
|
|
54532
|
-
tone: "text-foreground"
|
|
54533
|
-
};
|
|
54534
|
-
case "Inactive": return {
|
|
54535
|
-
label: t("uiLibrary.dishwasher.op.inactive", "Inactive"),
|
|
54536
|
-
tone: "text-foreground-subtle"
|
|
54537
|
-
};
|
|
54538
|
-
case null: return {
|
|
54539
|
-
label: t("uiLibrary.dishwasher.unknown", "Unknown"),
|
|
54540
|
-
tone: "text-foreground-subtle"
|
|
54541
|
-
};
|
|
54542
|
-
}
|
|
54723
|
+
//#region src/composites/device-controls/ac-panel.tsx
|
|
54724
|
+
/** Modes that mean the device can cool, dry, or move air — an air conditioner. */
|
|
54725
|
+
var COOLING_MODES = new Set([
|
|
54726
|
+
"cool",
|
|
54727
|
+
"heat_cool",
|
|
54728
|
+
"dry",
|
|
54729
|
+
"fan_only"
|
|
54730
|
+
]);
|
|
54731
|
+
/** A heater offers heat (and maybe auto/off) and none of the cooling modes. */
|
|
54732
|
+
function climateOffersCooling(modes) {
|
|
54733
|
+
return modes.some((mode) => COOLING_MODES.has(mode));
|
|
54543
54734
|
}
|
|
54544
|
-
/**
|
|
54545
|
-
function
|
|
54546
|
-
|
|
54547
|
-
|
|
54548
|
-
|
|
54549
|
-
|
|
54550
|
-
|
|
54551
|
-
|
|
54552
|
-
|
|
54553
|
-
|
|
54554
|
-
|
|
54555
|
-
|
|
54735
|
+
/** Setpoint track bounds. Absent when the integration did not report both ends. */
|
|
54736
|
+
function climateSetpointBounds(status) {
|
|
54737
|
+
const min = status.minTemp;
|
|
54738
|
+
const max = status.maxTemp;
|
|
54739
|
+
if (typeof min !== "number" || typeof max !== "number") return null;
|
|
54740
|
+
if (!Number.isFinite(min) || !Number.isFinite(max) || max <= min) return null;
|
|
54741
|
+
return {
|
|
54742
|
+
min,
|
|
54743
|
+
max
|
|
54744
|
+
};
|
|
54745
|
+
}
|
|
54746
|
+
/** Map a 0–1 drag fraction onto the setpoint, snapped to `tempStep`. */
|
|
54747
|
+
function climateTargetFromFraction(fraction, bounds, tempStep) {
|
|
54748
|
+
const step = resolveClimateTempStep(tempStep);
|
|
54749
|
+
const clamped = Math.min(1, Math.max(0, fraction));
|
|
54750
|
+
const raw = bounds.min + clamped * (bounds.max - bounds.min);
|
|
54751
|
+
const steps = Math.round((raw - bounds.min) / step);
|
|
54752
|
+
const snapped = bounds.min + steps * step;
|
|
54753
|
+
const rounded = Math.round(snapped * 1e3) / 1e3;
|
|
54754
|
+
return Math.min(bounds.max, Math.max(bounds.min, rounded));
|
|
54755
|
+
}
|
|
54756
|
+
/** AC-appropriate short mode labels. Exhaustive over HvacMode. */
|
|
54757
|
+
function modeLabel(t, mode) {
|
|
54758
|
+
switch (mode) {
|
|
54759
|
+
case "cool": return t("uiLibrary.acPanel.modeCool", "Cool");
|
|
54760
|
+
case "heat": return t("uiLibrary.acPanel.modeHeat", "Heat");
|
|
54761
|
+
case "auto": return t("uiLibrary.acPanel.modeAuto", "Auto");
|
|
54762
|
+
case "heat_cool": return t("uiLibrary.acPanel.modeHeatCool", "Heat·Cool");
|
|
54763
|
+
case "fan_only": return t("uiLibrary.acPanel.modeFan", "Fan");
|
|
54764
|
+
case "dry": return t("uiLibrary.acPanel.modeDry", "Dry");
|
|
54765
|
+
case "off": return t("uiLibrary.acPanel.modeOff", "Off");
|
|
54556
54766
|
}
|
|
54557
54767
|
}
|
|
54558
|
-
/**
|
|
54559
|
-
|
|
54560
|
-
|
|
54768
|
+
/** Per-mode icon (lucide). Exhaustive over HvacMode. */
|
|
54769
|
+
var MODE_ICON = {
|
|
54770
|
+
cool: Snowflake,
|
|
54771
|
+
heat: Flame,
|
|
54772
|
+
auto: Sparkles,
|
|
54773
|
+
heat_cool: Thermometer,
|
|
54774
|
+
fan_only: Fan,
|
|
54775
|
+
dry: Droplets,
|
|
54776
|
+
off: Power
|
|
54777
|
+
};
|
|
54778
|
+
/** Mode accent hex — drives the airflow particles, the glow, and the target
|
|
54779
|
+
* value colour. Mirrors the thermostat gauge palette. Exhaustive. */
|
|
54780
|
+
var MODE_ACCENT = {
|
|
54781
|
+
heat: "#f59e0b",
|
|
54782
|
+
cool: "#60a5fa",
|
|
54783
|
+
auto: "#c084fc",
|
|
54784
|
+
heat_cool: "#e879f9",
|
|
54785
|
+
fan_only: "#94a3b8",
|
|
54786
|
+
dry: "#22d3ee",
|
|
54787
|
+
off: "#a1a1aa"
|
|
54788
|
+
};
|
|
54789
|
+
/** Title-case a snake/lower token for a selector option ('medium_low' → 'Medium
|
|
54790
|
+
* low', 'turbo' → 'Turbo'). Shared by the fan + preset selectors. */
|
|
54791
|
+
function fanLabel(token) {
|
|
54792
|
+
const spaced = token.replace(/_/g, " ");
|
|
54793
|
+
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
54794
|
+
}
|
|
54795
|
+
/** Preset → icon. Unknown presets fall back to a neutral sparkle. */
|
|
54796
|
+
function presetIcon(preset) {
|
|
54797
|
+
switch (preset) {
|
|
54798
|
+
case "turbo": return Zap;
|
|
54799
|
+
case "quiet": return Feather;
|
|
54800
|
+
case "sleep": return Moon;
|
|
54801
|
+
case "eco": return Leaf;
|
|
54802
|
+
case "8c_heat": return Snowflake;
|
|
54803
|
+
case "none": return Ban;
|
|
54804
|
+
default: return Sparkles;
|
|
54805
|
+
}
|
|
54561
54806
|
}
|
|
54562
54807
|
/**
|
|
54563
|
-
*
|
|
54564
|
-
*
|
|
54808
|
+
* Fan level → airflow animation period. Higher speed ⇒ shorter period. Unknown
|
|
54809
|
+
* strings fall back to a medium pace. Turbo (a preset) shortens it further.
|
|
54565
54810
|
*/
|
|
54566
|
-
function
|
|
54567
|
-
|
|
54568
|
-
|
|
54569
|
-
|
|
54570
|
-
|
|
54571
|
-
|
|
54572
|
-
|
|
54811
|
+
function airflowPeriodSec(fanMode) {
|
|
54812
|
+
switch (fanMode) {
|
|
54813
|
+
case "high": return 1;
|
|
54814
|
+
case "medium_high": return 1.3;
|
|
54815
|
+
case "medium": return 1.6;
|
|
54816
|
+
case "medium_low": return 1.9;
|
|
54817
|
+
case "low": return 2.2;
|
|
54818
|
+
default: return 1.8;
|
|
54819
|
+
}
|
|
54573
54820
|
}
|
|
54574
|
-
|
|
54575
|
-
|
|
54576
|
-
|
|
54577
|
-
|
|
54578
|
-
|
|
54579
|
-
|
|
54580
|
-
|
|
54581
|
-
|
|
54582
|
-
|
|
54583
|
-
|
|
54584
|
-
});
|
|
54821
|
+
var KEYFRAMES$1 = `
|
|
54822
|
+
@keyframes acv-fall { 0%{transform:translateY(-1.75rem);opacity:0} 18%{opacity:.7} 82%{opacity:.7} 100%{transform:translateY(7.5rem);opacity:0} }
|
|
54823
|
+
@keyframes acv-rise { 0%{transform:translateY(7.5rem);opacity:0} 18%{opacity:.7} 82%{opacity:.7} 100%{transform:translateY(-1.75rem);opacity:0} }
|
|
54824
|
+
@keyframes acv-sway { 0%,100%{transform:translateX(-9%)} 50%{transform:translateX(9%)} }
|
|
54825
|
+
@keyframes acv-swing-h { 0%,100%{transform:translateX(-22%)} 50%{transform:translateX(22%)} }
|
|
54826
|
+
@keyframes acv-swing-v { 0%,100%{transform:translateY(-22%)} 50%{transform:translateY(22%)} }
|
|
54827
|
+
@keyframes acv-spin { to { transform:rotate(360deg) } }
|
|
54828
|
+
@keyframes acv-glow { 0%,100%{opacity:.35;transform:scale(1)} 50%{opacity:.6;transform:scale(1.06)} }
|
|
54829
|
+
@media (prefers-reduced-motion: reduce) {
|
|
54830
|
+
.acv-streak, .acv-fan, .acv-sway-wrap, .acv-glow, .acv-swing { animation: none !important; }
|
|
54585
54831
|
}
|
|
54586
|
-
|
|
54587
|
-
|
|
54832
|
+
`;
|
|
54833
|
+
function AcPanel({ trpc, deviceId, layout, optimistic }) {
|
|
54834
|
+
const t = useUiText();
|
|
54835
|
+
const { cap, slice, available } = useDeviceCapability({
|
|
54588
54836
|
trpc,
|
|
54589
54837
|
deviceId,
|
|
54590
|
-
cap: (d) => d.
|
|
54591
|
-
slice: (d) => d.state.
|
|
54592
|
-
});
|
|
54593
|
-
}
|
|
54594
|
-
function DishwasherIconButton({ label, busy, active, onClick, children }) {
|
|
54595
|
-
return /* @__PURE__ */ jsx("button", {
|
|
54596
|
-
type: "button",
|
|
54597
|
-
"aria-label": label,
|
|
54598
|
-
title: label,
|
|
54599
|
-
disabled: busy,
|
|
54600
|
-
onClick: (e) => {
|
|
54601
|
-
e.stopPropagation();
|
|
54602
|
-
onClick();
|
|
54603
|
-
},
|
|
54604
|
-
className: cn("inline-flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors", active && "bg-primary text-primary-foreground", busy && "opacity-40 cursor-not-allowed"),
|
|
54605
|
-
children
|
|
54606
|
-
});
|
|
54607
|
-
}
|
|
54608
|
-
function DishwasherGraphic({ running, progressPercent }) {
|
|
54609
|
-
const pct = progressPercent != null ? Math.max(0, Math.min(100, progressPercent)) : running ? 40 : 0;
|
|
54610
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
54611
|
-
"aria-hidden": "true",
|
|
54612
|
-
className: "relative w-28 h-36 rounded border-2 border-border bg-gradient-to-b from-surface-hover to-surface overflow-hidden flex-shrink-0",
|
|
54613
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
54614
|
-
className: cn("absolute inset-x-0 bottom-0 bg-primary/25 transition-[height] duration-500", running && "animate-pulse"),
|
|
54615
|
-
style: { height: `${pct}%` }
|
|
54616
|
-
}), /* @__PURE__ */ jsx("div", {
|
|
54617
|
-
className: "absolute inset-0 flex items-center justify-center text-foreground-subtle",
|
|
54618
|
-
children: /* @__PURE__ */ jsx(Waves, { className: "h-10 w-10 opacity-70" })
|
|
54619
|
-
})]
|
|
54838
|
+
cap: (d) => d.climateControl,
|
|
54839
|
+
slice: (d) => d.state.climateControl
|
|
54620
54840
|
});
|
|
54621
|
-
}
|
|
54622
|
-
function DishwasherPanel({ trpc, deviceId, layout }) {
|
|
54623
|
-
const t = useUiText();
|
|
54624
|
-
const { cap, slice, available } = useDishwasher(trpc, deviceId);
|
|
54841
|
+
const { display, applyOptimistic } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
|
|
54625
54842
|
if (cap === void 0) return null;
|
|
54626
|
-
if (
|
|
54627
|
-
const
|
|
54628
|
-
const link = display.availability === "available";
|
|
54629
|
-
const busy = !available || !link;
|
|
54630
|
-
const optionTogglesLocked = display.childLock === true;
|
|
54631
|
-
const meta = dishwasherHeadline(display, t);
|
|
54632
|
-
const running = display.operationState === "Run";
|
|
54633
|
-
const paused = display.operationState === "Pause";
|
|
54634
|
-
const startable = display.remoteStartAllowed === true && display.selectedProgram !== null;
|
|
54635
|
-
const press = (fn) => {
|
|
54636
|
-
if (busy) return;
|
|
54637
|
-
fn();
|
|
54638
|
-
};
|
|
54843
|
+
if (display === void 0) return null;
|
|
54844
|
+
const busy = !available;
|
|
54639
54845
|
if (layout === "compact") return /* @__PURE__ */ jsxs("div", {
|
|
54640
|
-
|
|
54846
|
+
"data-mode": display.mode,
|
|
54847
|
+
className: "inline-flex items-center gap-1",
|
|
54641
54848
|
children: [
|
|
54642
|
-
display.doorOpen === true && /* @__PURE__ */ jsx("span", {
|
|
54643
|
-
className: "inline-flex text-warning shrink-0",
|
|
54644
|
-
title: t("uiLibrary.dishwasher.doorOpen", "Door open"),
|
|
54645
|
-
"aria-label": t("uiLibrary.dishwasher.doorOpen", "Door open"),
|
|
54646
|
-
children: /* @__PURE__ */ jsx(DoorOpen, { className: "h-3.5 w-3.5" })
|
|
54647
|
-
}),
|
|
54648
54849
|
/* @__PURE__ */ jsx("span", {
|
|
54649
|
-
className: cn("text-xs
|
|
54650
|
-
children:
|
|
54651
|
-
|
|
54652
|
-
|
|
54653
|
-
|
|
54654
|
-
|
|
54655
|
-
|
|
54656
|
-
|
|
54657
|
-
|
|
54658
|
-
|
|
54659
|
-
|
|
54660
|
-
|
|
54661
|
-
|
|
54662
|
-
|
|
54663
|
-
|
|
54664
|
-
|
|
54665
|
-
|
|
54666
|
-
children: /* @__PURE__ */ jsx(Play, { className: "h-3 w-3" })
|
|
54850
|
+
className: cn("text-xs tabular-nums font-medium", MODE_TEXT_COLOR[display.mode]),
|
|
54851
|
+
children: display.target !== null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
54852
|
+
display.target,
|
|
54853
|
+
"°",
|
|
54854
|
+
display.currentTemp !== null && /* @__PURE__ */ jsxs("span", {
|
|
54855
|
+
className: "text-foreground-subtle font-normal",
|
|
54856
|
+
children: [
|
|
54857
|
+
" ",
|
|
54858
|
+
"(",
|
|
54859
|
+
display.currentTemp,
|
|
54860
|
+
"°)"
|
|
54861
|
+
]
|
|
54862
|
+
})
|
|
54863
|
+
] }) : display.currentTemp !== null ? /* @__PURE__ */ jsxs("span", {
|
|
54864
|
+
className: "text-foreground-subtle",
|
|
54865
|
+
children: [display.currentTemp, "°"]
|
|
54866
|
+
}) : null
|
|
54667
54867
|
}),
|
|
54668
|
-
/* @__PURE__ */ jsx(
|
|
54669
|
-
|
|
54670
|
-
|
|
54671
|
-
|
|
54672
|
-
onClick: () =>
|
|
54673
|
-
|
|
54868
|
+
display.target !== null && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
|
|
54869
|
+
type: "button",
|
|
54870
|
+
"aria-label": t("uiLibrary.acPanel.decrease", "Decrease target"),
|
|
54871
|
+
disabled: busy,
|
|
54872
|
+
onClick: (e) => {
|
|
54873
|
+
e.stopPropagation();
|
|
54874
|
+
if (!busy && display.target !== null) {
|
|
54875
|
+
const next = nextClimateTarget(display.target, -1, display);
|
|
54876
|
+
applyOptimistic({ target: next });
|
|
54877
|
+
cap.setTarget({ target: next });
|
|
54878
|
+
}
|
|
54879
|
+
},
|
|
54880
|
+
className: cn("inline-flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors text-xs", busy && "opacity-40 cursor-not-allowed"),
|
|
54881
|
+
children: "−"
|
|
54882
|
+
}), /* @__PURE__ */ jsx("button", {
|
|
54883
|
+
type: "button",
|
|
54884
|
+
"aria-label": t("uiLibrary.acPanel.increase", "Increase target"),
|
|
54885
|
+
disabled: busy,
|
|
54886
|
+
onClick: (e) => {
|
|
54887
|
+
e.stopPropagation();
|
|
54888
|
+
if (!busy && display.target !== null) {
|
|
54889
|
+
const next = nextClimateTarget(display.target, 1, display);
|
|
54890
|
+
applyOptimistic({ target: next });
|
|
54891
|
+
cap.setTarget({ target: next });
|
|
54892
|
+
}
|
|
54893
|
+
},
|
|
54894
|
+
className: cn("inline-flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors text-xs", busy && "opacity-40 cursor-not-allowed"),
|
|
54895
|
+
children: "+"
|
|
54896
|
+
})] }),
|
|
54897
|
+
/* @__PURE__ */ jsx("select", {
|
|
54898
|
+
"aria-label": t("uiLibrary.acPanel.mode", "Mode"),
|
|
54899
|
+
value: display.mode,
|
|
54900
|
+
disabled: busy,
|
|
54901
|
+
onChange: (e) => {
|
|
54902
|
+
e.stopPropagation();
|
|
54903
|
+
const mode = display.availableModes.find((m) => m === e.target.value);
|
|
54904
|
+
if (!busy && mode) {
|
|
54905
|
+
applyOptimistic({ mode });
|
|
54906
|
+
cap.setMode({ mode });
|
|
54907
|
+
}
|
|
54908
|
+
},
|
|
54909
|
+
className: cn("bg-transparent px-0.5 text-xs text-foreground-subtle hover:text-foreground cursor-pointer", busy && "opacity-40 cursor-not-allowed"),
|
|
54910
|
+
children: display.availableModes.map((m) => /* @__PURE__ */ jsx("option", {
|
|
54911
|
+
value: m,
|
|
54912
|
+
children: modeLabel(t, m)
|
|
54913
|
+
}, m))
|
|
54674
54914
|
})
|
|
54675
54915
|
]
|
|
54676
54916
|
});
|
|
54677
|
-
const
|
|
54917
|
+
const accent = MODE_ACCENT[display.mode];
|
|
54918
|
+
const on = display.mode !== "off";
|
|
54919
|
+
const heatingOnly = !climateOffersCooling(display.availableModes);
|
|
54920
|
+
const setpointBounds = climateSetpointBounds(display);
|
|
54921
|
+
const CurrentPresetIcon = presetIcon(display.preset);
|
|
54922
|
+
const boost = display.preset === "turbo";
|
|
54923
|
+
const period = Math.max(.55, airflowPeriodSec(display.fanMode) * (boost ? .6 : 1));
|
|
54924
|
+
const showVSwing = display.swingVertical !== null;
|
|
54925
|
+
const showHSwing = display.swingHorizontal !== null;
|
|
54926
|
+
const swaying = on && (display.swingVertical === true || display.swingHorizontal === true);
|
|
54678
54927
|
return /* @__PURE__ */ jsxs("div", {
|
|
54679
|
-
|
|
54928
|
+
"data-mode": display.mode,
|
|
54929
|
+
className: cn("relative flex flex-col items-stretch gap-2.5 overflow-hidden rounded-lg border p-3 transition-colors", MODE_COLOR[display.mode]),
|
|
54680
54930
|
children: [
|
|
54681
|
-
/* @__PURE__ */
|
|
54682
|
-
className: "flex items-start gap-4",
|
|
54683
|
-
children: [/* @__PURE__ */ jsx(DishwasherGraphic, {
|
|
54684
|
-
running,
|
|
54685
|
-
progressPercent: display.progress
|
|
54686
|
-
}), /* @__PURE__ */ jsxs("div", {
|
|
54687
|
-
className: "flex min-w-0 flex-1 flex-col gap-2",
|
|
54688
|
-
children: [
|
|
54689
|
-
/* @__PURE__ */ jsxs("div", {
|
|
54690
|
-
className: "flex flex-wrap items-center gap-2",
|
|
54691
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
54692
|
-
className: cn("text-3xl font-semibold", meta.tone),
|
|
54693
|
-
children: meta.label
|
|
54694
|
-
}), display.powerOn === false && /* @__PURE__ */ jsx("span", {
|
|
54695
|
-
className: "text-xs font-medium text-foreground-subtle",
|
|
54696
|
-
children: t("uiLibrary.dishwasher.powerOff", "Power off")
|
|
54697
|
-
})]
|
|
54698
|
-
}),
|
|
54699
|
-
display.program != null && /* @__PURE__ */ jsx("span", {
|
|
54700
|
-
className: "text-sm text-foreground-subtle",
|
|
54701
|
-
title: display.program,
|
|
54702
|
-
children: featureLabel(display.program)
|
|
54703
|
-
}),
|
|
54704
|
-
display.remaining != null && /* @__PURE__ */ jsxs("span", {
|
|
54705
|
-
className: "inline-flex items-center gap-1 text-sm text-foreground-subtle tabular-nums",
|
|
54706
|
-
children: [/* @__PURE__ */ jsx(Timer, { className: "h-3.5 w-3.5" }), t("uiLibrary.dishwasher.remaining", "{{time}} left", { time: formatDuration(display.remaining, t) })]
|
|
54707
|
-
}),
|
|
54708
|
-
display.delayedStart != null && display.delayedStart > 0 && /* @__PURE__ */ jsx("span", {
|
|
54709
|
-
className: "text-xs text-foreground-subtle tabular-nums",
|
|
54710
|
-
children: t("uiLibrary.dishwasher.startsIn", "Starts in {{time}}", { time: formatDuration(display.delayedStart, t) })
|
|
54711
|
-
}),
|
|
54712
|
-
display.progress != null && /* @__PURE__ */ jsxs("div", {
|
|
54713
|
-
className: "flex items-center gap-2",
|
|
54714
|
-
children: [/* @__PURE__ */ jsx("div", {
|
|
54715
|
-
className: "h-1.5 flex-1 rounded bg-surface-hover overflow-hidden",
|
|
54716
|
-
children: /* @__PURE__ */ jsx("div", {
|
|
54717
|
-
className: "h-full bg-primary transition-[width] duration-500",
|
|
54718
|
-
style: { width: `${Math.max(0, Math.min(100, display.progress))}%` }
|
|
54719
|
-
})
|
|
54720
|
-
}), /* @__PURE__ */ jsxs("span", {
|
|
54721
|
-
className: "tabular-nums text-xs text-foreground-subtle",
|
|
54722
|
-
children: [Math.round(display.progress), "%"]
|
|
54723
|
-
})]
|
|
54724
|
-
}),
|
|
54725
|
-
/* @__PURE__ */ jsxs("div", {
|
|
54726
|
-
className: "flex flex-wrap items-center gap-x-3 gap-y-1.5",
|
|
54727
|
-
children: [display.doorOpen === true && /* @__PURE__ */ jsxs("span", {
|
|
54728
|
-
className: "inline-flex items-center gap-1 text-xs text-warning",
|
|
54729
|
-
children: [/* @__PURE__ */ jsx(DoorOpen, { className: "h-3.5 w-3.5" }), t("uiLibrary.dishwasher.doorOpen", "Door open")]
|
|
54730
|
-
}), visibleDishwasherEvents(display.activeEvents).map((event) => /* @__PURE__ */ jsx("span", {
|
|
54731
|
-
className: "text-xs text-warning",
|
|
54732
|
-
title: event,
|
|
54733
|
-
children: featureLabel(event)
|
|
54734
|
-
}, event))]
|
|
54735
|
-
}),
|
|
54736
|
-
display.operationState === "Error" && /* @__PURE__ */ jsxs("div", {
|
|
54737
|
-
className: "inline-flex items-center gap-1 text-xs text-danger",
|
|
54738
|
-
children: [/* @__PURE__ */ jsx(TriangleAlert, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("span", { children: display.errorLabel != null ? featureLabel(display.errorLabel) : display.errorCode != null ? t("uiLibrary.dishwasher.errorCode", "Error {{code}}", { code: display.errorCode }) : t("uiLibrary.dishwasher.op.error", "Error") })]
|
|
54739
|
-
}),
|
|
54740
|
-
/* @__PURE__ */ jsxs("div", {
|
|
54741
|
-
className: "flex flex-wrap items-center gap-2",
|
|
54742
|
-
children: [
|
|
54743
|
-
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
54744
|
-
label: t("uiLibrary.dishwasher.start", "Start"),
|
|
54745
|
-
busy: busy || !startable,
|
|
54746
|
-
active: running,
|
|
54747
|
-
onClick: () => press(() => cap.start({})),
|
|
54748
|
-
children: /* @__PURE__ */ jsx(Play, { className: "h-4 w-4" })
|
|
54749
|
-
}),
|
|
54750
|
-
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
54751
|
-
label: paused ? t("uiLibrary.dishwasher.resume", "Resume") : t("uiLibrary.dishwasher.pause", "Pause"),
|
|
54752
|
-
busy: busy || !(running || paused),
|
|
54753
|
-
active: paused,
|
|
54754
|
-
onClick: () => press(() => paused ? cap.resume({}) : cap.pause({})),
|
|
54755
|
-
children: /* @__PURE__ */ jsx(Pause, { className: "h-4 w-4" })
|
|
54756
|
-
}),
|
|
54757
|
-
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
54758
|
-
label: t("uiLibrary.dishwasher.stop", "Stop"),
|
|
54759
|
-
busy: busy || !(running || paused),
|
|
54760
|
-
active: false,
|
|
54761
|
-
onClick: () => press(() => cap.stop({})),
|
|
54762
|
-
children: /* @__PURE__ */ jsx(Square, { className: "h-3.5 w-3.5" })
|
|
54763
|
-
}),
|
|
54764
|
-
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
54765
|
-
label: t("uiLibrary.dishwasher.power", "Power"),
|
|
54766
|
-
busy: busy || display.powerOn === null,
|
|
54767
|
-
active: display.powerOn === true,
|
|
54768
|
-
onClick: () => {
|
|
54769
|
-
const next = display.powerOn !== true;
|
|
54770
|
-
press(() => cap.setPower({ on: next }));
|
|
54771
|
-
},
|
|
54772
|
-
children: /* @__PURE__ */ jsx(Power, { className: "h-4 w-4" })
|
|
54773
|
-
})
|
|
54774
|
-
]
|
|
54775
|
-
})
|
|
54776
|
-
]
|
|
54777
|
-
})]
|
|
54778
|
-
}),
|
|
54779
|
-
programs.length > 0 && /* @__PURE__ */ jsxs("label", {
|
|
54780
|
-
className: "flex items-center gap-2 text-xs text-foreground-subtle",
|
|
54781
|
-
children: [/* @__PURE__ */ jsx("span", {
|
|
54782
|
-
className: "w-16 shrink-0",
|
|
54783
|
-
children: t("uiLibrary.dishwasher.program", "Program")
|
|
54784
|
-
}), /* @__PURE__ */ jsxs("select", {
|
|
54785
|
-
"aria-label": t("uiLibrary.dishwasher.program", "Program"),
|
|
54786
|
-
value: display.selectedProgram ?? "",
|
|
54787
|
-
disabled: busy,
|
|
54788
|
-
onChange: (e) => {
|
|
54789
|
-
const program = e.target.value;
|
|
54790
|
-
if (!program) return;
|
|
54791
|
-
cap.setProgram({ program });
|
|
54792
|
-
},
|
|
54793
|
-
onClick: (e) => {
|
|
54794
|
-
e.stopPropagation();
|
|
54795
|
-
},
|
|
54796
|
-
className: "flex-1 rounded border border-border bg-surface px-2 py-1 text-foreground disabled:opacity-50",
|
|
54797
|
-
children: [display.selectedProgram == null && /* @__PURE__ */ jsx("option", {
|
|
54798
|
-
value: "",
|
|
54799
|
-
children: "—"
|
|
54800
|
-
}), programs.map((p) => /* @__PURE__ */ jsx("option", {
|
|
54801
|
-
value: p,
|
|
54802
|
-
children: featureLabel(p)
|
|
54803
|
-
}, p))]
|
|
54804
|
-
})]
|
|
54805
|
-
}),
|
|
54806
|
-
/* @__PURE__ */ jsxs("div", {
|
|
54807
|
-
className: "flex flex-wrap gap-4 text-xs",
|
|
54808
|
-
children: [
|
|
54809
|
-
/* @__PURE__ */ jsx(ToggleRow, {
|
|
54810
|
-
label: t("uiLibrary.dishwasher.halfLoad", "Half load"),
|
|
54811
|
-
checked: display.halfLoad,
|
|
54812
|
-
shown: link,
|
|
54813
|
-
busy: busy || optionTogglesLocked,
|
|
54814
|
-
onChange: (on) => void cap.setHalfLoad({ on })
|
|
54815
|
-
}),
|
|
54816
|
-
/* @__PURE__ */ jsx(ToggleRow, {
|
|
54817
|
-
label: t("uiLibrary.dishwasher.hygienePlus", "Hygiene plus"),
|
|
54818
|
-
checked: display.hygienePlus,
|
|
54819
|
-
shown: link,
|
|
54820
|
-
busy: busy || optionTogglesLocked,
|
|
54821
|
-
onChange: (on) => void cap.setHygienePlus({ on })
|
|
54822
|
-
}),
|
|
54823
|
-
/* @__PURE__ */ jsx(ToggleRow, {
|
|
54824
|
-
label: t("uiLibrary.dishwasher.extraDry", "Extra dry"),
|
|
54825
|
-
checked: display.extraDry,
|
|
54826
|
-
shown: link,
|
|
54827
|
-
busy: busy || optionTogglesLocked,
|
|
54828
|
-
onChange: (on) => void cap.setExtraDry({ on })
|
|
54829
|
-
}),
|
|
54830
|
-
/* @__PURE__ */ jsx(ToggleRow, {
|
|
54831
|
-
label: t("uiLibrary.dishwasher.intensiveZone", "Intensive zone"),
|
|
54832
|
-
checked: display.intensiveZone,
|
|
54833
|
-
shown: link,
|
|
54834
|
-
busy: busy || optionTogglesLocked,
|
|
54835
|
-
onChange: (on) => void cap.setIntensiveZone({ on })
|
|
54836
|
-
}),
|
|
54837
|
-
/* @__PURE__ */ jsx(ToggleRow, {
|
|
54838
|
-
label: t("uiLibrary.dishwasher.varioSpeedPlus", "VarioSpeed+"),
|
|
54839
|
-
checked: display.varioSpeedPlus,
|
|
54840
|
-
shown: link,
|
|
54841
|
-
busy: busy || optionTogglesLocked,
|
|
54842
|
-
onChange: (on) => void cap.setVarioSpeedPlus({ on })
|
|
54843
|
-
}),
|
|
54844
|
-
/* @__PURE__ */ jsx(ToggleRow, {
|
|
54845
|
-
label: t("uiLibrary.dishwasher.childLock", "Child lock"),
|
|
54846
|
-
checked: display.childLock,
|
|
54847
|
-
shown: link,
|
|
54848
|
-
busy,
|
|
54849
|
-
onChange: (on) => void cap.setChildLock({ on })
|
|
54850
|
-
})
|
|
54851
|
-
]
|
|
54852
|
-
})
|
|
54853
|
-
]
|
|
54854
|
-
});
|
|
54855
|
-
}
|
|
54856
|
-
/**
|
|
54857
|
-
* One boolean setting. `checked === null` is "the appliance has not said": on a reachable
|
|
54858
|
-
* appliance that means it does not offer the setting (hidden); on an unreachable one the
|
|
54859
|
-
* setting is shown but disabled and marked unknown — never as an unchecked box.
|
|
54860
|
-
*/
|
|
54861
|
-
function ToggleRow({ label, checked, shown, busy, onChange }) {
|
|
54862
|
-
const t = useUiText();
|
|
54863
|
-
if (checked === null && shown) return null;
|
|
54864
|
-
return /* @__PURE__ */ jsxs("label", {
|
|
54865
|
-
className: "inline-flex items-center gap-2 cursor-pointer",
|
|
54866
|
-
children: [
|
|
54867
|
-
/* @__PURE__ */ jsx("input", {
|
|
54868
|
-
type: "checkbox",
|
|
54869
|
-
checked: checked === true,
|
|
54870
|
-
"aria-checked": checked === null ? "mixed" : checked,
|
|
54871
|
-
disabled: busy || checked === null,
|
|
54872
|
-
onChange: (e) => {
|
|
54873
|
-
onChange(e.target.checked);
|
|
54874
|
-
},
|
|
54875
|
-
onClick: (e) => {
|
|
54876
|
-
e.stopPropagation();
|
|
54877
|
-
},
|
|
54878
|
-
className: "rounded border-border"
|
|
54879
|
-
}),
|
|
54880
|
-
/* @__PURE__ */ jsx("span", { children: label }),
|
|
54881
|
-
checked === null && /* @__PURE__ */ jsx("span", {
|
|
54882
|
-
className: "text-foreground-subtle",
|
|
54883
|
-
children: t("uiLibrary.dishwasher.unknownValue", "—")
|
|
54884
|
-
})
|
|
54885
|
-
]
|
|
54886
|
-
});
|
|
54887
|
-
}
|
|
54888
|
-
function DishwasherInlineControl(props) {
|
|
54889
|
-
return /* @__PURE__ */ jsx(DishwasherPanel, {
|
|
54890
|
-
...props,
|
|
54891
|
-
layout: "compact"
|
|
54892
|
-
});
|
|
54893
|
-
}
|
|
54894
|
-
function DishwasherHeroCard(props) {
|
|
54895
|
-
return /* @__PURE__ */ jsx(DishwasherPanel, {
|
|
54896
|
-
...props,
|
|
54897
|
-
layout: "full"
|
|
54898
|
-
});
|
|
54899
|
-
}
|
|
54900
|
-
//#endregion
|
|
54901
|
-
//#region src/composites/device-controls/heating-valve-readout.tsx
|
|
54902
|
-
function formatHeatingValvePosition(position) {
|
|
54903
|
-
return position !== null ? `${position}%` : "—";
|
|
54904
|
-
}
|
|
54905
|
-
function HeatingValveReadout({ trpc, deviceId, layout }) {
|
|
54906
|
-
const t = useUiText();
|
|
54907
|
-
const { cap, slice } = useDeviceCapability({
|
|
54908
|
-
trpc,
|
|
54909
|
-
deviceId,
|
|
54910
|
-
cap: (d) => d.heatingValve,
|
|
54911
|
-
slice: (d) => d.state.heatingValve
|
|
54912
|
-
});
|
|
54913
|
-
if (cap === void 0 || slice === void 0) return null;
|
|
54914
|
-
const label = t("uiLibrary.heatingValveReadout.valve", "Valve");
|
|
54915
|
-
const value = formatHeatingValvePosition(slice.position);
|
|
54916
|
-
if (layout === "compact") return /* @__PURE__ */ jsx("span", {
|
|
54917
|
-
className: "inline-flex items-center text-xs tabular-nums text-foreground-subtle",
|
|
54918
|
-
"aria-label": `${label} ${value}`,
|
|
54919
|
-
children: value
|
|
54920
|
-
});
|
|
54921
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
54922
|
-
className: "flex items-center gap-2 text-xs tabular-nums text-foreground-subtle",
|
|
54923
|
-
children: [/* @__PURE__ */ jsx("span", { children: label }), /* @__PURE__ */ jsx("span", {
|
|
54924
|
-
className: "font-medium text-foreground",
|
|
54925
|
-
children: value
|
|
54926
|
-
})]
|
|
54927
|
-
});
|
|
54928
|
-
}
|
|
54929
|
-
//#endregion
|
|
54930
|
-
//#region src/composites/device-controls/ac-panel.tsx
|
|
54931
|
-
/** Modes that mean the device can cool, dry, or move air — an air conditioner. */
|
|
54932
|
-
var COOLING_MODES = new Set([
|
|
54933
|
-
"cool",
|
|
54934
|
-
"heat_cool",
|
|
54935
|
-
"dry",
|
|
54936
|
-
"fan_only"
|
|
54937
|
-
]);
|
|
54938
|
-
/** A heater offers heat (and maybe auto/off) and none of the cooling modes. */
|
|
54939
|
-
function climateOffersCooling(modes) {
|
|
54940
|
-
return modes.some((mode) => COOLING_MODES.has(mode));
|
|
54941
|
-
}
|
|
54942
|
-
/** Setpoint track bounds. Absent when the integration did not report both ends. */
|
|
54943
|
-
function climateSetpointBounds(status) {
|
|
54944
|
-
const min = status.minTemp;
|
|
54945
|
-
const max = status.maxTemp;
|
|
54946
|
-
if (typeof min !== "number" || typeof max !== "number") return null;
|
|
54947
|
-
if (!Number.isFinite(min) || !Number.isFinite(max) || max <= min) return null;
|
|
54948
|
-
return {
|
|
54949
|
-
min,
|
|
54950
|
-
max
|
|
54951
|
-
};
|
|
54952
|
-
}
|
|
54953
|
-
/** Map a 0–1 drag fraction onto the setpoint, snapped to `tempStep`. */
|
|
54954
|
-
function climateTargetFromFraction(fraction, bounds, tempStep) {
|
|
54955
|
-
const step = resolveClimateTempStep(tempStep);
|
|
54956
|
-
const clamped = Math.min(1, Math.max(0, fraction));
|
|
54957
|
-
const raw = bounds.min + clamped * (bounds.max - bounds.min);
|
|
54958
|
-
const steps = Math.round((raw - bounds.min) / step);
|
|
54959
|
-
const snapped = bounds.min + steps * step;
|
|
54960
|
-
const rounded = Math.round(snapped * 1e3) / 1e3;
|
|
54961
|
-
return Math.min(bounds.max, Math.max(bounds.min, rounded));
|
|
54962
|
-
}
|
|
54963
|
-
/** AC-appropriate short mode labels. Exhaustive over HvacMode. */
|
|
54964
|
-
function modeLabel(t, mode) {
|
|
54965
|
-
switch (mode) {
|
|
54966
|
-
case "cool": return t("uiLibrary.acPanel.modeCool", "Cool");
|
|
54967
|
-
case "heat": return t("uiLibrary.acPanel.modeHeat", "Heat");
|
|
54968
|
-
case "auto": return t("uiLibrary.acPanel.modeAuto", "Auto");
|
|
54969
|
-
case "heat_cool": return t("uiLibrary.acPanel.modeHeatCool", "Heat·Cool");
|
|
54970
|
-
case "fan_only": return t("uiLibrary.acPanel.modeFan", "Fan");
|
|
54971
|
-
case "dry": return t("uiLibrary.acPanel.modeDry", "Dry");
|
|
54972
|
-
case "off": return t("uiLibrary.acPanel.modeOff", "Off");
|
|
54973
|
-
}
|
|
54974
|
-
}
|
|
54975
|
-
/** Per-mode icon (lucide). Exhaustive over HvacMode. */
|
|
54976
|
-
var MODE_ICON = {
|
|
54977
|
-
cool: Snowflake,
|
|
54978
|
-
heat: Flame,
|
|
54979
|
-
auto: Sparkles,
|
|
54980
|
-
heat_cool: Thermometer,
|
|
54981
|
-
fan_only: Fan,
|
|
54982
|
-
dry: Droplets,
|
|
54983
|
-
off: Power
|
|
54984
|
-
};
|
|
54985
|
-
/** Mode accent hex — drives the airflow particles, the glow, and the target
|
|
54986
|
-
* value colour. Mirrors the thermostat gauge palette. Exhaustive. */
|
|
54987
|
-
var MODE_ACCENT = {
|
|
54988
|
-
heat: "#f59e0b",
|
|
54989
|
-
cool: "#60a5fa",
|
|
54990
|
-
auto: "#c084fc",
|
|
54991
|
-
heat_cool: "#e879f9",
|
|
54992
|
-
fan_only: "#94a3b8",
|
|
54993
|
-
dry: "#22d3ee",
|
|
54994
|
-
off: "#a1a1aa"
|
|
54995
|
-
};
|
|
54996
|
-
/** Title-case a snake/lower token for a selector option ('medium_low' → 'Medium
|
|
54997
|
-
* low', 'turbo' → 'Turbo'). Shared by the fan + preset selectors. */
|
|
54998
|
-
function fanLabel(token) {
|
|
54999
|
-
const spaced = token.replace(/_/g, " ");
|
|
55000
|
-
return spaced.charAt(0).toUpperCase() + spaced.slice(1);
|
|
55001
|
-
}
|
|
55002
|
-
/** Preset → icon. Unknown presets fall back to a neutral sparkle. */
|
|
55003
|
-
function presetIcon(preset) {
|
|
55004
|
-
switch (preset) {
|
|
55005
|
-
case "turbo": return Zap;
|
|
55006
|
-
case "quiet": return Feather;
|
|
55007
|
-
case "sleep": return Moon;
|
|
55008
|
-
case "eco": return Leaf;
|
|
55009
|
-
case "8c_heat": return Snowflake;
|
|
55010
|
-
case "none": return Ban;
|
|
55011
|
-
default: return Sparkles;
|
|
55012
|
-
}
|
|
55013
|
-
}
|
|
55014
|
-
/**
|
|
55015
|
-
* Fan level → airflow animation period. Higher speed ⇒ shorter period. Unknown
|
|
55016
|
-
* strings fall back to a medium pace. Turbo (a preset) shortens it further.
|
|
55017
|
-
*/
|
|
55018
|
-
function airflowPeriodSec(fanMode) {
|
|
55019
|
-
switch (fanMode) {
|
|
55020
|
-
case "high": return 1;
|
|
55021
|
-
case "medium_high": return 1.3;
|
|
55022
|
-
case "medium": return 1.6;
|
|
55023
|
-
case "medium_low": return 1.9;
|
|
55024
|
-
case "low": return 2.2;
|
|
55025
|
-
default: return 1.8;
|
|
55026
|
-
}
|
|
55027
|
-
}
|
|
55028
|
-
var KEYFRAMES = `
|
|
55029
|
-
@keyframes acv-fall { 0%{transform:translateY(-1.75rem);opacity:0} 18%{opacity:.7} 82%{opacity:.7} 100%{transform:translateY(7.5rem);opacity:0} }
|
|
55030
|
-
@keyframes acv-rise { 0%{transform:translateY(7.5rem);opacity:0} 18%{opacity:.7} 82%{opacity:.7} 100%{transform:translateY(-1.75rem);opacity:0} }
|
|
55031
|
-
@keyframes acv-sway { 0%,100%{transform:translateX(-9%)} 50%{transform:translateX(9%)} }
|
|
55032
|
-
@keyframes acv-swing-h { 0%,100%{transform:translateX(-22%)} 50%{transform:translateX(22%)} }
|
|
55033
|
-
@keyframes acv-swing-v { 0%,100%{transform:translateY(-22%)} 50%{transform:translateY(22%)} }
|
|
55034
|
-
@keyframes acv-spin { to { transform:rotate(360deg) } }
|
|
55035
|
-
@keyframes acv-glow { 0%,100%{opacity:.35;transform:scale(1)} 50%{opacity:.6;transform:scale(1.06)} }
|
|
55036
|
-
@media (prefers-reduced-motion: reduce) {
|
|
55037
|
-
.acv-streak, .acv-fan, .acv-sway-wrap, .acv-glow, .acv-swing { animation: none !important; }
|
|
55038
|
-
}
|
|
55039
|
-
`;
|
|
55040
|
-
function AcPanel({ trpc, deviceId, layout, optimistic }) {
|
|
55041
|
-
const t = useUiText();
|
|
55042
|
-
const { cap, slice, available } = useDeviceCapability({
|
|
55043
|
-
trpc,
|
|
55044
|
-
deviceId,
|
|
55045
|
-
cap: (d) => d.climateControl,
|
|
55046
|
-
slice: (d) => d.state.climateControl
|
|
55047
|
-
});
|
|
55048
|
-
const { display, applyOptimistic } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
|
|
55049
|
-
if (cap === void 0) return null;
|
|
55050
|
-
if (display === void 0) return null;
|
|
55051
|
-
const busy = !available;
|
|
55052
|
-
if (layout === "compact") return /* @__PURE__ */ jsxs("div", {
|
|
55053
|
-
"data-mode": display.mode,
|
|
55054
|
-
className: "inline-flex items-center gap-1",
|
|
55055
|
-
children: [
|
|
55056
|
-
/* @__PURE__ */ jsx("span", {
|
|
55057
|
-
className: cn("text-xs tabular-nums font-medium", MODE_TEXT_COLOR[display.mode]),
|
|
55058
|
-
children: display.target !== null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
55059
|
-
display.target,
|
|
55060
|
-
"°",
|
|
55061
|
-
display.currentTemp !== null && /* @__PURE__ */ jsxs("span", {
|
|
55062
|
-
className: "text-foreground-subtle font-normal",
|
|
55063
|
-
children: [
|
|
55064
|
-
" ",
|
|
55065
|
-
"(",
|
|
55066
|
-
display.currentTemp,
|
|
55067
|
-
"°)"
|
|
55068
|
-
]
|
|
55069
|
-
})
|
|
55070
|
-
] }) : display.currentTemp !== null ? /* @__PURE__ */ jsxs("span", {
|
|
55071
|
-
className: "text-foreground-subtle",
|
|
55072
|
-
children: [display.currentTemp, "°"]
|
|
55073
|
-
}) : null
|
|
55074
|
-
}),
|
|
55075
|
-
display.target !== null && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
|
|
55076
|
-
type: "button",
|
|
55077
|
-
"aria-label": t("uiLibrary.acPanel.decrease", "Decrease target"),
|
|
55078
|
-
disabled: busy,
|
|
55079
|
-
onClick: (e) => {
|
|
55080
|
-
e.stopPropagation();
|
|
55081
|
-
if (!busy && display.target !== null) {
|
|
55082
|
-
const next = nextClimateTarget(display.target, -1, display);
|
|
55083
|
-
applyOptimistic({ target: next });
|
|
55084
|
-
cap.setTarget({ target: next });
|
|
55085
|
-
}
|
|
55086
|
-
},
|
|
55087
|
-
className: cn("inline-flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors text-xs", busy && "opacity-40 cursor-not-allowed"),
|
|
55088
|
-
children: "−"
|
|
55089
|
-
}), /* @__PURE__ */ jsx("button", {
|
|
55090
|
-
type: "button",
|
|
55091
|
-
"aria-label": t("uiLibrary.acPanel.increase", "Increase target"),
|
|
55092
|
-
disabled: busy,
|
|
55093
|
-
onClick: (e) => {
|
|
55094
|
-
e.stopPropagation();
|
|
55095
|
-
if (!busy && display.target !== null) {
|
|
55096
|
-
const next = nextClimateTarget(display.target, 1, display);
|
|
55097
|
-
applyOptimistic({ target: next });
|
|
55098
|
-
cap.setTarget({ target: next });
|
|
55099
|
-
}
|
|
55100
|
-
},
|
|
55101
|
-
className: cn("inline-flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors text-xs", busy && "opacity-40 cursor-not-allowed"),
|
|
55102
|
-
children: "+"
|
|
55103
|
-
})] }),
|
|
55104
|
-
/* @__PURE__ */ jsx("select", {
|
|
55105
|
-
"aria-label": t("uiLibrary.acPanel.mode", "Mode"),
|
|
55106
|
-
value: display.mode,
|
|
55107
|
-
disabled: busy,
|
|
55108
|
-
onChange: (e) => {
|
|
55109
|
-
e.stopPropagation();
|
|
55110
|
-
const mode = display.availableModes.find((m) => m === e.target.value);
|
|
55111
|
-
if (!busy && mode) {
|
|
55112
|
-
applyOptimistic({ mode });
|
|
55113
|
-
cap.setMode({ mode });
|
|
55114
|
-
}
|
|
55115
|
-
},
|
|
55116
|
-
className: cn("bg-transparent px-0.5 text-xs text-foreground-subtle hover:text-foreground cursor-pointer", busy && "opacity-40 cursor-not-allowed"),
|
|
55117
|
-
children: display.availableModes.map((m) => /* @__PURE__ */ jsx("option", {
|
|
55118
|
-
value: m,
|
|
55119
|
-
children: modeLabel(t, m)
|
|
55120
|
-
}, m))
|
|
55121
|
-
})
|
|
55122
|
-
]
|
|
55123
|
-
});
|
|
55124
|
-
const accent = MODE_ACCENT[display.mode];
|
|
55125
|
-
const on = display.mode !== "off";
|
|
55126
|
-
const heatingOnly = !climateOffersCooling(display.availableModes);
|
|
55127
|
-
const setpointBounds = climateSetpointBounds(display);
|
|
55128
|
-
const CurrentPresetIcon = presetIcon(display.preset);
|
|
55129
|
-
const boost = display.preset === "turbo";
|
|
55130
|
-
const period = Math.max(.55, airflowPeriodSec(display.fanMode) * (boost ? .6 : 1));
|
|
55131
|
-
const showVSwing = display.swingVertical !== null;
|
|
55132
|
-
const showHSwing = display.swingHorizontal !== null;
|
|
55133
|
-
const swaying = on && (display.swingVertical === true || display.swingHorizontal === true);
|
|
55134
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
55135
|
-
"data-mode": display.mode,
|
|
55136
|
-
className: cn("relative flex flex-col items-stretch gap-2.5 overflow-hidden rounded-lg border p-3 transition-colors", MODE_COLOR[display.mode]),
|
|
55137
|
-
children: [
|
|
55138
|
-
/* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
|
|
54931
|
+
/* @__PURE__ */ jsx("style", { children: KEYFRAMES$1 }),
|
|
55139
54932
|
/* @__PURE__ */ jsxs("div", {
|
|
55140
54933
|
className: "relative z-10 flex flex-col items-center justify-center gap-1 overflow-hidden rounded-lg border border-border/50 bg-surface/30 px-3 py-3",
|
|
55141
54934
|
children: [
|
|
@@ -55621,6 +55414,739 @@ function SwingToggle({ axis, on, busy, onToggle }) {
|
|
|
55621
55414
|
});
|
|
55622
55415
|
}
|
|
55623
55416
|
//#endregion
|
|
55417
|
+
//#region src/composites/device-controls/heater-control.tsx
|
|
55418
|
+
/**
|
|
55419
|
+
* Heater controls for a `DeviceType.Heater` device (a dumb plug-in stove).
|
|
55420
|
+
*
|
|
55421
|
+
* A heater is a switch that heats while it is on, and the hub can switch it off
|
|
55422
|
+
* again after a chosen time (`timed-run`, D993):
|
|
55423
|
+
* - HeaterInlineControl (device-list row): the on/off switch and a one-tap
|
|
55424
|
+
* "Run N min".
|
|
55425
|
+
* - HeaterHeroCard (device-detail hero): the glowing heat backdrop (the same
|
|
55426
|
+
* rising streaks a heating air conditioner draws) while it is on, the
|
|
55427
|
+
* on/off switch, the power draw when the plug measures one, and the timed
|
|
55428
|
+
* run (number, unit, Run, countdown, Cancel).
|
|
55429
|
+
*
|
|
55430
|
+
* Every reading may be unknown (`null`) and is drawn as a dash, never as zero.
|
|
55431
|
+
*/
|
|
55432
|
+
var HEATER_LIMIT = TIMED_RUN_LIMITS[DeviceType.Heater];
|
|
55433
|
+
var QUICK_RUN_MINUTES = 30;
|
|
55434
|
+
var HEAT_ACCENT = "var(--color-warning)";
|
|
55435
|
+
var HEAT_PERIOD_SEC = 1.8;
|
|
55436
|
+
function useHeater({ trpc, deviceId, optimistic }) {
|
|
55437
|
+
const { cap, slice, available } = useDeviceCapability({
|
|
55438
|
+
trpc,
|
|
55439
|
+
deviceId,
|
|
55440
|
+
cap: (d) => d.switch,
|
|
55441
|
+
slice: (d) => d.state.switch
|
|
55442
|
+
});
|
|
55443
|
+
const running = useDeviceCapability({
|
|
55444
|
+
trpc,
|
|
55445
|
+
deviceId,
|
|
55446
|
+
cap: (d) => d.runningState,
|
|
55447
|
+
slice: (d) => d.state.runningState
|
|
55448
|
+
});
|
|
55449
|
+
const power = useDeviceCapability({
|
|
55450
|
+
trpc,
|
|
55451
|
+
deviceId,
|
|
55452
|
+
cap: (d) => d.powerMeter,
|
|
55453
|
+
slice: (d) => d.state.powerMeter
|
|
55454
|
+
});
|
|
55455
|
+
const timer = useDeviceCapability({
|
|
55456
|
+
trpc,
|
|
55457
|
+
deviceId,
|
|
55458
|
+
cap: (d) => d.timedRun,
|
|
55459
|
+
slice: (d) => d.state.timedRun
|
|
55460
|
+
});
|
|
55461
|
+
const { display, applyOptimistic } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
|
|
55462
|
+
return {
|
|
55463
|
+
cap,
|
|
55464
|
+
display,
|
|
55465
|
+
available,
|
|
55466
|
+
applyOptimistic,
|
|
55467
|
+
running: running.slice,
|
|
55468
|
+
power: power.slice,
|
|
55469
|
+
timer
|
|
55470
|
+
};
|
|
55471
|
+
}
|
|
55472
|
+
function HeaterInlineControl(props) {
|
|
55473
|
+
const t = useUiText();
|
|
55474
|
+
const { cap, display, available, applyOptimistic, timer } = useHeater(props);
|
|
55475
|
+
if (cap === void 0 || display === void 0) return null;
|
|
55476
|
+
const on = display.on === true;
|
|
55477
|
+
const quickMinutes = HEATER_LIMIT === void 0 ? QUICK_RUN_MINUTES : Math.min(QUICK_RUN_MINUTES, maxInUnit(HEATER_LIMIT));
|
|
55478
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55479
|
+
className: "inline-flex items-center gap-2",
|
|
55480
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
55481
|
+
onClick: (e) => e.stopPropagation(),
|
|
55482
|
+
children: /* @__PURE__ */ jsx(Switch, {
|
|
55483
|
+
checked: on,
|
|
55484
|
+
disabled: !available,
|
|
55485
|
+
"aria-label": t("uiLibrary.heater.power", "Heater"),
|
|
55486
|
+
onCheckedChange: (next) => {
|
|
55487
|
+
applyOptimistic({ on: next });
|
|
55488
|
+
cap.setState({ on: next });
|
|
55489
|
+
}
|
|
55490
|
+
})
|
|
55491
|
+
}), timer.cap !== void 0 && /* @__PURE__ */ jsx("span", {
|
|
55492
|
+
onClick: (e) => e.stopPropagation(),
|
|
55493
|
+
children: /* @__PURE__ */ jsxs(Button, {
|
|
55494
|
+
size: "sm",
|
|
55495
|
+
variant: "outline",
|
|
55496
|
+
disabled: !timer.online,
|
|
55497
|
+
onClick: () => void timer.cap?.runFor({
|
|
55498
|
+
duration: quickMinutes,
|
|
55499
|
+
unit: "min"
|
|
55500
|
+
}),
|
|
55501
|
+
children: [/* @__PURE__ */ jsx(Timer, {
|
|
55502
|
+
className: "h-3.5 w-3.5",
|
|
55503
|
+
"aria-hidden": true
|
|
55504
|
+
}), t("uiLibrary.heater.quickRun", "Run {{minutes}} min", { minutes: quickMinutes })]
|
|
55505
|
+
})
|
|
55506
|
+
})]
|
|
55507
|
+
});
|
|
55508
|
+
}
|
|
55509
|
+
function HeaterHeroCard(props) {
|
|
55510
|
+
const t = useUiText();
|
|
55511
|
+
const { cap, display, available, applyOptimistic, running, power, timer } = useHeater(props);
|
|
55512
|
+
if (cap === void 0 || display === void 0) return null;
|
|
55513
|
+
const on = display.on === true;
|
|
55514
|
+
const heating = running?.running ?? on;
|
|
55515
|
+
const watts = power?.power ?? null;
|
|
55516
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55517
|
+
className: "relative flex flex-col items-stretch gap-3 overflow-hidden rounded-lg border border-border bg-surface p-4",
|
|
55518
|
+
children: [
|
|
55519
|
+
/* @__PURE__ */ jsx("style", { children: KEYFRAMES$1 }),
|
|
55520
|
+
/* @__PURE__ */ jsxs("div", {
|
|
55521
|
+
className: "relative flex h-32 items-center justify-center overflow-hidden rounded-lg border border-border-subtle bg-background-elevated",
|
|
55522
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
55523
|
+
className: cn("pointer-events-none absolute inset-0", heating ? "opacity-60" : "opacity-20"),
|
|
55524
|
+
children: /* @__PURE__ */ jsx(AirflowViz, {
|
|
55525
|
+
mode: heating ? "heat" : "off",
|
|
55526
|
+
accent: HEAT_ACCENT,
|
|
55527
|
+
periodSec: HEAT_PERIOD_SEC,
|
|
55528
|
+
swaying: false,
|
|
55529
|
+
forceRising: true
|
|
55530
|
+
})
|
|
55531
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
55532
|
+
className: "relative z-10 flex flex-col items-center gap-1",
|
|
55533
|
+
children: [
|
|
55534
|
+
/* @__PURE__ */ jsx(Flame, {
|
|
55535
|
+
className: cn("h-8 w-8", heating ? "text-warning" : "text-foreground-subtle"),
|
|
55536
|
+
"aria-hidden": true
|
|
55537
|
+
}),
|
|
55538
|
+
/* @__PURE__ */ jsx("span", {
|
|
55539
|
+
className: "text-sm font-medium text-foreground",
|
|
55540
|
+
children: heating ? t("uiLibrary.heater.heating", "Heating") : t("uiLibrary.heater.off", "Off")
|
|
55541
|
+
}),
|
|
55542
|
+
/* @__PURE__ */ jsx("span", {
|
|
55543
|
+
className: "text-xs tabular-nums text-foreground-muted",
|
|
55544
|
+
"data-testid": "heater-watts",
|
|
55545
|
+
children: watts === null ? "—" : `${Math.round(watts)} W`
|
|
55546
|
+
})
|
|
55547
|
+
]
|
|
55548
|
+
})]
|
|
55549
|
+
}),
|
|
55550
|
+
/* @__PURE__ */ jsxs("label", {
|
|
55551
|
+
className: "flex items-center justify-between gap-3 text-sm text-foreground",
|
|
55552
|
+
children: [t("uiLibrary.heater.power", "Heater"), /* @__PURE__ */ jsx(Switch, {
|
|
55553
|
+
checked: on,
|
|
55554
|
+
disabled: !available,
|
|
55555
|
+
onCheckedChange: (next) => {
|
|
55556
|
+
applyOptimistic({ on: next });
|
|
55557
|
+
cap.setState({ on: next });
|
|
55558
|
+
}
|
|
55559
|
+
})]
|
|
55560
|
+
}),
|
|
55561
|
+
timer.cap !== void 0 && HEATER_LIMIT !== void 0 && /* @__PURE__ */ jsx(TimedRunControl, {
|
|
55562
|
+
trpc: props.trpc,
|
|
55563
|
+
deviceId: props.deviceId,
|
|
55564
|
+
limit: HEATER_LIMIT
|
|
55565
|
+
})
|
|
55566
|
+
]
|
|
55567
|
+
});
|
|
55568
|
+
}
|
|
55569
|
+
//#endregion
|
|
55570
|
+
//#region src/composites/device-controls/dishwasher-control.tsx
|
|
55571
|
+
/**
|
|
55572
|
+
* Dishwasher controls for a `DeviceType.Dishwasher` device.
|
|
55573
|
+
*
|
|
55574
|
+
* Reads the `dishwasher` cap status slice and renders inline + hero surfaces
|
|
55575
|
+
* mirroring vacuum-control / pet-feeder patterns.
|
|
55576
|
+
*
|
|
55577
|
+
* Salt and rinse aid are not here: they are items of the device's `consumables`
|
|
55578
|
+
* cap, shown by the page's Consumables section like every device's (D915).
|
|
55579
|
+
*
|
|
55580
|
+
* UNKNOWN IS NOT OFF. The slice carries `null` for everything the appliance has not
|
|
55581
|
+
* reported, and this view renders that as "—" / a disabled control, never as an unchecked
|
|
55582
|
+
* box or a zero. It also does not echo a command before the appliance confirms it: the
|
|
55583
|
+
* slice moves when the appliance says so.
|
|
55584
|
+
*/
|
|
55585
|
+
/** What the operation state is called to a person, and how it is toned. */
|
|
55586
|
+
function dishwasherOperationMeta(operationState, t = defaultUiText) {
|
|
55587
|
+
switch (operationState) {
|
|
55588
|
+
case "Run": return {
|
|
55589
|
+
label: t("uiLibrary.dishwasher.op.run", "Running"),
|
|
55590
|
+
tone: "text-primary"
|
|
55591
|
+
};
|
|
55592
|
+
case "Pause": return {
|
|
55593
|
+
label: t("uiLibrary.dishwasher.op.pause", "Paused"),
|
|
55594
|
+
tone: "text-warning"
|
|
55595
|
+
};
|
|
55596
|
+
case "Finished": return {
|
|
55597
|
+
label: t("uiLibrary.dishwasher.op.finished", "Finished"),
|
|
55598
|
+
tone: "text-success"
|
|
55599
|
+
};
|
|
55600
|
+
case "Error": return {
|
|
55601
|
+
label: t("uiLibrary.dishwasher.op.error", "Error"),
|
|
55602
|
+
tone: "text-danger"
|
|
55603
|
+
};
|
|
55604
|
+
case "Aborting": return {
|
|
55605
|
+
label: t("uiLibrary.dishwasher.op.aborting", "Stopping"),
|
|
55606
|
+
tone: "text-warning"
|
|
55607
|
+
};
|
|
55608
|
+
case "ActionRequired": return {
|
|
55609
|
+
label: t("uiLibrary.dishwasher.op.actionRequired", "Action required"),
|
|
55610
|
+
tone: "text-warning"
|
|
55611
|
+
};
|
|
55612
|
+
case "DelayedStart": return {
|
|
55613
|
+
label: t("uiLibrary.dishwasher.op.delayedStart", "Delayed start"),
|
|
55614
|
+
tone: "text-primary"
|
|
55615
|
+
};
|
|
55616
|
+
case "Ready": return {
|
|
55617
|
+
label: t("uiLibrary.dishwasher.op.ready", "Ready"),
|
|
55618
|
+
tone: "text-foreground"
|
|
55619
|
+
};
|
|
55620
|
+
case "Inactive": return {
|
|
55621
|
+
label: t("uiLibrary.dishwasher.op.inactive", "Inactive"),
|
|
55622
|
+
tone: "text-foreground-subtle"
|
|
55623
|
+
};
|
|
55624
|
+
case null: return {
|
|
55625
|
+
label: t("uiLibrary.dishwasher.unknown", "Unknown"),
|
|
55626
|
+
tone: "text-foreground-subtle"
|
|
55627
|
+
};
|
|
55628
|
+
}
|
|
55629
|
+
}
|
|
55630
|
+
/** The headline for the whole slice: the appliance's state, or why there is none. */
|
|
55631
|
+
function dishwasherHeadline(status, t = defaultUiText) {
|
|
55632
|
+
switch (status.availability) {
|
|
55633
|
+
case "offline": return {
|
|
55634
|
+
label: t("uiLibrary.dishwasher.offline", "Offline"),
|
|
55635
|
+
tone: "text-foreground-subtle"
|
|
55636
|
+
};
|
|
55637
|
+
case "description-missing": return {
|
|
55638
|
+
label: t("uiLibrary.dishwasher.descriptionMissing", "Waiting for the appliance profile"),
|
|
55639
|
+
tone: "text-warning"
|
|
55640
|
+
};
|
|
55641
|
+
case "available": return dishwasherOperationMeta(status.operationState, t);
|
|
55642
|
+
}
|
|
55643
|
+
}
|
|
55644
|
+
/** Last segment of a feature key, spaced out: `Dishcare.Dishwasher.Program.Eco50` -> `Eco50`. */
|
|
55645
|
+
function featureLabel(key) {
|
|
55646
|
+
return (key.split(".").pop() ?? key).replace(/([a-z0-9])([A-Z])/g, "$1 $2");
|
|
55647
|
+
}
|
|
55648
|
+
/**
|
|
55649
|
+
* Salt and rinse aid are consumable items (D915). Their events must not
|
|
55650
|
+
* reappear on the hero — the Consumables section is the only surface.
|
|
55651
|
+
*/
|
|
55652
|
+
function isConsumableDishwasherEvent(event) {
|
|
55653
|
+
const short = (event.split(".").pop() ?? event).toLowerCase();
|
|
55654
|
+
return short.includes("salt") || short.includes("rinse");
|
|
55655
|
+
}
|
|
55656
|
+
/** Raised events the hero may name. Consumable events are dropped. */
|
|
55657
|
+
function visibleDishwasherEvents(events) {
|
|
55658
|
+
return events.filter((event) => !isConsumableDishwasherEvent(event));
|
|
55659
|
+
}
|
|
55660
|
+
/** Whole seconds as a short duration: `1 h 24 min`, `42 min`, `30 s`. */
|
|
55661
|
+
function formatDuration(seconds, t = defaultUiText) {
|
|
55662
|
+
if (seconds < 60) return t("uiLibrary.dishwasher.durationSeconds", "{{n}} s", { n: seconds });
|
|
55663
|
+
const minutes = Math.round(seconds / 60);
|
|
55664
|
+
if (minutes < 60) return t("uiLibrary.dishwasher.durationMinutes", "{{n}} min", { n: minutes });
|
|
55665
|
+
const hours = Math.floor(minutes / 60);
|
|
55666
|
+
const rest = minutes % 60;
|
|
55667
|
+
return rest === 0 ? t("uiLibrary.dishwasher.durationHours", "{{n}} h", { n: hours }) : t("uiLibrary.dishwasher.durationHoursMinutes", "{{h}} h {{m}} min", {
|
|
55668
|
+
h: hours,
|
|
55669
|
+
m: rest
|
|
55670
|
+
});
|
|
55671
|
+
}
|
|
55672
|
+
function useDishwasher(trpc, deviceId) {
|
|
55673
|
+
return useDeviceCapability({
|
|
55674
|
+
trpc,
|
|
55675
|
+
deviceId,
|
|
55676
|
+
cap: (d) => d.dishwasher,
|
|
55677
|
+
slice: (d) => d.state.dishwasher
|
|
55678
|
+
});
|
|
55679
|
+
}
|
|
55680
|
+
function DishwasherIconButton({ label, busy, active, onClick, children }) {
|
|
55681
|
+
return /* @__PURE__ */ jsx("button", {
|
|
55682
|
+
type: "button",
|
|
55683
|
+
"aria-label": label,
|
|
55684
|
+
title: label,
|
|
55685
|
+
disabled: busy,
|
|
55686
|
+
onClick: (e) => {
|
|
55687
|
+
e.stopPropagation();
|
|
55688
|
+
onClick();
|
|
55689
|
+
},
|
|
55690
|
+
className: cn("inline-flex h-5 w-5 items-center justify-center rounded text-foreground-subtle hover:text-foreground hover:bg-surface-hover transition-colors", active && "bg-primary text-primary-foreground", busy && "opacity-40 cursor-not-allowed"),
|
|
55691
|
+
children
|
|
55692
|
+
});
|
|
55693
|
+
}
|
|
55694
|
+
function DishwasherGraphic({ running, progressPercent }) {
|
|
55695
|
+
const pct = progressPercent != null ? Math.max(0, Math.min(100, progressPercent)) : running ? 40 : 0;
|
|
55696
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55697
|
+
"aria-hidden": "true",
|
|
55698
|
+
className: "relative w-28 h-36 rounded border-2 border-border bg-gradient-to-b from-surface-hover to-surface overflow-hidden flex-shrink-0",
|
|
55699
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
55700
|
+
className: cn("absolute inset-x-0 bottom-0 bg-primary/25 transition-[height] duration-500", running && "animate-pulse"),
|
|
55701
|
+
style: { height: `${pct}%` }
|
|
55702
|
+
}), /* @__PURE__ */ jsx("div", {
|
|
55703
|
+
className: "absolute inset-0 flex items-center justify-center text-foreground-subtle",
|
|
55704
|
+
children: /* @__PURE__ */ jsx(Waves, { className: "h-10 w-10 opacity-70" })
|
|
55705
|
+
})]
|
|
55706
|
+
});
|
|
55707
|
+
}
|
|
55708
|
+
function DishwasherPanel({ trpc, deviceId, layout }) {
|
|
55709
|
+
const t = useUiText();
|
|
55710
|
+
const { cap, slice, available } = useDishwasher(trpc, deviceId);
|
|
55711
|
+
if (cap === void 0) return null;
|
|
55712
|
+
if (slice === void 0) return null;
|
|
55713
|
+
const display = slice;
|
|
55714
|
+
const link = display.availability === "available";
|
|
55715
|
+
const busy = !available || !link;
|
|
55716
|
+
const optionTogglesLocked = display.childLock === true;
|
|
55717
|
+
const meta = dishwasherHeadline(display, t);
|
|
55718
|
+
const running = display.operationState === "Run";
|
|
55719
|
+
const paused = display.operationState === "Pause";
|
|
55720
|
+
const startable = display.remoteStartAllowed === true && display.selectedProgram !== null;
|
|
55721
|
+
const press = (fn) => {
|
|
55722
|
+
if (busy) return;
|
|
55723
|
+
fn();
|
|
55724
|
+
};
|
|
55725
|
+
if (layout === "compact") return /* @__PURE__ */ jsxs("div", {
|
|
55726
|
+
className: "inline-flex items-center gap-1.5 max-w-full",
|
|
55727
|
+
children: [
|
|
55728
|
+
display.doorOpen === true && /* @__PURE__ */ jsx("span", {
|
|
55729
|
+
className: "inline-flex text-warning shrink-0",
|
|
55730
|
+
title: t("uiLibrary.dishwasher.doorOpen", "Door open"),
|
|
55731
|
+
"aria-label": t("uiLibrary.dishwasher.doorOpen", "Door open"),
|
|
55732
|
+
children: /* @__PURE__ */ jsx(DoorOpen, { className: "h-3.5 w-3.5" })
|
|
55733
|
+
}),
|
|
55734
|
+
/* @__PURE__ */ jsx("span", {
|
|
55735
|
+
className: cn("text-xs font-medium tabular-nums shrink-0", meta.tone),
|
|
55736
|
+
children: meta.label
|
|
55737
|
+
}),
|
|
55738
|
+
display.program != null && /* @__PURE__ */ jsx("span", {
|
|
55739
|
+
className: "text-xs text-foreground-subtle truncate max-w-[7rem]",
|
|
55740
|
+
title: display.program,
|
|
55741
|
+
children: featureLabel(display.program)
|
|
55742
|
+
}),
|
|
55743
|
+
display.remaining != null && /* @__PURE__ */ jsxs("span", {
|
|
55744
|
+
className: "inline-flex items-center gap-0.5 text-xs text-foreground-subtle tabular-nums shrink-0",
|
|
55745
|
+
children: [/* @__PURE__ */ jsx(Timer, { className: "h-3 w-3" }), formatDuration(display.remaining, t)]
|
|
55746
|
+
}),
|
|
55747
|
+
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
55748
|
+
label: t("uiLibrary.dishwasher.start", "Start"),
|
|
55749
|
+
busy: busy || !startable,
|
|
55750
|
+
active: running,
|
|
55751
|
+
onClick: () => press(() => cap.start({})),
|
|
55752
|
+
children: /* @__PURE__ */ jsx(Play, { className: "h-3 w-3" })
|
|
55753
|
+
}),
|
|
55754
|
+
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
55755
|
+
label: paused ? t("uiLibrary.dishwasher.resume", "Resume") : t("uiLibrary.dishwasher.pause", "Pause"),
|
|
55756
|
+
busy: busy || !(running || paused),
|
|
55757
|
+
active: paused,
|
|
55758
|
+
onClick: () => press(() => paused ? cap.resume({}) : cap.pause({})),
|
|
55759
|
+
children: /* @__PURE__ */ jsx(Pause, { className: "h-3 w-3" })
|
|
55760
|
+
})
|
|
55761
|
+
]
|
|
55762
|
+
});
|
|
55763
|
+
const programs = display.availablePrograms;
|
|
55764
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
55765
|
+
className: "flex flex-col gap-3 rounded-lg border border-border bg-surface p-4",
|
|
55766
|
+
children: [
|
|
55767
|
+
/* @__PURE__ */ jsxs("div", {
|
|
55768
|
+
className: "flex items-start gap-4",
|
|
55769
|
+
children: [/* @__PURE__ */ jsx(DishwasherGraphic, {
|
|
55770
|
+
running,
|
|
55771
|
+
progressPercent: display.progress
|
|
55772
|
+
}), /* @__PURE__ */ jsxs("div", {
|
|
55773
|
+
className: "flex min-w-0 flex-1 flex-col gap-2",
|
|
55774
|
+
children: [
|
|
55775
|
+
/* @__PURE__ */ jsxs("div", {
|
|
55776
|
+
className: "flex flex-wrap items-center gap-2",
|
|
55777
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
55778
|
+
className: cn("text-3xl font-semibold", meta.tone),
|
|
55779
|
+
children: meta.label
|
|
55780
|
+
}), display.powerOn === false && /* @__PURE__ */ jsx("span", {
|
|
55781
|
+
className: "text-xs font-medium text-foreground-subtle",
|
|
55782
|
+
children: t("uiLibrary.dishwasher.powerOff", "Power off")
|
|
55783
|
+
})]
|
|
55784
|
+
}),
|
|
55785
|
+
display.program != null && /* @__PURE__ */ jsx("span", {
|
|
55786
|
+
className: "text-sm text-foreground-subtle",
|
|
55787
|
+
title: display.program,
|
|
55788
|
+
children: featureLabel(display.program)
|
|
55789
|
+
}),
|
|
55790
|
+
display.remaining != null && /* @__PURE__ */ jsxs("span", {
|
|
55791
|
+
className: "inline-flex items-center gap-1 text-sm text-foreground-subtle tabular-nums",
|
|
55792
|
+
children: [/* @__PURE__ */ jsx(Timer, { className: "h-3.5 w-3.5" }), t("uiLibrary.dishwasher.remaining", "{{time}} left", { time: formatDuration(display.remaining, t) })]
|
|
55793
|
+
}),
|
|
55794
|
+
display.delayedStart != null && display.delayedStart > 0 && /* @__PURE__ */ jsx("span", {
|
|
55795
|
+
className: "text-xs text-foreground-subtle tabular-nums",
|
|
55796
|
+
children: t("uiLibrary.dishwasher.startsIn", "Starts in {{time}}", { time: formatDuration(display.delayedStart, t) })
|
|
55797
|
+
}),
|
|
55798
|
+
display.progress != null && /* @__PURE__ */ jsxs("div", {
|
|
55799
|
+
className: "flex items-center gap-2",
|
|
55800
|
+
children: [/* @__PURE__ */ jsx("div", {
|
|
55801
|
+
className: "h-1.5 flex-1 rounded bg-surface-hover overflow-hidden",
|
|
55802
|
+
children: /* @__PURE__ */ jsx("div", {
|
|
55803
|
+
className: "h-full bg-primary transition-[width] duration-500",
|
|
55804
|
+
style: { width: `${Math.max(0, Math.min(100, display.progress))}%` }
|
|
55805
|
+
})
|
|
55806
|
+
}), /* @__PURE__ */ jsxs("span", {
|
|
55807
|
+
className: "tabular-nums text-xs text-foreground-subtle",
|
|
55808
|
+
children: [Math.round(display.progress), "%"]
|
|
55809
|
+
})]
|
|
55810
|
+
}),
|
|
55811
|
+
/* @__PURE__ */ jsxs("div", {
|
|
55812
|
+
className: "flex flex-wrap items-center gap-x-3 gap-y-1.5",
|
|
55813
|
+
children: [display.doorOpen === true && /* @__PURE__ */ jsxs("span", {
|
|
55814
|
+
className: "inline-flex items-center gap-1 text-xs text-warning",
|
|
55815
|
+
children: [/* @__PURE__ */ jsx(DoorOpen, { className: "h-3.5 w-3.5" }), t("uiLibrary.dishwasher.doorOpen", "Door open")]
|
|
55816
|
+
}), visibleDishwasherEvents(display.activeEvents).map((event) => /* @__PURE__ */ jsx("span", {
|
|
55817
|
+
className: "text-xs text-warning",
|
|
55818
|
+
title: event,
|
|
55819
|
+
children: featureLabel(event)
|
|
55820
|
+
}, event))]
|
|
55821
|
+
}),
|
|
55822
|
+
display.operationState === "Error" && /* @__PURE__ */ jsxs("div", {
|
|
55823
|
+
className: "inline-flex items-center gap-1 text-xs text-danger",
|
|
55824
|
+
children: [/* @__PURE__ */ jsx(TriangleAlert, { className: "h-3.5 w-3.5" }), /* @__PURE__ */ jsx("span", { children: display.errorLabel != null ? featureLabel(display.errorLabel) : display.errorCode != null ? t("uiLibrary.dishwasher.errorCode", "Error {{code}}", { code: display.errorCode }) : t("uiLibrary.dishwasher.op.error", "Error") })]
|
|
55825
|
+
}),
|
|
55826
|
+
/* @__PURE__ */ jsxs("div", {
|
|
55827
|
+
className: "flex flex-wrap items-center gap-2",
|
|
55828
|
+
children: [
|
|
55829
|
+
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
55830
|
+
label: t("uiLibrary.dishwasher.start", "Start"),
|
|
55831
|
+
busy: busy || !startable,
|
|
55832
|
+
active: running,
|
|
55833
|
+
onClick: () => press(() => cap.start({})),
|
|
55834
|
+
children: /* @__PURE__ */ jsx(Play, { className: "h-4 w-4" })
|
|
55835
|
+
}),
|
|
55836
|
+
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
55837
|
+
label: paused ? t("uiLibrary.dishwasher.resume", "Resume") : t("uiLibrary.dishwasher.pause", "Pause"),
|
|
55838
|
+
busy: busy || !(running || paused),
|
|
55839
|
+
active: paused,
|
|
55840
|
+
onClick: () => press(() => paused ? cap.resume({}) : cap.pause({})),
|
|
55841
|
+
children: /* @__PURE__ */ jsx(Pause, { className: "h-4 w-4" })
|
|
55842
|
+
}),
|
|
55843
|
+
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
55844
|
+
label: t("uiLibrary.dishwasher.stop", "Stop"),
|
|
55845
|
+
busy: busy || !(running || paused),
|
|
55846
|
+
active: false,
|
|
55847
|
+
onClick: () => press(() => cap.stop({})),
|
|
55848
|
+
children: /* @__PURE__ */ jsx(Square, { className: "h-3.5 w-3.5" })
|
|
55849
|
+
}),
|
|
55850
|
+
/* @__PURE__ */ jsx(DishwasherIconButton, {
|
|
55851
|
+
label: t("uiLibrary.dishwasher.power", "Power"),
|
|
55852
|
+
busy: busy || display.powerOn === null,
|
|
55853
|
+
active: display.powerOn === true,
|
|
55854
|
+
onClick: () => {
|
|
55855
|
+
const next = display.powerOn !== true;
|
|
55856
|
+
press(() => cap.setPower({ on: next }));
|
|
55857
|
+
},
|
|
55858
|
+
children: /* @__PURE__ */ jsx(Power, { className: "h-4 w-4" })
|
|
55859
|
+
})
|
|
55860
|
+
]
|
|
55861
|
+
})
|
|
55862
|
+
]
|
|
55863
|
+
})]
|
|
55864
|
+
}),
|
|
55865
|
+
programs.length > 0 && /* @__PURE__ */ jsxs("label", {
|
|
55866
|
+
className: "flex items-center gap-2 text-xs text-foreground-subtle",
|
|
55867
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
55868
|
+
className: "w-16 shrink-0",
|
|
55869
|
+
children: t("uiLibrary.dishwasher.program", "Program")
|
|
55870
|
+
}), /* @__PURE__ */ jsxs("select", {
|
|
55871
|
+
"aria-label": t("uiLibrary.dishwasher.program", "Program"),
|
|
55872
|
+
value: display.selectedProgram ?? "",
|
|
55873
|
+
disabled: busy,
|
|
55874
|
+
onChange: (e) => {
|
|
55875
|
+
const program = e.target.value;
|
|
55876
|
+
if (!program) return;
|
|
55877
|
+
cap.setProgram({ program });
|
|
55878
|
+
},
|
|
55879
|
+
onClick: (e) => {
|
|
55880
|
+
e.stopPropagation();
|
|
55881
|
+
},
|
|
55882
|
+
className: "flex-1 rounded border border-border bg-surface px-2 py-1 text-foreground disabled:opacity-50",
|
|
55883
|
+
children: [display.selectedProgram == null && /* @__PURE__ */ jsx("option", {
|
|
55884
|
+
value: "",
|
|
55885
|
+
children: "—"
|
|
55886
|
+
}), programs.map((p) => /* @__PURE__ */ jsx("option", {
|
|
55887
|
+
value: p,
|
|
55888
|
+
children: featureLabel(p)
|
|
55889
|
+
}, p))]
|
|
55890
|
+
})]
|
|
55891
|
+
}),
|
|
55892
|
+
/* @__PURE__ */ jsxs("div", {
|
|
55893
|
+
className: "flex flex-wrap gap-4 text-xs",
|
|
55894
|
+
children: [
|
|
55895
|
+
/* @__PURE__ */ jsx(ToggleRow, {
|
|
55896
|
+
label: t("uiLibrary.dishwasher.halfLoad", "Half load"),
|
|
55897
|
+
checked: display.halfLoad,
|
|
55898
|
+
shown: link,
|
|
55899
|
+
busy: busy || optionTogglesLocked,
|
|
55900
|
+
onChange: (on) => void cap.setHalfLoad({ on })
|
|
55901
|
+
}),
|
|
55902
|
+
/* @__PURE__ */ jsx(ToggleRow, {
|
|
55903
|
+
label: t("uiLibrary.dishwasher.hygienePlus", "Hygiene plus"),
|
|
55904
|
+
checked: display.hygienePlus,
|
|
55905
|
+
shown: link,
|
|
55906
|
+
busy: busy || optionTogglesLocked,
|
|
55907
|
+
onChange: (on) => void cap.setHygienePlus({ on })
|
|
55908
|
+
}),
|
|
55909
|
+
/* @__PURE__ */ jsx(ToggleRow, {
|
|
55910
|
+
label: t("uiLibrary.dishwasher.extraDry", "Extra dry"),
|
|
55911
|
+
checked: display.extraDry,
|
|
55912
|
+
shown: link,
|
|
55913
|
+
busy: busy || optionTogglesLocked,
|
|
55914
|
+
onChange: (on) => void cap.setExtraDry({ on })
|
|
55915
|
+
}),
|
|
55916
|
+
/* @__PURE__ */ jsx(ToggleRow, {
|
|
55917
|
+
label: t("uiLibrary.dishwasher.intensiveZone", "Intensive zone"),
|
|
55918
|
+
checked: display.intensiveZone,
|
|
55919
|
+
shown: link,
|
|
55920
|
+
busy: busy || optionTogglesLocked,
|
|
55921
|
+
onChange: (on) => void cap.setIntensiveZone({ on })
|
|
55922
|
+
}),
|
|
55923
|
+
/* @__PURE__ */ jsx(ToggleRow, {
|
|
55924
|
+
label: t("uiLibrary.dishwasher.varioSpeedPlus", "VarioSpeed+"),
|
|
55925
|
+
checked: display.varioSpeedPlus,
|
|
55926
|
+
shown: link,
|
|
55927
|
+
busy: busy || optionTogglesLocked,
|
|
55928
|
+
onChange: (on) => void cap.setVarioSpeedPlus({ on })
|
|
55929
|
+
}),
|
|
55930
|
+
/* @__PURE__ */ jsx(ToggleRow, {
|
|
55931
|
+
label: t("uiLibrary.dishwasher.childLock", "Child lock"),
|
|
55932
|
+
checked: display.childLock,
|
|
55933
|
+
shown: link,
|
|
55934
|
+
busy,
|
|
55935
|
+
onChange: (on) => void cap.setChildLock({ on })
|
|
55936
|
+
})
|
|
55937
|
+
]
|
|
55938
|
+
})
|
|
55939
|
+
]
|
|
55940
|
+
});
|
|
55941
|
+
}
|
|
55942
|
+
/**
|
|
55943
|
+
* One boolean setting. `checked === null` is "the appliance has not said": on a reachable
|
|
55944
|
+
* appliance that means it does not offer the setting (hidden); on an unreachable one the
|
|
55945
|
+
* setting is shown but disabled and marked unknown — never as an unchecked box.
|
|
55946
|
+
*/
|
|
55947
|
+
function ToggleRow({ label, checked, shown, busy, onChange }) {
|
|
55948
|
+
const t = useUiText();
|
|
55949
|
+
if (checked === null && shown) return null;
|
|
55950
|
+
return /* @__PURE__ */ jsxs("label", {
|
|
55951
|
+
className: "inline-flex items-center gap-2 cursor-pointer",
|
|
55952
|
+
children: [
|
|
55953
|
+
/* @__PURE__ */ jsx("input", {
|
|
55954
|
+
type: "checkbox",
|
|
55955
|
+
checked: checked === true,
|
|
55956
|
+
"aria-checked": checked === null ? "mixed" : checked,
|
|
55957
|
+
disabled: busy || checked === null,
|
|
55958
|
+
onChange: (e) => {
|
|
55959
|
+
onChange(e.target.checked);
|
|
55960
|
+
},
|
|
55961
|
+
onClick: (e) => {
|
|
55962
|
+
e.stopPropagation();
|
|
55963
|
+
},
|
|
55964
|
+
className: "rounded border-border"
|
|
55965
|
+
}),
|
|
55966
|
+
/* @__PURE__ */ jsx("span", { children: label }),
|
|
55967
|
+
checked === null && /* @__PURE__ */ jsx("span", {
|
|
55968
|
+
className: "text-foreground-subtle",
|
|
55969
|
+
children: t("uiLibrary.dishwasher.unknownValue", "—")
|
|
55970
|
+
})
|
|
55971
|
+
]
|
|
55972
|
+
});
|
|
55973
|
+
}
|
|
55974
|
+
function DishwasherInlineControl(props) {
|
|
55975
|
+
return /* @__PURE__ */ jsx(DishwasherPanel, {
|
|
55976
|
+
...props,
|
|
55977
|
+
layout: "compact"
|
|
55978
|
+
});
|
|
55979
|
+
}
|
|
55980
|
+
function DishwasherHeroCard(props) {
|
|
55981
|
+
return /* @__PURE__ */ jsx(DishwasherPanel, {
|
|
55982
|
+
...props,
|
|
55983
|
+
layout: "full"
|
|
55984
|
+
});
|
|
55985
|
+
}
|
|
55986
|
+
//#endregion
|
|
55987
|
+
//#region src/composites/device-controls/appliance-control.tsx
|
|
55988
|
+
/**
|
|
55989
|
+
* Appliance card for a `DeviceType.Washer` / `DeviceType.Dryer` device.
|
|
55990
|
+
*
|
|
55991
|
+
* These appliances have no program surface: what is worth showing is whether
|
|
55992
|
+
* the cycle is running (the `running-state` cap), for how long, and what the
|
|
55993
|
+
* appliance draws right now (the `power-meter` cap). Both slices are read
|
|
55994
|
+
* straight from the device; neither is required.
|
|
55995
|
+
* - ApplianceInlineControl (device-list row): the running badge round the
|
|
55996
|
+
* drum icon, plus the live watts when there are any.
|
|
55997
|
+
* - ApplianceHeroCard (device-detail hero): the drum (turning only while a
|
|
55998
|
+
* cycle runs), the state, the phase, the dwell and the power.
|
|
55999
|
+
*
|
|
56000
|
+
* UNKNOWN IS NOT OFF (D393). `running: null` is drawn as "Unknown" and the
|
|
56001
|
+
* drum stays still and unbadged; a missing watt reading is a dash, never
|
|
56002
|
+
* "0 W". A slice that has not landed hides its row instead of faking a value.
|
|
56003
|
+
*/
|
|
56004
|
+
var KEYFRAMES = `
|
|
56005
|
+
@keyframes apl-tumble { to { transform: rotate(360deg) } }
|
|
56006
|
+
.apl-drum-run { animation: apl-tumble 3s linear infinite; }
|
|
56007
|
+
@media (prefers-reduced-motion: reduce) {
|
|
56008
|
+
.apl-drum-run { animation: none !important; }
|
|
56009
|
+
}
|
|
56010
|
+
`;
|
|
56011
|
+
/** Whole watts, or a dash when the appliance has not reported a reading. */
|
|
56012
|
+
function formatWatts(power) {
|
|
56013
|
+
return power === void 0 || !Number.isFinite(power) ? "—" : `${Math.round(power)} W`;
|
|
56014
|
+
}
|
|
56015
|
+
/** The state to a person: running / idle, or why there is none (unknown). */
|
|
56016
|
+
function applianceStateLabel(running, t) {
|
|
56017
|
+
if (running === true) return {
|
|
56018
|
+
label: t("uiLibrary.appliance.running", "Running"),
|
|
56019
|
+
tone: "text-primary"
|
|
56020
|
+
};
|
|
56021
|
+
if (running === false) return {
|
|
56022
|
+
label: t("uiLibrary.appliance.idle", "Idle"),
|
|
56023
|
+
tone: "text-foreground"
|
|
56024
|
+
};
|
|
56025
|
+
return {
|
|
56026
|
+
label: t("uiLibrary.appliance.unknown", "Unknown"),
|
|
56027
|
+
tone: "text-foreground-subtle"
|
|
56028
|
+
};
|
|
56029
|
+
}
|
|
56030
|
+
function dwellText(running, since, now, t) {
|
|
56031
|
+
if (running !== true) return null;
|
|
56032
|
+
const { duration } = runningStatusParts(running, since, null, now);
|
|
56033
|
+
if (duration === void 0) return null;
|
|
56034
|
+
return "minutes" in duration ? t("uiLibrary.appliance.forMinutes", "for {{count}} min", { count: duration.minutes }) : t("uiLibrary.appliance.forHours", "for {{count}} h", { count: duration.hours });
|
|
56035
|
+
}
|
|
56036
|
+
function useApplianceState(props) {
|
|
56037
|
+
return {
|
|
56038
|
+
running: useDeviceState(props.trpc, props.deviceId, (s) => s.runningState),
|
|
56039
|
+
power: useDeviceState(props.trpc, props.deviceId, (s) => s.powerMeter)
|
|
56040
|
+
};
|
|
56041
|
+
}
|
|
56042
|
+
/** The drum: a ring with a few items in it, turning only while a cycle runs. */
|
|
56043
|
+
function Drum({ running }) {
|
|
56044
|
+
return /* @__PURE__ */ jsx("div", {
|
|
56045
|
+
"aria-hidden": "true",
|
|
56046
|
+
"data-testid": "appliance-drum",
|
|
56047
|
+
"data-running": running === true ? "running" : running === false ? "idle" : "unknown",
|
|
56048
|
+
className: "relative flex h-28 w-28 shrink-0 items-center justify-center rounded-full border-2 border-border bg-surface-hover",
|
|
56049
|
+
children: /* @__PURE__ */ jsxs("div", {
|
|
56050
|
+
className: cn("relative h-20 w-20 rounded-full border-2", running === true ? "apl-drum-run border-primary" : "border-border"),
|
|
56051
|
+
"data-testid": "appliance-drum-ring",
|
|
56052
|
+
children: [
|
|
56053
|
+
/* @__PURE__ */ jsx("span", { className: "absolute left-2 top-4 h-3 w-3 rounded-full bg-primary/40" }),
|
|
56054
|
+
/* @__PURE__ */ jsx("span", { className: "absolute bottom-3 right-3 h-4 w-4 rounded-full bg-info/40" }),
|
|
56055
|
+
/* @__PURE__ */ jsx("span", { className: "absolute bottom-4 left-4 h-2.5 w-2.5 rounded-full bg-foreground-subtle/40" })
|
|
56056
|
+
]
|
|
56057
|
+
})
|
|
56058
|
+
});
|
|
56059
|
+
}
|
|
56060
|
+
function ApplianceHeroCard(props) {
|
|
56061
|
+
const t = useUiText();
|
|
56062
|
+
const { running, power } = useApplianceState(props);
|
|
56063
|
+
const state = running?.running ?? null;
|
|
56064
|
+
const meta = applianceStateLabel(state, t);
|
|
56065
|
+
const phase = running?.phase?.trim() ?? "";
|
|
56066
|
+
const dwell = running === void 0 ? null : dwellText(state, running.since, Date.now(), t);
|
|
56067
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56068
|
+
className: "flex items-center gap-4 rounded-lg border border-border bg-surface p-4",
|
|
56069
|
+
children: [
|
|
56070
|
+
/* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
|
|
56071
|
+
/* @__PURE__ */ jsx(Drum, { running: state }),
|
|
56072
|
+
/* @__PURE__ */ jsxs("div", {
|
|
56073
|
+
className: "flex min-w-0 flex-1 flex-col gap-2",
|
|
56074
|
+
children: [
|
|
56075
|
+
/* @__PURE__ */ jsxs("div", {
|
|
56076
|
+
className: "flex flex-wrap items-baseline gap-x-2",
|
|
56077
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
56078
|
+
"data-testid": "appliance-state",
|
|
56079
|
+
className: cn("text-3xl font-semibold", meta.tone),
|
|
56080
|
+
children: meta.label
|
|
56081
|
+
}), dwell !== null && /* @__PURE__ */ jsx("span", {
|
|
56082
|
+
className: "text-sm tabular-nums text-foreground-subtle",
|
|
56083
|
+
children: dwell
|
|
56084
|
+
})]
|
|
56085
|
+
}),
|
|
56086
|
+
phase !== "" && state !== null && /* @__PURE__ */ jsx("span", {
|
|
56087
|
+
className: "text-sm text-foreground-subtle",
|
|
56088
|
+
children: phase
|
|
56089
|
+
}),
|
|
56090
|
+
power !== void 0 && /* @__PURE__ */ jsxs("span", {
|
|
56091
|
+
"data-testid": "appliance-power",
|
|
56092
|
+
className: "inline-flex items-center gap-1 text-sm tabular-nums text-foreground-muted",
|
|
56093
|
+
title: power.power === void 0 ? t("uiLibrary.appliance.powerUnknown", "Power unknown") : void 0,
|
|
56094
|
+
children: [/* @__PURE__ */ jsx(Zap, {
|
|
56095
|
+
className: "h-3.5 w-3.5",
|
|
56096
|
+
"aria-hidden": true
|
|
56097
|
+
}), formatWatts(power.power)]
|
|
56098
|
+
})
|
|
56099
|
+
]
|
|
56100
|
+
})
|
|
56101
|
+
]
|
|
56102
|
+
});
|
|
56103
|
+
}
|
|
56104
|
+
function ApplianceInlineControl(props) {
|
|
56105
|
+
const { running, power } = useApplianceState(props);
|
|
56106
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56107
|
+
className: "inline-flex items-center gap-1.5 max-w-full",
|
|
56108
|
+
children: [/* @__PURE__ */ jsx(RunningBadge, {
|
|
56109
|
+
running: running?.running ?? null,
|
|
56110
|
+
children: /* @__PURE__ */ jsx(WashingMachine, {
|
|
56111
|
+
className: "h-4 w-4 text-foreground-muted",
|
|
56112
|
+
"aria-hidden": true
|
|
56113
|
+
})
|
|
56114
|
+
}), power !== void 0 && /* @__PURE__ */ jsx("span", {
|
|
56115
|
+
className: "text-xs tabular-nums text-foreground-subtle",
|
|
56116
|
+
children: formatWatts(power.power)
|
|
56117
|
+
})]
|
|
56118
|
+
});
|
|
56119
|
+
}
|
|
56120
|
+
//#endregion
|
|
56121
|
+
//#region src/composites/device-controls/heating-valve-readout.tsx
|
|
56122
|
+
function formatHeatingValvePosition(position) {
|
|
56123
|
+
return position !== null ? `${position}%` : "—";
|
|
56124
|
+
}
|
|
56125
|
+
function HeatingValveReadout({ trpc, deviceId, layout }) {
|
|
56126
|
+
const t = useUiText();
|
|
56127
|
+
const { cap, slice } = useDeviceCapability({
|
|
56128
|
+
trpc,
|
|
56129
|
+
deviceId,
|
|
56130
|
+
cap: (d) => d.heatingValve,
|
|
56131
|
+
slice: (d) => d.state.heatingValve
|
|
56132
|
+
});
|
|
56133
|
+
if (cap === void 0 || slice === void 0) return null;
|
|
56134
|
+
const label = t("uiLibrary.heatingValveReadout.valve", "Valve");
|
|
56135
|
+
const value = formatHeatingValvePosition(slice.position);
|
|
56136
|
+
if (layout === "compact") return /* @__PURE__ */ jsx("span", {
|
|
56137
|
+
className: "inline-flex items-center text-xs tabular-nums text-foreground-subtle",
|
|
56138
|
+
"aria-label": `${label} ${value}`,
|
|
56139
|
+
children: value
|
|
56140
|
+
});
|
|
56141
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
56142
|
+
className: "flex items-center gap-2 text-xs tabular-nums text-foreground-subtle",
|
|
56143
|
+
children: [/* @__PURE__ */ jsx("span", { children: label }), /* @__PURE__ */ jsx("span", {
|
|
56144
|
+
className: "font-medium text-foreground",
|
|
56145
|
+
children: value
|
|
56146
|
+
})]
|
|
56147
|
+
});
|
|
56148
|
+
}
|
|
56149
|
+
//#endregion
|
|
55624
56150
|
//#region src/composites/device-controls/thermostat-hero-card.tsx
|
|
55625
56151
|
/**
|
|
55626
56152
|
* Default temperature range (Celsius) used to normalize the setpoint fraction
|
|
@@ -57709,10 +58235,18 @@ var CONTROL_KIND_COMPONENTS = {
|
|
|
57709
58235
|
InlineControl: PetFountainInlineControl,
|
|
57710
58236
|
HeroCard: PetFountainHeroCard
|
|
57711
58237
|
},
|
|
58238
|
+
heater: {
|
|
58239
|
+
InlineControl: HeaterInlineControl,
|
|
58240
|
+
HeroCard: HeaterHeroCard
|
|
58241
|
+
},
|
|
57712
58242
|
dishwasher: {
|
|
57713
58243
|
InlineControl: DishwasherInlineControl,
|
|
57714
58244
|
HeroCard: DishwasherHeroCard
|
|
57715
58245
|
},
|
|
58246
|
+
appliance: {
|
|
58247
|
+
InlineControl: ApplianceInlineControl,
|
|
58248
|
+
HeroCard: ApplianceHeroCard
|
|
58249
|
+
},
|
|
57716
58250
|
script: {
|
|
57717
58251
|
InlineControl: ScriptInlineControl,
|
|
57718
58252
|
HeroCard: ScriptHeroCard
|
|
@@ -57792,6 +58326,7 @@ var CONTROL_FILLS = {
|
|
|
57792
58326
|
[DeviceType.Image]: false,
|
|
57793
58327
|
[DeviceType.PetFeeder]: false,
|
|
57794
58328
|
[DeviceType.PetFountain]: false,
|
|
58329
|
+
[DeviceType.Heater]: false,
|
|
57795
58330
|
[DeviceType.Dishwasher]: false,
|
|
57796
58331
|
[DeviceType.Washer]: false,
|
|
57797
58332
|
[DeviceType.Dryer]: false
|
|
@@ -73206,12 +73741,12 @@ var statusIcons = {
|
|
|
73206
73741
|
* Render inside `<Suspense>` at all call sites. */
|
|
73207
73742
|
var MaskShapeCanvas = lazy(() => import("./MaskShapeCanvas-C9cJlxvG.js").then((m) => ({ default: m.MaskShapeCanvas })));
|
|
73208
73743
|
/** Lazy-wrapped `MotionZonesSettings` — code-split off the main bundle. */
|
|
73209
|
-
var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-
|
|
73744
|
+
var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-Zcfa5c9l.js").then((m) => ({ default: m.MotionZonesSettings })));
|
|
73210
73745
|
/** Lazy-wrapped `SceneMonitorEditor` — code-split off the main bundle for the
|
|
73211
73746
|
* same reason: it mounts `MaskShapeCanvas`, which chains react-konva. Render
|
|
73212
73747
|
* inside `<Suspense>`; the admin-ui `/scenes` dialog is its only caller. */
|
|
73213
|
-
var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-
|
|
73748
|
+
var SceneMonitorEditor = lazy(() => import("./SceneMonitorEditor-C8YXVzYI.js").then((m) => ({ default: m.SceneMonitorEditor })));
|
|
73214
73749
|
/** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
|
|
73215
|
-
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-
|
|
73750
|
+
var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-B_X42yzN.js").then((m) => ({ default: m.PrivacyMaskSettings })));
|
|
73216
73751
|
//#endregion
|
|
73217
|
-
export { Shield as $, CloudRain as $n, LockOpen as $t, Trash2 as A, AddProviderEntryDialog, AddonGlobalSettingsForm, AdminLinkQuickAction, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, Flame as An, AppShell, Bone as Ar, ArcKnob, Pencil 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, Droplet as Bn, BottomSheet, BatteryFull as Br, Breadcrumb, BrightnessPanel, BrokerPickerSlotProvider, MousePointerClick 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, GraduationCap 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, Car as Cr, Plug 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, DisclosureChevron, DiscoveryPanel, DisplayPaletteProvider, Footprints as Dn, DoorbellRecentPanel, Bug as Dr, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, Pipette as Dt, DummyHeroCard, DummyInline, Truck as E, EMPTY_DATA_TABLE_FILTER, EMPTY_HISTORY_PANELS, EVENT_KIND_ICONS, EmptyState, Funnel as En, EndpointResultsCard, EndpointTestCard, EntryJsonSchemaForm, Bus as Er, ErrorBox, Plane 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, FileInput, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, EyeOff as Fn, FormField$1 as FormField, BellRing as Fr, Navigation as Ft, Sparkles as G, GAP_INTERVAL_FACTOR, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GateBadge, GateControl, Database as Gn, ArrowUpToLine as Gr, GripTrack, GroupedModelSelector, GroupedTilePicker, Mic 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, DoorOpen as Hn, HotkeyProvider, HotkeyScope, HoverZoomImage, Ban as Hr, MonitorPlay as Ht, HubSessionTestCard, HumidifierHeroCard, HumidifierInlineControl, Thermometer as I, INPUT_COMPACT, INPUT_SHELL, IconAction, IconButton, IconPicker, ImageHeroCard, ImageInlineControl, ImageSelector, ExternalLink as In, InferenceConfigSelector, Input, Battery as Ir, Music as It, ItemFormDialog, SlidersHorizontal as J, Copy as Jn, ArrowDown as Jr, Megaphone as Jt, Snowflake as K, KebabMenu, KeyValueList, Crosshair as Kn, ArrowRight as Kr, MessageSquare as Kt, Target as L, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LayeredSettingsForm, LightHeroCard, LightInlineControl, Eraser as Ln, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, BatteryWarning as Lr, Move as Lt, Tractor as M, MEDIA_GRID, MINUTES_PER_DAY, MODE_COLOR, MaskShapeCanvas, MediaCard, MediaGrid, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, Feather as Mn, MobileDrawer, ModelPicker, MotionZonesSettings, Bird as Mr, Pause as Mt, ToggleRight as N, NAVIGATION_DRIVE_INTERVAL_MS, NODE_COLOR_IDS, NatResultCard, NavigationPanel, NetworkLinkBadge, Fan as Nn, NodeMultiSelectField, NodePicker, NodeSelectField, NotificationTargetSelectField, NotificationTargetsField, Bike as Nr, Package as Nt, TrendingDown as O, OCCUPANCY_KEY, OPTION_SELECT_SEARCH_MIN_OPTIONS, OfflineBadge, Flashlight as On, OptionSelect, Box as Or, Pin 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, Eye as Pn, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, Bell as Pr, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, ProviderEntryPills, Network as Pt, PtzPanel, Ship as Q, CloudSnow as Qn, Activity as Qr, QrCode, Lock as Qt, QuantityValueInput, Tag as R, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RESOLUTION_BUCKET_MS, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, ROOT_DETECTOR_STEP_ID, RadialGauge, Radio, RecordEntriesPanel, RecordedPlaybackProvider, RecordingPanel, ResponseLog, RetrainReviewBadge, EllipsisVertical as Rn, RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, RoleNodePill, RootModelSourceControl, RootSuppliedModelNote, BatteryMedium as Rr, MoveVertical 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, Slider, Grid2x2 as Sn, SnapshotButton, SortHeaderButton, Sparkline, Cast as Sr, PowerOff 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, Textarea, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimeSeriesChart, TimelineSlider, TimezoneSelector, Gamepad2 as Tn, Tooltip, TooltipContent, TooltipTrigger, Cable as Tr, TrainingBaseModelPicker, TrainingCollectionPicker, Play as Tt, Square as U, UNIT_PREFERENCES_NAMESPACE, UiTextProvider, UiTrans, DoorClosed as Un, UnitPicker, UnitPreferencesFromServer, UnitPreferencesProvider, Baby as Ur, Minus as Ut, SunMedium as V, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, ViewSwitch, Download as Vn, VodPlaybackProvider, Bath as Vr, Moon as Vt, Sprout as W, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, Dog as Wn, ArrowUp as Wr, Minimize2 as Wt, SkipBack as X, Cloud as Xn, AlarmSmoke as Xr, MapPin as Xt, SkipForward as Y, Cog as Yn, ArrowDownToLine as Yr, Maximize2 as Yt, Siren as Z, CloudSun as Zn, ZoneEditingProvider, AirVent as Zr, Mail as Zt, Vibrate as _, Hash as _n, ChevronLeft as _r, RadioTower as _t, Wrench as a, acceleratorLabel, acceleratorShortLabel, agentColumnKey, alignSeries, allDeviceTypeFilterOptions, Lightbulb as an, anchorNow, applyFleetQueryDefaults, applyPickerFilters, CircleStop as ar, ariaSortForColumn, assignNodeColorId, Server as at, axisTicks, User as b, badgeFor, binaryBatteryIsLow, bindsToModel, Hammer as bn, booleanLabels, boundsInPicked, ChartLine as br, Puzzle as bt, bucketTotals, buildColorByNodeId, buildDataRecordRows, buildPeerConnectionConfig, buildStepTreeFromSchema, buildSubjectPath, buildTimeSeriesModel, Wifi as c, catalogHasDraft, chartKeys, chartSeriesStyle, childEntityId, childListName, chipOverflow, chunk, clampMinute, classifyAddressScope, classifyCapability, classifySessionVerdict, clearPickerGroup, clusterRootModelIds, cn, colorIdForNode, columnsForContext, compareSrflxMappings, computePageButtons, consumableItemLevel, consumableLevelBarClass, consumableLevelLabel, consumableLevelVariant, containerChildToRef, countableDevices, coverHighlight, coverageLine, CirclePause 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, Inbox as dn, dockBox, CircleCheckBig as dr, draftFromQuery, Router as dt, effectivePageSize, emptyDevicesWidens, emptySessionRun, LocateFixed as en, encodeCustomWindow, encodeSeriesRef, energyBuckets, ensureMfHostInit, CloudLightning as er, ShieldOff as et, eventKindLabel, WifiHigh as f, filterDataTableRows, filterDeviceOptions, filterOccupancyLines, filterOptions as filterOptionSelectOptions, filterPickerDevices, finalizeSessionRun, findTimezone, flattenPickerGrouping, flattenPickerRows, fleetViewOf, Image as fn, foldDeviceName, formatChartBytes, formatChartNumber, formatChartValue, formatControlDateTime, formatDeviceName, formatLastSeen, formatNumeric, formatSettingValue, formatSpan, formatTimeLabel, CircleAlert as fr, freezeVerdict, Route as ft, fuzzyMatch, Volume2 as g, gapThresholdMs, getClassColor, getPhaseVisual, Heater as gn, ChevronRight as gr, groupAgentColumns, groupChildrenByLayout, groupDeviceSeries, groupPickerDevices, groupPickerDevicesBy, Radio$1 as gt, VolumeX as h, hardwareLabel, historyPageHref, History as hn, ChevronUp as hr, RefreshCw as ht, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humanizeName, humidifierTint, X as i, iconGlyphsFailed, iconGlyphsLoaded, Link2 as in, indexDeviceNames, initialScrubState, insertAtSelection, CircleX as ir, isAbsentProvider, isByteUnit, isConsumableLevelField, isDataTableFilterActive, isDeviceNameStock, isDrawableSubjectPath, isFieldVisible, isGroupExpanded, isHistoryWindowId, isKeychainFieldValue, isModelScopedField, isPickableUnit, isRedactedSecret, isRefusal, isSecretField, isValueField, Settings as it, TrainFront as j, Film as jn, Blinds as jr, PawPrint as jt, TrendingUp as k, FlashlightOff as kn, Bot as kr, Phone as kt, WifiZero as l, lawnMowerActivityMeta, lightColors, linePoints, Laugh as ln, loadIconGlyphs, loadRemoteBundle, CircleDot as lr, Save as lt, lucideExportName, WashingMachine as m, makeScrubBridge, mapRootDetectorPlacements, matchesCombo, mergeSecretForSubmit, metadataEntries, metadataString, minuteFromPointer, House as mn, mountAddonPage, mountPath, ChevronsDownUp as mr, RotateCcw as mt, ZoomIn as n, nextGridPosition, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, niceMax, niceRange, List as nn, nodeColorClass, nodeSoftBgClass, nodeTextColorClass, normalizeForSearch, normalizeLanguage, normalizeSelection, nounSpecFor, Clock as nr, ShieldAlert as nt, Workflow as o, occupancyFacets, occupancyLines, offListSelections, Leaf as on, openTopLayer, optionSearchText as optionSelectSearchText, CircleQuestionMark as or, orphanDeviceLabel, Search as ot, outsideBounds, 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, ImageOff as pn, ChevronsUpDown as pr, preferenceForQuantity, previousWindow, projectSubjectPath, providerIcons, RotateCw as pt, Smartphone as q, Cpu as qn, ArrowLeft as qr, Menu as qt, quantityStoredUnit, quantityUnitChoices, 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, ListChecks as rn, roiTooLarge, rootSourceState, routerBasename, Clapperboard 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, LayoutGrid as sn, snapMinute, sortRows, sortRowsByColumn, CirclePlus as sr, ScrollText as st, stackBuckets, stackSeries, stateAt, stateRow, stateStyle, statusIcons, statusLine, stepFieldDomId, stepHasModelForFormat, stepLocalFields, stepModelOptions, storedToPicked, stripDeviceParentPrefix, stripParentNamePrefix, subjectPathSampleFromBox, subjectPathSvgPoints, summarizeHubCandidates, swatchFillClass, swatchLineClass, ZoomOut as t, tabForSelector, themeToCss, themeToRootCss, timeInState, LoaderCircle as tn, toStationaryOverlayBox, toggleDataTableFacet, toggleDataTableGroupFacet, togglePickerDevice, togglePickerKey, CloudFog as tr, trainingRefusalText, translateAddonKey, trpc, ShieldCheck as tt, typeLabel, typedToStored, WifiOff as u, Info as un, unitAxes, CircleCheck as ur, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAccountUnitPreferences, useActionSourceListActions, useActionSourceRunAction, useActionSourceStopAction, useActionsCreate, useActionsDelete, useActionsGet, useActionsGetLinks, useActionsGetTraces, useActionsList, useActionsListForCamera, useActionsRun, useActionsSetLinks, useActionsStop, useActionsUpdate, useAddonPagesListPages, useAddonSettingsGetDeclaredSettingsKeys, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationFormSchema, useAddonSettingsGetIntegrationSettings, useAddonSettingsUnsetStoredSettingsKeys, 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, useBrokerPickerSlot, 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, useDeviceProviderClassifyDiscoveryHits, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryModes, 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, useDiscoveredOptions, 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, useLocalNetworkGetScanSubnets, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkRemoveCustomAddress, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkScanNetwork, useLocalNetworkSetAddressRole, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetScanSubnets, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLocalNetworkUseStoredUploadedCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useLockDoorSensor, 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, usePlatformProbeGetCapabilities, usePlatformProbeGetHardware, usePlatformProbeRescanAccelerators, usePlatformProbeResolveHwAccel, usePlatformProbeResolveInferenceConfig, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePowerSourceForceRestart, usePowerSourceGetStatus, usePowerSourcePowerOff, usePowerSourcePowerOn, 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, useRemoteLayoutComponentsListComponents, useRemoteListCommands, useRemoteSendCommand, useRemoteSendMediaCommand, useRemoteSetConfig, useRoleDisplayDefaults, useRunningStateGetStatus, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useSchedulersConflicts, useSchedulersCreate, useSchedulersDelete, useSchedulersGet, useSchedulersGetStatus, useSchedulersGetTraces, useSchedulersList, useSchedulersPreview, useSchedulersSetEnabled, useSchedulersUpdate, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useSearchFieldHotkey, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetLaunchOverrides, useServerManagementGetServerPackageStatus, useServerManagementInstallDesktopUpdate, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useServerManagementSetLaunchOverrides, 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, useUserManagementGetAdminBootstrapStatus, 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, HardDrive as vn, ChevronDown as vr, Radar as vt, Undo2 as w, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint, withHiddenChart, withPanel, withResolvedParentDetail, withUseRootModel, withoutModelScopedFields, withoutPanel, Gauge as wn, Camera as wr, writeStoredGroupBy, Plus as wt, UserCheck as x, GripHorizontal as xn, Cat as xr, Power as xt, Users as y, Hand as yn, Check as yr, QrCode$1 as yt, Sunrise as z, Droplets as zn, BatteryLow as zr, MoveHorizontal as zt };
|
|
73752
|
+
export { Ship as $, CloudSnow as $n, Activity as $r, Lock as $t, Trash2 as A, AddProviderEntryDialog, AddonGlobalSettingsForm, AdminLinkQuickAction, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, FlashlightOff as An, AppShell, Bot as Ar, ArcKnob, Phone as At, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutomationHeroCard, AutomationInlineControl, AutotrackSection, Sunrise 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, Droplets as Bn, BottomSheet, BatteryLow as Br, Breadcrumb, BrightnessPanel, BrokerPickerSlotProvider, MoveHorizontal 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, Grid2x2 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, Cast as Cr, PowerOff 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, DisclosureChevron, DiscoveryPanel, DisplayPaletteProvider, Funnel as Dn, DoorbellRecentPanel, Bus as Dr, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, Plane as Dt, DummyHeroCard, DummyInline, Truck as E, EMPTY_DATA_TABLE_FILTER, EMPTY_HISTORY_PANELS, EVENT_KIND_ICONS, EmptyState, Gamepad2 as En, EndpointResultsCard, EndpointTestCard, EntryJsonSchemaForm, Cable as Er, ErrorBox, Play 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, FileInput, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, Eye as Fn, FormField$1 as FormField, Bell as Fr, Network as Ft, Sprout as G, GAP_INTERVAL_FACTOR, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GateBadge, GateControl, Dog as Gn, ArrowUp as Gr, GripTrack, GroupedModelSelector, GroupedTilePicker, Minimize2 as Gt, SunMedium 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, Download as Hn, HotkeyProvider, HotkeyScope, HoverZoomImage, Bath as Hr, Moon as Ht, HubSessionTestCard, HumidifierHeroCard, HumidifierInlineControl, TimerOff as I, INPUT_COMPACT, INPUT_SHELL, IconAction, IconButton, IconPicker, ImageHeroCard, ImageInlineControl, ImageSelector, EyeOff as In, InferenceConfigSelector, Input, BellRing as Ir, Navigation as It, ItemFormDialog, Smartphone as J, Cpu as Jn, ArrowLeft as Jr, Menu as Jt, Sparkles as K, KebabMenu, KeyValueList, Database as Kn, ArrowUpToLine as Kr, Mic as Kt, Thermometer as L, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LayeredSettingsForm, LightHeroCard, LightInlineControl, ExternalLink as Ln, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, Battery as Lr, Music as Lt, Tractor as M, MEDIA_GRID, MINUTES_PER_DAY, MODE_COLOR, MaskShapeCanvas, MediaCard, MediaGrid, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, Film as Mn, MobileDrawer, ModelPicker, MotionZonesSettings, Blinds as Mr, PawPrint as Mt, ToggleRight as N, NAVIGATION_DRIVE_INTERVAL_MS, NODE_COLOR_IDS, NatResultCard, NavigationPanel, NetworkLinkBadge, Feather as Nn, NodeMultiSelectField, NodePicker, NodeSelectField, NotificationTargetSelectField, NotificationTargetsField, Bird as Nr, Pause as Nt, TrendingDown as O, OCCUPANCY_KEY, OPTION_SELECT_SEARCH_MIN_OPTIONS, OfflineBadge, Footprints as On, OptionSelect, Bug as Or, Pipette 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, Fan as Pn, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, Bike as Pr, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, ProviderEntryPills, Package as Pt, PtzPanel, Siren as Q, CloudSun as Qn, AirVent as Qr, QrCode, Mail as Qt, QuantityValueInput, Target as R, RECONNECT_POLICY, RECORDED_PLAYBACK_MODES, RESOLUTION_BUCKET_MS, RIGHT, ROI_AREA_WARN_FRACTION, ROLE_DESCRIPTOR, ROOT_DETECTOR_STEP_ID, RadialGauge, Radio, RecordEntriesPanel, RecordedPlaybackProvider, RecordingPanel, ResponseLog, RetrainReviewBadge, Eraser as Rn, RoleDisplayDefaultsFromServer, RoleDisplayDefaultsProvider, RoleNodePill, RootModelSourceControl, RootSuppliedModelNote, BatteryWarning as Rr, Move 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, Slider, GripHorizontal as Sn, SnapshotButton, SortHeaderButton, Sparkline, Cat as Sr, Power 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, Textarea, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimeSeriesChart, TimelineSlider, TimezoneSelector, Gauge as Tn, Tooltip, TooltipContent, TooltipTrigger, Camera as Tr, TrainingBaseModelPicker, TrainingCollectionPicker, Plus as Tt, Star as U, UNIT_PREFERENCES_NAMESPACE, UiTextProvider, UiTrans, DoorOpen as Un, UnitPicker, UnitPreferencesFromServer, UnitPreferencesProvider, Ban as Ur, MonitorPlay as Ut, Sun as V, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, ViewSwitch, Droplet as Vn, VodPlaybackProvider, BatteryFull as Vr, MousePointerClick as Vt, Square as W, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, DoorClosed as Wn, Baby as Wr, Minus as Wt, SkipForward as X, Cog as Xn, ArrowDownToLine as Xr, Maximize2 as Xt, SlidersHorizontal as Y, Copy as Yn, ArrowDown as Yr, Megaphone as Yt, SkipBack as Z, Cloud as Zn, ZoneEditingProvider, AlarmSmoke as Zr, MapPin as Zt, Vibrate as _, Heater as _n, ChevronRight as _r, Radio$1 as _t, Wrench as a, acceleratorLabel, acceleratorShortLabel, agentColumnKey, alignSeries, allDeviceTypeFilterOptions, Link2 as an, anchorNow, applyFleetQueryDefaults, applyPickerFilters, CircleX as ar, ariaSortForColumn, assignNodeColorId, Settings as at, axisTicks, User as b, badgeFor, binaryBatteryIsLow, bindsToModel, Hand as bn, booleanLabels, boundsInPicked, Check as br, QrCode$1 as bt, bucketTotals, buildColorByNodeId, buildDataRecordRows, buildPeerConnectionConfig, buildStepTreeFromSchema, buildSubjectPath, buildTimeSeriesModel, Wifi as c, catalogHasDraft, chartKeys, chartSeriesStyle, childEntityId, childListName, chipOverflow, chunk, clampMinute, classifyAddressScope, classifyCapability, classifySessionVerdict, clearPickerGroup, clusterRootModelIds, cn, colorIdForNode, columnsForContext, compareSrflxMappings, computePageButtons, consumableItemLevel, consumableLevelBarClass, consumableLevelLabel, consumableLevelVariant, containerChildToRef, countableDevices, coverHighlight, coverageLine, CirclePlus as cr, createAddonI18n, createSharedContext, createTheme, ScrollText 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, Info as dn, dockBox, CircleCheck as dr, draftFromQuery, Sailboat as dt, effectivePageSize, emptyDevicesWidens, emptySessionRun, LockOpen as en, encodeCustomWindow, encodeSeriesRef, energyBuckets, ensureMfHostInit, CloudRain as er, Shield as et, eventKindLabel, WifiHigh as f, filterDataTableRows, filterDeviceOptions, filterOccupancyLines, filterOptions as filterOptionSelectOptions, filterPickerDevices, finalizeSessionRun, findTimezone, flattenPickerGrouping, flattenPickerRows, fleetViewOf, Inbox as fn, foldDeviceName, formatChartBytes, formatChartNumber, formatChartValue, formatControlDateTime, formatDeviceName, formatLastSeen, formatNumeric, formatSettingValue, formatSpan, formatTimeLabel, CircleCheckBig as fr, freezeVerdict, Router as ft, fuzzyMatch, Volume2 as g, gapThresholdMs, getClassColor, getPhaseVisual, History as gn, ChevronUp as gr, groupAgentColumns, groupChildrenByLayout, groupDeviceSeries, groupPickerDevices, groupPickerDevicesBy, RefreshCw as gt, VolumeX as h, hardwareLabel, historyPageHref, House as hn, ChevronsDownUp as hr, RotateCcw as ht, hubOrigin, hubPath, hubUrl, hubWsUrl, humanDuration, humanizeName, humidifierTint, X as i, iconGlyphsFailed, iconGlyphsLoaded, ListChecks as in, indexDeviceNames, initialScrubState, insertAtSelection, Clapperboard as ir, isAbsentProvider, isByteUnit, isConsumableLevelField, isDataTableFilterActive, isDeviceNameStock, isDrawableSubjectPath, isFieldVisible, isGroupExpanded, isHistoryWindowId, isKeychainFieldValue, isModelScopedField, isPickableUnit, isRedactedSecret, isRefusal, isSecretField, isValueField, Share2 as it, TrainFront as j, Flame as jn, Bone as jr, Pencil as jt, TrendingUp as k, Flashlight as kn, Box as kr, Pin as kt, WifiZero as l, lawnMowerActivityMeta, lightColors, linePoints, LayoutGrid as ln, loadIconGlyphs, loadRemoteBundle, CirclePause as lr, Scan as lt, lucideExportName, WashingMachine as m, makeScrubBridge, mapRootDetectorPlacements, matchesCombo, mergeSecretForSubmit, metadataEntries, metadataString, minuteFromPointer, ImageOff as mn, mountAddonPage, mountPath, ChevronsUpDown as mr, RotateCw as mt, ZoomIn as n, nextGridPosition, nextReconnectAction, nextSort, nextSortDirection, nextTableSort, niceMax, niceRange, LoaderCircle as nn, nodeColorClass, nodeSoftBgClass, nodeTextColorClass, normalizeForSearch, normalizeLanguage, normalizeSelection, nounSpecFor, CloudFog as nr, ShieldCheck as nt, Workflow as o, occupancyFacets, occupancyLines, offListSelections, Lightbulb as on, openTopLayer, optionSearchText as optionSelectSearchText, CircleStop as or, orphanDeviceLabel, Server as ot, outsideBounds, 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, Image as pn, CircleAlert as pr, preferenceForQuantity, previousWindow, projectSubjectPath, providerIcons, Route as pt, Snowflake as q, Crosshair as qn, ArrowRight as qr, MessageSquare as qt, quantityStoredUnit, quantityUnitChoices, 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, List as rn, roiTooLarge, rootSourceState, routerBasename, Clock as rr, ShieldAlert 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, Leaf as sn, snapMinute, sortRows, sortRowsByColumn, CircleQuestionMark as sr, Search as st, stackBuckets, stackSeries, stateAt, stateRow, stateStyle, statusIcons, statusLine, stepFieldDomId, stepHasModelForFormat, stepLocalFields, stepModelOptions, storedToPicked, stripDeviceParentPrefix, stripParentNamePrefix, subjectPathSampleFromBox, subjectPathSvgPoints, summarizeHubCandidates, swatchFillClass, swatchLineClass, ZoomOut as t, tabForSelector, themeToCss, themeToRootCss, timeInState, LocateFixed as tn, toStationaryOverlayBox, toggleDataTableFacet, toggleDataTableGroupFacet, togglePickerDevice, togglePickerKey, CloudLightning as tr, trainingRefusalText, translateAddonKey, trpc, ShieldOff as tt, typeLabel, typedToStored, WifiOff as u, Laugh as un, unitAxes, CircleDot as ur, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAccountUnitPreferences, useActionSourceListActions, useActionSourceRunAction, useActionSourceStopAction, useActionsCreate, useActionsDelete, useActionsGet, useActionsGetLinks, useActionsGetTraces, useActionsList, useActionsListForCamera, useActionsRun, useActionsSetLinks, useActionsStop, useActionsUpdate, useAddonPagesListPages, useAddonSettingsGetDeclaredSettingsKeys, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsGetIntegrationFormSchema, useAddonSettingsGetIntegrationSettings, useAddonSettingsUnsetStoredSettingsKeys, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonT, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetPackageDocs, useAddonsGetVersions, useAddonsInstallPackage, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListInstallations, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, 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, useBrokerPickerSlot, 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, useDeviceProviderClassifyDiscoveryHits, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryModes, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderReloadDevice, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceQuickDetailOpen, useDeviceRunsGetCurrentRun, useDeviceRunsGetRun, useDeviceRunsListRuns, useDeviceSeriesList, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateClaimFields, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetNativeCapSlice, useDeviceStateGetSnapshot, useDeviceStateListClaims, useDeviceStatePatchOwnedFields, useDeviceStateReleaseClaim, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDiscoveredOptions, 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, useFanPresetsApplyPreset, useFanPresetsCapturePreset, useFanPresetsGetPresets, useFanPresetsSetPresets, 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, useLocalNetworkGetScanSubnets, useLocalNetworkGetTlsStatus, useLocalNetworkGetViewerEndpoints, useLocalNetworkList, useLocalNetworkRegenerateCertificate, useLocalNetworkRemoveCustomAddress, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkRevertToGeneratedCertificate, useLocalNetworkScanNetwork, useLocalNetworkSetAddressRole, useLocalNetworkSetAllowedAddresses, useLocalNetworkSetNotificationEndpoint, useLocalNetworkSetScanSubnets, useLocalNetworkSetViewerEndpoints, useLocalNetworkUploadCertificate, useLocalNetworkUseStoredUploadedCertificate, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useLockDoorSensor, 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, usePlatformProbeGetCapabilities, usePlatformProbeGetHardware, usePlatformProbeRescanAccelerators, usePlatformProbeResolveHwAccel, usePlatformProbeResolveInferenceConfig, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePowerSourceForceRestart, usePowerSourceGetStatus, usePowerSourcePowerOff, usePowerSourcePowerOn, 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, useRemoteLayoutComponentsListComponents, useRemoteListCommands, useRemoteSendCommand, useRemoteSendMediaCommand, useRemoteSetConfig, useRoleDisplayDefaults, useRunningStateGetStatus, useSceneMonitorCaptureReference, useSceneMonitorCreateScene, useSceneMonitorDeleteReference, useSceneMonitorDeleteScene, useSceneMonitorGetStatus, useSceneMonitorListScenes, useSceneMonitorListScenesBatch, useSceneMonitorRecheckNow, useSceneMonitorResetScene, useSceneMonitorUpdateScene, useSchedulersConflicts, useSchedulersCreate, useSchedulersDelete, useSchedulersGet, useSchedulersGetStatus, useSchedulersGetTraces, useSchedulersList, useSchedulersPreview, useSchedulersSetEnabled, useSchedulersUpdate, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useScrubController, useSearchFieldHotkey, useServerManagementApplyServerUpdate, useServerManagementCheckServerUpdate, useServerManagementGetLaunchOverrides, useServerManagementGetServerPackageStatus, useServerManagementInstallDesktopUpdate, useServerManagementRestartServer, useServerManagementRollbackServerUpdate, useServerManagementSetLaunchOverrides, 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, useTimedRunCancel, useTimedRunGetStatus, useTimedRunRunFor, 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, useUserManagementGetAdminBootstrapStatus, 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, Save as ut, UtensilsCrossed as v, vacuumStateMeta, validateScopes, valveStateMeta, variantLabel, Hash as vn, ChevronLeft as vr, RadioTower as vt, Undo2 as w, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint, withHiddenChart, withPanel, withResolvedParentDetail, withUseRootModel, withoutModelScopedFields, withoutPanel, GraduationCap as wn, Car as wr, writeStoredGroupBy, Plug as wt, UserCheck as x, Hammer as xn, ChartLine as xr, Puzzle as xt, Users as y, HardDrive as yn, ChevronDown as yr, Radar as yt, Tag as z, EllipsisVertical as zn, BatteryMedium as zr, MoveVertical as zt };
|