@camstack/ui-library 1.1.10 → 1.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7810,6 +7810,30 @@ var Activity = createLucideIcon("activity", [["path", {
7810
7810
  * This source code is licensed under the ISC license.
7811
7811
  * See the LICENSE file in the root directory of this source tree.
7812
7812
  */
7813
+ var AirVent = createLucideIcon("air-vent", [
7814
+ ["path", {
7815
+ d: "M18 17.5a2.5 2.5 0 1 1-4 2.03V12",
7816
+ key: "yd12zl"
7817
+ }],
7818
+ ["path", {
7819
+ d: "M6 12H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2",
7820
+ key: "larmp2"
7821
+ }],
7822
+ ["path", {
7823
+ d: "M6 8h12",
7824
+ key: "6g4wlu"
7825
+ }],
7826
+ ["path", {
7827
+ d: "M6.6 15.572A2 2 0 1 0 10 17v-5",
7828
+ key: "1x1kqn"
7829
+ }]
7830
+ ]);
7831
+ /**
7832
+ * @license lucide-react v0.576.0 - ISC
7833
+ *
7834
+ * This source code is licensed under the ISC license.
7835
+ * See the LICENSE file in the root directory of this source tree.
7836
+ */
7813
7837
  var AlarmSmoke = createLucideIcon("alarm-smoke", [
7814
7838
  ["path", {
7815
7839
  d: "M11 21c0-2.5 2-2.5 2-5",
@@ -7930,6 +7954,21 @@ var ArrowUp = createLucideIcon("arrow-up", [["path", {
7930
7954
  * This source code is licensed under the ISC license.
7931
7955
  * See the LICENSE file in the root directory of this source tree.
7932
7956
  */
7957
+ var Ban = createLucideIcon("ban", [["circle", {
7958
+ cx: "12",
7959
+ cy: "12",
7960
+ r: "10",
7961
+ key: "1mglay"
7962
+ }], ["path", {
7963
+ d: "M4.929 4.929 19.07 19.071",
7964
+ key: "196cmz"
7965
+ }]]);
7966
+ /**
7967
+ * @license lucide-react v0.576.0 - ISC
7968
+ *
7969
+ * This source code is licensed under the ISC license.
7970
+ * See the LICENSE file in the root directory of this source tree.
7971
+ */
7933
7972
  var Bath = createLucideIcon("bath", [
7934
7973
  ["path", {
7935
7974
  d: "M10 4 8 6",
@@ -9084,6 +9123,26 @@ var Fan = createLucideIcon("fan", [["path", {
9084
9123
  * This source code is licensed under the ISC license.
9085
9124
  * See the LICENSE file in the root directory of this source tree.
9086
9125
  */
9126
+ var Feather = createLucideIcon("feather", [
9127
+ ["path", {
9128
+ d: "M12.67 19a2 2 0 0 0 1.416-.588l6.154-6.172a6 6 0 0 0-8.49-8.49L5.586 9.914A2 2 0 0 0 5 11.328V18a1 1 0 0 0 1 1z",
9129
+ key: "18jl4k"
9130
+ }],
9131
+ ["path", {
9132
+ d: "M16 8 2 22",
9133
+ key: "vp34q"
9134
+ }],
9135
+ ["path", {
9136
+ d: "M17.5 15H9",
9137
+ key: "1oz8nu"
9138
+ }]
9139
+ ]);
9140
+ /**
9141
+ * @license lucide-react v0.576.0 - ISC
9142
+ *
9143
+ * This source code is licensed under the ISC license.
9144
+ * See the LICENSE file in the root directory of this source tree.
9145
+ */
9087
9146
  var Film = createLucideIcon("film", [
9088
9147
  ["rect", {
9089
9148
  width: "18",
@@ -9525,6 +9584,19 @@ var LayoutGrid = createLucideIcon("layout-grid", [
9525
9584
  * This source code is licensed under the ISC license.
9526
9585
  * See the LICENSE file in the root directory of this source tree.
9527
9586
  */
9587
+ var Leaf = createLucideIcon("leaf", [["path", {
9588
+ d: "M11 20A7 7 0 0 1 9.8 6.1C15.5 5 17 4.48 19 2c1 2 2 4.18 2 8 0 5.5-4.78 10-10 10Z",
9589
+ key: "nnexq3"
9590
+ }], ["path", {
9591
+ d: "M2 21c0-3 1.85-5.36 5.08-6C9.5 14.52 12 13 13 12",
9592
+ key: "mt58a7"
9593
+ }]]);
9594
+ /**
9595
+ * @license lucide-react v0.576.0 - ISC
9596
+ *
9597
+ * This source code is licensed under the ISC license.
9598
+ * See the LICENSE file in the root directory of this source tree.
9599
+ */
9528
9600
  var Lightbulb = createLucideIcon("lightbulb", [
9529
9601
  ["path", {
9530
9602
  d: "M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5",
@@ -9929,6 +10001,46 @@ var MousePointerClick = createLucideIcon("mouse-pointer-click", [
9929
10001
  * This source code is licensed under the ISC license.
9930
10002
  * See the LICENSE file in the root directory of this source tree.
9931
10003
  */
10004
+ var MoveHorizontal = createLucideIcon("move-horizontal", [
10005
+ ["path", {
10006
+ d: "m18 8 4 4-4 4",
10007
+ key: "1ak13k"
10008
+ }],
10009
+ ["path", {
10010
+ d: "M2 12h20",
10011
+ key: "9i4pu4"
10012
+ }],
10013
+ ["path", {
10014
+ d: "m6 8-4 4 4 4",
10015
+ key: "15zrgr"
10016
+ }]
10017
+ ]);
10018
+ /**
10019
+ * @license lucide-react v0.576.0 - ISC
10020
+ *
10021
+ * This source code is licensed under the ISC license.
10022
+ * See the LICENSE file in the root directory of this source tree.
10023
+ */
10024
+ var MoveVertical = createLucideIcon("move-vertical", [
10025
+ ["path", {
10026
+ d: "M12 2v20",
10027
+ key: "t6zp3m"
10028
+ }],
10029
+ ["path", {
10030
+ d: "m8 18 4 4 4-4",
10031
+ key: "bh5tu3"
10032
+ }],
10033
+ ["path", {
10034
+ d: "m8 6 4-4 4 4",
10035
+ key: "ybng9g"
10036
+ }]
10037
+ ]);
10038
+ /**
10039
+ * @license lucide-react v0.576.0 - ISC
10040
+ *
10041
+ * This source code is licensed under the ISC license.
10042
+ * See the LICENSE file in the root directory of this source tree.
10043
+ */
9932
10044
  var Move = createLucideIcon("move", [
9933
10045
  ["path", {
9934
10046
  d: "M12 2v20",
@@ -10760,6 +10872,88 @@ var Smartphone = createLucideIcon("smartphone", [["rect", {
10760
10872
  * This source code is licensed under the ISC license.
10761
10873
  * See the LICENSE file in the root directory of this source tree.
10762
10874
  */
10875
+ var Snowflake = createLucideIcon("snowflake", [
10876
+ ["path", {
10877
+ d: "m10 20-1.25-2.5L6 18",
10878
+ key: "18frcb"
10879
+ }],
10880
+ ["path", {
10881
+ d: "M10 4 8.75 6.5 6 6",
10882
+ key: "7mghy3"
10883
+ }],
10884
+ ["path", {
10885
+ d: "m14 20 1.25-2.5L18 18",
10886
+ key: "1chtki"
10887
+ }],
10888
+ ["path", {
10889
+ d: "m14 4 1.25 2.5L18 6",
10890
+ key: "1b4wsy"
10891
+ }],
10892
+ ["path", {
10893
+ d: "m17 21-3-6h-4",
10894
+ key: "15hhxa"
10895
+ }],
10896
+ ["path", {
10897
+ d: "m17 3-3 6 1.5 3",
10898
+ key: "11697g"
10899
+ }],
10900
+ ["path", {
10901
+ d: "M2 12h6.5L10 9",
10902
+ key: "kv9z4n"
10903
+ }],
10904
+ ["path", {
10905
+ d: "m20 10-1.5 2 1.5 2",
10906
+ key: "1swlpi"
10907
+ }],
10908
+ ["path", {
10909
+ d: "M22 12h-6.5L14 15",
10910
+ key: "1mxi28"
10911
+ }],
10912
+ ["path", {
10913
+ d: "m4 10 1.5 2L4 14",
10914
+ key: "k9enpj"
10915
+ }],
10916
+ ["path", {
10917
+ d: "m7 21 3-6-1.5-3",
10918
+ key: "j8hb9u"
10919
+ }],
10920
+ ["path", {
10921
+ d: "m7 3 3 6h4",
10922
+ key: "1otusx"
10923
+ }]
10924
+ ]);
10925
+ /**
10926
+ * @license lucide-react v0.576.0 - ISC
10927
+ *
10928
+ * This source code is licensed under the ISC license.
10929
+ * See the LICENSE file in the root directory of this source tree.
10930
+ */
10931
+ var Sparkles = createLucideIcon("sparkles", [
10932
+ ["path", {
10933
+ d: "M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",
10934
+ key: "1s2grr"
10935
+ }],
10936
+ ["path", {
10937
+ d: "M20 2v4",
10938
+ key: "1rf3ol"
10939
+ }],
10940
+ ["path", {
10941
+ d: "M22 4h-4",
10942
+ key: "gwowj6"
10943
+ }],
10944
+ ["circle", {
10945
+ cx: "4",
10946
+ cy: "20",
10947
+ r: "2",
10948
+ key: "6kqj1y"
10949
+ }]
10950
+ ]);
10951
+ /**
10952
+ * @license lucide-react v0.576.0 - ISC
10953
+ *
10954
+ * This source code is licensed under the ISC license.
10955
+ * See the LICENSE file in the root directory of this source tree.
10956
+ */
10763
10957
  var Sprout = createLucideIcon("sprout", [
10764
10958
  ["path", {
10765
10959
  d: "M14 9.536V7a4 4 0 0 1 4-4h1.5a.5.5 0 0 1 .5.5V5a4 4 0 0 1-4 4 4 4 0 0 0-4 4c0 2 1 3 1 5a5 5 0 0 1-1 3",
@@ -14565,6 +14759,10 @@ var DEVICE_TYPE_META = {
14565
14759
  icon: Thermometer,
14566
14760
  label: "Thermostat"
14567
14761
  },
14762
+ [DeviceType.Climate]: {
14763
+ icon: AirVent,
14764
+ label: "Air conditioner"
14765
+ },
14568
14766
  [DeviceType.Button]: {
14569
14767
  icon: CircleDot,
14570
14768
  label: "Button"
@@ -14916,6 +15114,7 @@ var PRIORITY = [
14916
15114
  "media-player",
14917
15115
  "alarm-panel",
14918
15116
  "thermostat",
15117
+ "climate",
14919
15118
  "humidifier",
14920
15119
  "water-heater",
14921
15120
  "lock",
@@ -17182,6 +17381,8 @@ var useDeviceManagerGetCreationSchema = trpc.deviceManager.getCreationSchema.use
17182
17381
  var useDeviceManagerCreateDevice = trpc.deviceManager.createDevice.useMutation;
17183
17382
  /** Generated alias around `trpc.deviceManager.testCreationField.useMutation`. */
17184
17383
  var useDeviceManagerTestCreationField = trpc.deviceManager.testCreationField.useMutation;
17384
+ /** Generated alias around `trpc.deviceManager.adoptionListCandidateFilters.useQuery`. */
17385
+ var useDeviceManagerAdoptionListCandidateFilters = trpc.deviceManager.adoptionListCandidateFilters.useQuery;
17185
17386
  /** Generated alias around `trpc.deviceManager.adoptionListCandidates.useQuery`. */
17186
17387
  var useDeviceManagerAdoptionListCandidates = trpc.deviceManager.adoptionListCandidates.useQuery;
17187
17388
  /** Generated alias around `trpc.deviceManager.adoptionRefresh.useMutation`. */
@@ -17192,6 +17393,16 @@ var useDeviceManagerAdoptionAdopt = trpc.deviceManager.adoptionAdopt.useMutation
17192
17393
  var useDeviceManagerAdoptionRelease = trpc.deviceManager.adoptionRelease.useMutation;
17193
17394
  /** Generated alias around `trpc.deviceManager.adoptionResync.useMutation`. */
17194
17395
  var useDeviceManagerAdoptionResync = trpc.deviceManager.adoptionResync.useMutation;
17396
+ /** Generated alias around `trpc.deviceManager.discoveryProviders.useQuery`. */
17397
+ var useDeviceManagerDiscoveryProviders = trpc.deviceManager.discoveryProviders.useQuery;
17398
+ /** Generated alias around `trpc.deviceManager.discoverAllProviders.useMutation`. */
17399
+ var useDeviceManagerDiscoverAllProviders = trpc.deviceManager.discoverAllProviders.useMutation;
17400
+ /** Generated alias around `trpc.deviceManager.discoverProvider.useMutation`. */
17401
+ var useDeviceManagerDiscoverProvider = trpc.deviceManager.discoverProvider.useMutation;
17402
+ /** Generated alias around `trpc.deviceManager.providerCreationType.useQuery`. */
17403
+ var useDeviceManagerProviderCreationType = trpc.deviceManager.providerCreationType.useQuery;
17404
+ /** Generated alias around `trpc.deviceManager.providerDiscoveryParamsSchema.useQuery`. */
17405
+ var useDeviceManagerProviderDiscoveryParamsSchema = trpc.deviceManager.providerDiscoveryParamsSchema.useQuery;
17195
17406
  /** Generated alias around `trpc.deviceManager.testField.useMutation`. */
17196
17407
  var useDeviceManagerTestField = trpc.deviceManager.testField.useMutation;
17197
17408
  /** Generated alias around `trpc.deviceManager.getDeviceStatusAggregate.useQuery`. */
@@ -17222,6 +17433,10 @@ var useDeviceProviderGetDevices = trpc.deviceProvider.getDevices.useQuery;
17222
17433
  var useDeviceProviderSupportsDiscovery = trpc.deviceProvider.supportsDiscovery.useQuery;
17223
17434
  /** Generated alias around `trpc.deviceProvider.discoverDevices.useMutation`. */
17224
17435
  var useDeviceProviderDiscoverDevices = trpc.deviceProvider.discoverDevices.useMutation;
17436
+ /** Generated alias around `trpc.deviceProvider.getDiscoveryParamsSchema.useQuery`. */
17437
+ var useDeviceProviderGetDiscoveryParamsSchema = trpc.deviceProvider.getDiscoveryParamsSchema.useQuery;
17438
+ /** Generated alias around `trpc.deviceProvider.getManualCreationType.useQuery`. */
17439
+ var useDeviceProviderGetManualCreationType = trpc.deviceProvider.getManualCreationType.useQuery;
17225
17440
  /** Generated alias around `trpc.deviceProvider.adoptDiscoveredDevice.useMutation`. */
17226
17441
  var useDeviceProviderAdoptDiscoveredDevice = trpc.deviceProvider.adoptDiscoveredDevice.useMutation;
17227
17442
  /** Generated alias around `trpc.deviceProvider.supportsManualCreation.useQuery`. */
@@ -18869,78 +19084,163 @@ function vacuumGraphicTint(state) {
18869
19084
  };
18870
19085
  }
18871
19086
  }
19087
+ var ROBOT_KEYFRAMES = `
19088
+ @keyframes rg-breathe { 0%,100%{opacity:.78;transform:scale(1)} 50%{opacity:1;transform:scale(1.05)} }
19089
+ @keyframes rg-zzz { 0%{opacity:0;transform:translateY(3px)} 30%{opacity:.85} 100%{opacity:0;transform:translateY(-9px)} }
19090
+ @keyframes rg-spark { 0%,100%{opacity:.25;transform:scale(.9)} 50%{opacity:1;transform:scale(1.1)} }
19091
+ @keyframes rg-pulse { 0%,100%{opacity:.35} 50%{opacity:.85} }
19092
+ @keyframes rg-blink { 0%,49%{opacity:1} 50%,100%{opacity:.3} }
19093
+ @keyframes rg-spin { to { transform:rotate(360deg) } }
19094
+ @media (prefers-reduced-motion: reduce) { .rg-a { animation: none !important; } }
19095
+ `;
18872
19096
  /**
18873
19097
  * VacuumGraphic — a framed, top-down robot-vacuum illustration in the SAME
18874
19098
  * visual style as the cover window (w-28 h-36 rounded bordered box, gradient
18875
- * bg, overflow-hidden, inset white shadow). State-tinted via `vacuumGraphicTint`.
19099
+ * bg, overflow-hidden, inset white shadow). State-tinted via `vacuumGraphicTint`
19100
+ * and state-ANIMATED: it breathes + emits "Zzz" when dormant on the dock, shows
19101
+ * a pulsing electricity bolt while charging, blinks on error, and keeps the
19102
+ * expanding activity ring + a spinning turret while cleaning / returning.
18876
19103
  * Decorative only (`aria-hidden`); the textual state label lives in the hero.
18877
19104
  */
18878
- function VacuumGraphic({ state }) {
19105
+ function VacuumGraphic({ state, batteryLevel }) {
18879
19106
  const tint = vacuumGraphicTint(state);
19107
+ const charging = tint.docked && batteryLevel != null && batteryLevel < 100;
19108
+ const sleeping = tint.docked && !charging;
19109
+ const erroring = state === "error";
19110
+ const bodyStyle = sleeping ? {
19111
+ animation: "rg-breathe 3.4s ease-in-out infinite",
19112
+ transformBox: "fill-box",
19113
+ transformOrigin: "center"
19114
+ } : erroring ? { animation: "rg-blink 1s steps(1) infinite" } : void 0;
18880
19115
  return /* @__PURE__ */ jsxs("div", {
18881
19116
  "aria-hidden": "true",
18882
19117
  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",
18883
19118
  style: { boxShadow: "inset 0 0 0 2px rgba(255,255,255,.06)" },
18884
- children: [/* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 transition-colors duration-300", tint.glow) }), /* @__PURE__ */ jsx("div", {
18885
- className: cn("absolute inset-0 flex items-center justify-center", tint.accent),
18886
- children: /* @__PURE__ */ jsxs("svg", {
18887
- viewBox: "0 0 100 100",
18888
- className: "w-20 h-20",
18889
- fill: "none",
18890
- children: [
18891
- tint.docked && /* @__PURE__ */ jsx("rect", {
18892
- x: "34",
18893
- y: "80",
18894
- width: "32",
18895
- height: "8",
18896
- rx: "2",
18897
- fill: "currentColor",
18898
- opacity: "0.35"
18899
- }),
18900
- tint.active && /* @__PURE__ */ jsx("circle", {
18901
- cx: "50",
18902
- cy: "50",
18903
- r: "44",
18904
- stroke: "currentColor",
18905
- strokeWidth: "2",
18906
- opacity: "0.4",
18907
- className: "animate-ping",
18908
- style: { transformOrigin: "center" }
18909
- }),
18910
- /* @__PURE__ */ jsx("circle", {
18911
- cx: "50",
18912
- cy: "50",
18913
- r: "34",
18914
- fill: "currentColor",
18915
- fillOpacity: "0.12",
18916
- stroke: "currentColor",
18917
- strokeWidth: "2.5"
18918
- }),
18919
- /* @__PURE__ */ jsx("path", {
18920
- d: "M 24 42 A 34 34 0 0 1 76 42",
18921
- stroke: "currentColor",
18922
- strokeWidth: "3",
18923
- opacity: "0.55",
18924
- strokeLinecap: "round"
18925
- }),
18926
- /* @__PURE__ */ jsx("circle", {
18927
- cx: "50",
18928
- cy: "50",
18929
- r: "9",
18930
- fill: "currentColor",
18931
- fillOpacity: "0.25",
18932
- stroke: "currentColor",
18933
- strokeWidth: "2"
18934
- }),
18935
- /* @__PURE__ */ jsx("circle", {
18936
- cx: "50",
18937
- cy: "50",
18938
- r: "3",
18939
- fill: "currentColor"
18940
- })
18941
- ]
19119
+ children: [
19120
+ /* @__PURE__ */ jsx("style", { children: ROBOT_KEYFRAMES }),
19121
+ /* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 transition-colors duration-300", tint.glow) }),
19122
+ /* @__PURE__ */ jsx("div", {
19123
+ className: cn("absolute inset-0 flex items-center justify-center", tint.accent),
19124
+ children: /* @__PURE__ */ jsxs("svg", {
19125
+ viewBox: "0 0 100 100",
19126
+ className: "w-20 h-20",
19127
+ fill: "none",
19128
+ children: [
19129
+ tint.docked && /* @__PURE__ */ jsx("rect", {
19130
+ x: "34",
19131
+ y: "80",
19132
+ width: "32",
19133
+ height: "8",
19134
+ rx: "2",
19135
+ fill: "currentColor",
19136
+ opacity: "0.35",
19137
+ className: cn(charging && "rg-a"),
19138
+ style: charging ? { animation: "rg-pulse 1.2s ease-in-out infinite" } : void 0
19139
+ }),
19140
+ tint.active && /* @__PURE__ */ jsx("circle", {
19141
+ cx: "50",
19142
+ cy: "50",
19143
+ r: "44",
19144
+ stroke: "currentColor",
19145
+ strokeWidth: "2",
19146
+ opacity: "0.4",
19147
+ className: "animate-ping",
19148
+ style: { transformOrigin: "center" }
19149
+ }),
19150
+ /* @__PURE__ */ jsxs("g", {
19151
+ className: cn((sleeping || erroring) && "rg-a"),
19152
+ style: bodyStyle,
19153
+ children: [
19154
+ /* @__PURE__ */ jsx("circle", {
19155
+ cx: "50",
19156
+ cy: "50",
19157
+ r: "34",
19158
+ fill: "currentColor",
19159
+ fillOpacity: "0.12",
19160
+ stroke: "currentColor",
19161
+ strokeWidth: "2.5"
19162
+ }),
19163
+ /* @__PURE__ */ jsx("path", {
19164
+ d: "M 24 42 A 34 34 0 0 1 76 42",
19165
+ stroke: "currentColor",
19166
+ strokeWidth: "3",
19167
+ opacity: "0.55",
19168
+ strokeLinecap: "round"
19169
+ }),
19170
+ /* @__PURE__ */ jsxs("g", {
19171
+ className: cn(tint.active && "rg-a"),
19172
+ style: tint.active ? {
19173
+ animation: "rg-spin 3s linear infinite",
19174
+ transformBox: "fill-box",
19175
+ transformOrigin: "center"
19176
+ } : void 0,
19177
+ children: [/* @__PURE__ */ jsx("circle", {
19178
+ cx: "50",
19179
+ cy: "50",
19180
+ r: "9",
19181
+ fill: "currentColor",
19182
+ fillOpacity: "0.25",
19183
+ stroke: "currentColor",
19184
+ strokeWidth: "2"
19185
+ }), /* @__PURE__ */ jsx("circle", {
19186
+ cx: "50",
19187
+ cy: "43",
19188
+ r: "2.4",
19189
+ fill: "currentColor"
19190
+ })]
19191
+ })
19192
+ ]
19193
+ }),
19194
+ sleeping && /* @__PURE__ */ jsxs("g", {
19195
+ fill: "currentColor",
19196
+ fontFamily: "sans-serif",
19197
+ fontWeight: "700",
19198
+ children: [
19199
+ /* @__PURE__ */ jsx("text", {
19200
+ x: "64",
19201
+ y: "30",
19202
+ fontSize: "13",
19203
+ opacity: "0.7",
19204
+ className: "rg-a",
19205
+ style: { animation: "rg-zzz 3.4s ease-in-out infinite" },
19206
+ children: "z"
19207
+ }),
19208
+ /* @__PURE__ */ jsx("text", {
19209
+ x: "73",
19210
+ y: "23",
19211
+ fontSize: "10",
19212
+ opacity: "0.6",
19213
+ className: "rg-a",
19214
+ style: { animation: "rg-zzz 3.4s ease-in-out .7s infinite" },
19215
+ children: "z"
19216
+ }),
19217
+ /* @__PURE__ */ jsx("text", {
19218
+ x: "80",
19219
+ y: "17",
19220
+ fontSize: "8",
19221
+ opacity: "0.5",
19222
+ className: "rg-a",
19223
+ style: { animation: "rg-zzz 3.4s ease-in-out 1.4s infinite" },
19224
+ children: "z"
19225
+ })
19226
+ ]
19227
+ }),
19228
+ charging && /* @__PURE__ */ jsx("path", {
19229
+ d: "M53 20 L44 40 L50 40 L46 56 L60 34 L53 34 Z",
19230
+ fill: "#fbbf24",
19231
+ stroke: "#f59e0b",
19232
+ strokeWidth: "1",
19233
+ className: "rg-a",
19234
+ style: {
19235
+ animation: "rg-spark 1s ease-in-out infinite",
19236
+ transformBox: "fill-box",
19237
+ transformOrigin: "center"
19238
+ }
19239
+ })
19240
+ ]
19241
+ })
18942
19242
  })
18943
- })]
19243
+ ]
18944
19244
  });
18945
19245
  }
18946
19246
  /** Battery % badge — shared between inline + hero. */
@@ -19119,7 +19419,7 @@ function VacuumInlineControl({ trpc, deviceId }) {
19119
19419
  /* @__PURE__ */ jsx(VacuumIconButton, {
19120
19420
  label: "Return to base",
19121
19421
  busy,
19122
- active: state === "returning",
19422
+ active: state === "returning" || state === "docked",
19123
19423
  onClick: () => press(cap.returnToBase),
19124
19424
  children: /* @__PURE__ */ jsx(House, { className: "h-3.5 w-3.5" })
19125
19425
  }),
@@ -19168,7 +19468,10 @@ function VacuumHeroCard({ trpc, deviceId }) {
19168
19468
  children: [
19169
19469
  /* @__PURE__ */ jsxs("div", {
19170
19470
  className: "flex items-center gap-6",
19171
- children: [/* @__PURE__ */ jsx(VacuumGraphic, { state }), /* @__PURE__ */ jsxs("div", {
19471
+ children: [/* @__PURE__ */ jsx(VacuumGraphic, {
19472
+ state,
19473
+ batteryLevel: slice?.batteryLevel ?? null
19474
+ }), /* @__PURE__ */ jsxs("div", {
19172
19475
  className: "flex flex-col gap-3 flex-1",
19173
19476
  children: [
19174
19477
  /* @__PURE__ */ jsxs("div", {
@@ -19222,7 +19525,7 @@ function VacuumHeroCard({ trpc, deviceId }) {
19222
19525
  /* @__PURE__ */ jsx(VacuumHeroButton, {
19223
19526
  label: "Return to base",
19224
19527
  busy,
19225
- active: state === "returning",
19528
+ active: state === "returning" || state === "docked",
19226
19529
  onClick: () => press(cap.returnToBase),
19227
19530
  children: /* @__PURE__ */ jsx(House, { className: "h-5 w-5" })
19228
19531
  }),
@@ -19355,112 +19658,206 @@ function lawnMowerGraphicTint(activity) {
19355
19658
  };
19356
19659
  }
19357
19660
  }
19661
+ var MOWER_KEYFRAMES = `
19662
+ @keyframes rg-breathe { 0%,100%{opacity:.78;transform:scale(1)} 50%{opacity:1;transform:scale(1.05)} }
19663
+ @keyframes rg-zzz { 0%{opacity:0;transform:translateY(3px)} 30%{opacity:.85} 100%{opacity:0;transform:translateY(-9px)} }
19664
+ @keyframes rg-spark { 0%,100%{opacity:.25;transform:scale(.9)} 50%{opacity:1;transform:scale(1.1)} }
19665
+ @keyframes rg-pulse { 0%,100%{opacity:.35} 50%{opacity:.85} }
19666
+ @keyframes rg-blink { 0%,49%{opacity:1} 50%,100%{opacity:.3} }
19667
+ @keyframes rg-spin { to { transform:rotate(360deg) } }
19668
+ @media (prefers-reduced-motion: reduce) { .rg-a { animation: none !important; } }
19669
+ `;
19358
19670
  /**
19359
19671
  * LawnMowerGraphic — a framed robot-lawn-mower illustration in the SAME visual
19360
19672
  * style as the cover window (w-28 h-36 rounded bordered box, gradient bg,
19361
19673
  * overflow-hidden, inset white shadow), over a grass-green gradient. Tinted by
19362
- * `lawnMowerGraphicTint`. Decorative only (`aria-hidden`).
19674
+ * `lawnMowerGraphicTint` and state-ANIMATED: it breathes + emits "Zzz" when
19675
+ * dormant on the dock, shows a pulsing electricity bolt while charging, blinks
19676
+ * on error, and spins its cutting deck + streams clippings while mowing.
19677
+ * Decorative only (`aria-hidden`).
19363
19678
  */
19364
- function LawnMowerGraphic({ activity }) {
19679
+ function LawnMowerGraphic({ activity, batteryLevel }) {
19365
19680
  const tint = lawnMowerGraphicTint(activity);
19681
+ const charging = tint.docked && batteryLevel != null && batteryLevel < 100;
19682
+ const sleeping = tint.docked && !charging;
19683
+ const erroring = activity === "error";
19684
+ const bodyStyle = sleeping ? {
19685
+ animation: "rg-breathe 3.4s ease-in-out infinite",
19686
+ transformBox: "fill-box",
19687
+ transformOrigin: "center"
19688
+ } : erroring ? { animation: "rg-blink 1s steps(1) infinite" } : void 0;
19366
19689
  return /* @__PURE__ */ jsxs("div", {
19367
19690
  "aria-hidden": "true",
19368
19691
  className: "relative w-28 h-36 rounded border-2 border-border bg-gradient-to-b from-emerald-700/40 to-emerald-900/30 overflow-hidden flex-shrink-0",
19369
19692
  style: { boxShadow: "inset 0 0 0 2px rgba(255,255,255,.06)" },
19370
- children: [/* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 transition-colors duration-300", tint.glow) }), /* @__PURE__ */ jsx("div", {
19371
- className: cn("absolute inset-0 flex items-center justify-center", tint.accent),
19372
- children: /* @__PURE__ */ jsxs("svg", {
19373
- viewBox: "0 0 100 100",
19374
- className: "w-20 h-20",
19375
- fill: "none",
19376
- children: [
19377
- tint.docked && /* @__PURE__ */ jsx("rect", {
19378
- x: "30",
19379
- y: "78",
19380
- width: "40",
19381
- height: "9",
19382
- rx: "2",
19383
- fill: "currentColor",
19384
- opacity: "0.35"
19385
- }),
19386
- tint.active && /* @__PURE__ */ jsxs("g", {
19387
- stroke: "currentColor",
19388
- strokeWidth: "2.5",
19389
- strokeLinecap: "round",
19390
- opacity: "0.5",
19391
- children: [
19392
- /* @__PURE__ */ jsx("line", {
19393
- x1: "18",
19394
- y1: "36",
19395
- x2: "10",
19396
- y2: "36",
19397
- className: "animate-pulse"
19398
- }),
19399
- /* @__PURE__ */ jsx("line", {
19400
- x1: "18",
19401
- y1: "50",
19402
- x2: "6",
19403
- y2: "50",
19404
- className: "animate-pulse"
19405
- }),
19406
- /* @__PURE__ */ jsx("line", {
19407
- x1: "18",
19408
- y1: "64",
19409
- x2: "10",
19410
- y2: "64",
19411
- className: "animate-pulse"
19412
- })
19413
- ]
19414
- }),
19415
- /* @__PURE__ */ jsx("rect", {
19416
- x: "28",
19417
- y: "34",
19418
- width: "44",
19419
- height: "34",
19420
- rx: "8",
19421
- fill: "currentColor",
19422
- fillOpacity: "0.14",
19423
- stroke: "currentColor",
19424
- strokeWidth: "2.5"
19425
- }),
19426
- /* @__PURE__ */ jsx("line", {
19427
- x1: "34",
19428
- y1: "60",
19429
- x2: "66",
19430
- y2: "60",
19431
- stroke: "currentColor",
19432
- strokeWidth: "2",
19433
- opacity: "0.5"
19434
- }),
19435
- /* @__PURE__ */ jsx("circle", {
19436
- cx: "50",
19437
- cy: "48",
19438
- r: "5",
19439
- stroke: "currentColor",
19440
- strokeWidth: "2",
19441
- opacity: "0.6"
19442
- }),
19443
- /* @__PURE__ */ jsx("circle", {
19444
- cx: "34",
19445
- cy: "68",
19446
- r: "6",
19447
- fill: "currentColor",
19448
- fillOpacity: "0.3",
19449
- stroke: "currentColor",
19450
- strokeWidth: "2"
19451
- }),
19452
- /* @__PURE__ */ jsx("circle", {
19453
- cx: "66",
19454
- cy: "68",
19455
- r: "6",
19456
- fill: "currentColor",
19457
- fillOpacity: "0.3",
19458
- stroke: "currentColor",
19459
- strokeWidth: "2"
19460
- })
19461
- ]
19693
+ children: [
19694
+ /* @__PURE__ */ jsx("style", { children: MOWER_KEYFRAMES }),
19695
+ /* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 transition-colors duration-300", tint.glow) }),
19696
+ /* @__PURE__ */ jsx("div", {
19697
+ className: cn("absolute inset-0 flex items-center justify-center", tint.accent),
19698
+ children: /* @__PURE__ */ jsxs("svg", {
19699
+ viewBox: "0 0 100 100",
19700
+ className: "w-20 h-20",
19701
+ fill: "none",
19702
+ children: [
19703
+ tint.docked && /* @__PURE__ */ jsx("rect", {
19704
+ x: "30",
19705
+ y: "78",
19706
+ width: "40",
19707
+ height: "9",
19708
+ rx: "2",
19709
+ fill: "currentColor",
19710
+ opacity: "0.35",
19711
+ className: cn(charging && "rg-a"),
19712
+ style: charging ? { animation: "rg-pulse 1.2s ease-in-out infinite" } : void 0
19713
+ }),
19714
+ tint.active && /* @__PURE__ */ jsxs("g", {
19715
+ stroke: "currentColor",
19716
+ strokeWidth: "2.5",
19717
+ strokeLinecap: "round",
19718
+ opacity: "0.5",
19719
+ children: [
19720
+ /* @__PURE__ */ jsx("line", {
19721
+ x1: "18",
19722
+ y1: "36",
19723
+ x2: "10",
19724
+ y2: "36",
19725
+ className: "animate-pulse"
19726
+ }),
19727
+ /* @__PURE__ */ jsx("line", {
19728
+ x1: "18",
19729
+ y1: "50",
19730
+ x2: "6",
19731
+ y2: "50",
19732
+ className: "animate-pulse"
19733
+ }),
19734
+ /* @__PURE__ */ jsx("line", {
19735
+ x1: "18",
19736
+ y1: "64",
19737
+ x2: "10",
19738
+ y2: "64",
19739
+ className: "animate-pulse"
19740
+ })
19741
+ ]
19742
+ }),
19743
+ /* @__PURE__ */ jsxs("g", {
19744
+ className: cn((sleeping || erroring) && "rg-a"),
19745
+ style: bodyStyle,
19746
+ children: [
19747
+ /* @__PURE__ */ jsx("rect", {
19748
+ x: "28",
19749
+ y: "34",
19750
+ width: "44",
19751
+ height: "34",
19752
+ rx: "8",
19753
+ fill: "currentColor",
19754
+ fillOpacity: "0.14",
19755
+ stroke: "currentColor",
19756
+ strokeWidth: "2.5"
19757
+ }),
19758
+ /* @__PURE__ */ jsx("line", {
19759
+ x1: "34",
19760
+ y1: "60",
19761
+ x2: "66",
19762
+ y2: "60",
19763
+ stroke: "currentColor",
19764
+ strokeWidth: "2",
19765
+ opacity: "0.5"
19766
+ }),
19767
+ /* @__PURE__ */ jsxs("g", {
19768
+ className: cn(tint.active && "rg-a"),
19769
+ style: tint.active ? {
19770
+ animation: "rg-spin 0.9s linear infinite",
19771
+ transformBox: "fill-box",
19772
+ transformOrigin: "center"
19773
+ } : void 0,
19774
+ children: [/* @__PURE__ */ jsx("circle", {
19775
+ cx: "50",
19776
+ cy: "48",
19777
+ r: "5",
19778
+ stroke: "currentColor",
19779
+ strokeWidth: "2",
19780
+ opacity: "0.6"
19781
+ }), /* @__PURE__ */ jsx("line", {
19782
+ x1: "45",
19783
+ y1: "48",
19784
+ x2: "55",
19785
+ y2: "48",
19786
+ stroke: "currentColor",
19787
+ strokeWidth: "2",
19788
+ opacity: "0.7"
19789
+ })]
19790
+ }),
19791
+ /* @__PURE__ */ jsx("circle", {
19792
+ cx: "34",
19793
+ cy: "68",
19794
+ r: "6",
19795
+ fill: "currentColor",
19796
+ fillOpacity: "0.3",
19797
+ stroke: "currentColor",
19798
+ strokeWidth: "2"
19799
+ }),
19800
+ /* @__PURE__ */ jsx("circle", {
19801
+ cx: "66",
19802
+ cy: "68",
19803
+ r: "6",
19804
+ fill: "currentColor",
19805
+ fillOpacity: "0.3",
19806
+ stroke: "currentColor",
19807
+ strokeWidth: "2"
19808
+ })
19809
+ ]
19810
+ }),
19811
+ sleeping && /* @__PURE__ */ jsxs("g", {
19812
+ fill: "currentColor",
19813
+ fontFamily: "sans-serif",
19814
+ fontWeight: "700",
19815
+ children: [
19816
+ /* @__PURE__ */ jsx("text", {
19817
+ x: "64",
19818
+ y: "30",
19819
+ fontSize: "13",
19820
+ opacity: "0.7",
19821
+ className: "rg-a",
19822
+ style: { animation: "rg-zzz 3.4s ease-in-out infinite" },
19823
+ children: "z"
19824
+ }),
19825
+ /* @__PURE__ */ jsx("text", {
19826
+ x: "73",
19827
+ y: "23",
19828
+ fontSize: "10",
19829
+ opacity: "0.6",
19830
+ className: "rg-a",
19831
+ style: { animation: "rg-zzz 3.4s ease-in-out .7s infinite" },
19832
+ children: "z"
19833
+ }),
19834
+ /* @__PURE__ */ jsx("text", {
19835
+ x: "80",
19836
+ y: "17",
19837
+ fontSize: "8",
19838
+ opacity: "0.5",
19839
+ className: "rg-a",
19840
+ style: { animation: "rg-zzz 3.4s ease-in-out 1.4s infinite" },
19841
+ children: "z"
19842
+ })
19843
+ ]
19844
+ }),
19845
+ charging && /* @__PURE__ */ jsx("path", {
19846
+ d: "M53 20 L44 40 L50 40 L46 56 L60 34 L53 34 Z",
19847
+ fill: "#fbbf24",
19848
+ stroke: "#f59e0b",
19849
+ strokeWidth: "1",
19850
+ className: "rg-a",
19851
+ style: {
19852
+ animation: "rg-spark 1s ease-in-out infinite",
19853
+ transformBox: "fill-box",
19854
+ transformOrigin: "center"
19855
+ }
19856
+ })
19857
+ ]
19858
+ })
19462
19859
  })
19463
- })]
19860
+ ]
19464
19861
  });
19465
19862
  }
19466
19863
  /** Tailwind text tone for a device-code severity. */
@@ -19595,7 +19992,10 @@ function LawnMowerHeroCard({ trpc, deviceId }) {
19595
19992
  className: "flex flex-col items-stretch gap-4 rounded-lg border border-border bg-surface p-4",
19596
19993
  children: /* @__PURE__ */ jsxs("div", {
19597
19994
  className: "flex items-center gap-6",
19598
- children: [/* @__PURE__ */ jsx(LawnMowerGraphic, { activity }), /* @__PURE__ */ jsxs("div", {
19995
+ children: [/* @__PURE__ */ jsx(LawnMowerGraphic, {
19996
+ activity,
19997
+ batteryLevel: slice?.batteryLevel ?? null
19998
+ }), /* @__PURE__ */ jsxs("div", {
19599
19999
  className: "flex flex-col gap-3 flex-1",
19600
20000
  children: [
19601
20001
  /* @__PURE__ */ jsxs("div", {
@@ -22171,6 +22571,561 @@ function ClimatePanel({ trpc, deviceId, features: _features, layout, optimistic
22171
22571
  });
22172
22572
  }
22173
22573
  //#endregion
22574
+ //#region src/composites/device-controls/ac-panel.tsx
22575
+ /** AC-appropriate short mode labels. Exhaustive over HvacMode. */
22576
+ var MODE_LABEL = {
22577
+ cool: "Cool",
22578
+ heat: "Heat",
22579
+ auto: "Auto",
22580
+ heat_cool: "Heat·Cool",
22581
+ fan_only: "Fan",
22582
+ dry: "Dry",
22583
+ off: "Off"
22584
+ };
22585
+ /** Per-mode icon (lucide). Exhaustive over HvacMode. */
22586
+ var MODE_ICON = {
22587
+ cool: Snowflake,
22588
+ heat: Flame,
22589
+ auto: Sparkles,
22590
+ heat_cool: Thermometer,
22591
+ fan_only: Fan,
22592
+ dry: Droplets,
22593
+ off: Power
22594
+ };
22595
+ /** Mode accent hex — drives the airflow particles, the glow, and the target
22596
+ * value colour. Mirrors the thermostat gauge palette. Exhaustive. */
22597
+ var MODE_ACCENT = {
22598
+ heat: "#f59e0b",
22599
+ cool: "#60a5fa",
22600
+ auto: "#c084fc",
22601
+ heat_cool: "#e879f9",
22602
+ fan_only: "#94a3b8",
22603
+ dry: "#22d3ee",
22604
+ off: "#a1a1aa"
22605
+ };
22606
+ /** Practical AC setpoint range (Celsius) for the target range track. */
22607
+ var TARGET_MIN = 16;
22608
+ var TARGET_MAX = 30;
22609
+ /** Title-case a snake/lower token for a selector option ('medium_low' → 'Medium
22610
+ * low', 'turbo' → 'Turbo'). Shared by the fan + preset selectors. */
22611
+ function fanLabel(token) {
22612
+ const spaced = token.replace(/_/g, " ");
22613
+ return spaced.charAt(0).toUpperCase() + spaced.slice(1);
22614
+ }
22615
+ /** Preset → icon. Unknown presets fall back to a neutral sparkle. */
22616
+ function presetIcon(preset) {
22617
+ switch (preset) {
22618
+ case "turbo": return Zap;
22619
+ case "quiet": return Feather;
22620
+ case "sleep": return Moon;
22621
+ case "eco": return Leaf;
22622
+ case "8c_heat": return Snowflake;
22623
+ case "none": return Ban;
22624
+ default: return Sparkles;
22625
+ }
22626
+ }
22627
+ /**
22628
+ * Fan level → airflow animation period. Higher speed ⇒ shorter period. Unknown
22629
+ * strings fall back to a medium pace. Turbo (a preset) shortens it further.
22630
+ */
22631
+ function airflowPeriodSec(fanMode) {
22632
+ switch (fanMode) {
22633
+ case "high": return 1;
22634
+ case "medium_high": return 1.3;
22635
+ case "medium": return 1.6;
22636
+ case "medium_low": return 1.9;
22637
+ case "low": return 2.2;
22638
+ default: return 1.8;
22639
+ }
22640
+ }
22641
+ var KEYFRAMES = `
22642
+ @keyframes acv-fall { 0%{transform:translateY(-1.75rem);opacity:0} 18%{opacity:.7} 82%{opacity:.7} 100%{transform:translateY(7.5rem);opacity:0} }
22643
+ @keyframes acv-rise { 0%{transform:translateY(7.5rem);opacity:0} 18%{opacity:.7} 82%{opacity:.7} 100%{transform:translateY(-1.75rem);opacity:0} }
22644
+ @keyframes acv-sway { 0%,100%{transform:translateX(-9%)} 50%{transform:translateX(9%)} }
22645
+ @keyframes acv-swing-h { 0%,100%{transform:translateX(-22%)} 50%{transform:translateX(22%)} }
22646
+ @keyframes acv-swing-v { 0%,100%{transform:translateY(-22%)} 50%{transform:translateY(22%)} }
22647
+ @keyframes acv-spin { to { transform:rotate(360deg) } }
22648
+ @keyframes acv-glow { 0%,100%{opacity:.35;transform:scale(1)} 50%{opacity:.6;transform:scale(1.06)} }
22649
+ @media (prefers-reduced-motion: reduce) {
22650
+ .acv-streak, .acv-fan, .acv-sway-wrap, .acv-glow, .acv-swing { animation: none !important; }
22651
+ }
22652
+ `;
22653
+ function AcPanel({ trpc, deviceId, layout, optimistic }) {
22654
+ const { cap, slice, available } = useDeviceCapability({
22655
+ trpc,
22656
+ deviceId,
22657
+ cap: (d) => d.climateControl,
22658
+ slice: (d) => d.state.climateControl
22659
+ });
22660
+ const { display, applyOptimistic } = useOptimisticSlice(slice, { enabled: optimistic ?? true });
22661
+ if (cap === void 0) return null;
22662
+ if (display === void 0) return null;
22663
+ const busy = !available;
22664
+ if (layout === "compact") return /* @__PURE__ */ jsxs("div", {
22665
+ "data-mode": display.mode,
22666
+ className: "inline-flex items-center gap-1",
22667
+ children: [
22668
+ /* @__PURE__ */ jsx("span", {
22669
+ className: cn("text-xs tabular-nums font-medium", MODE_TEXT_COLOR[display.mode]),
22670
+ children: display.target !== null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [
22671
+ display.target,
22672
+ "°",
22673
+ display.currentTemp !== null && /* @__PURE__ */ jsxs("span", {
22674
+ className: "text-foreground-subtle font-normal",
22675
+ children: [
22676
+ " ",
22677
+ "(",
22678
+ display.currentTemp,
22679
+ "°)"
22680
+ ]
22681
+ })
22682
+ ] }) : display.currentTemp !== null ? /* @__PURE__ */ jsxs("span", {
22683
+ className: "text-foreground-subtle",
22684
+ children: [display.currentTemp, "°"]
22685
+ }) : null
22686
+ }),
22687
+ display.target !== null && /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("button", {
22688
+ type: "button",
22689
+ "aria-label": "Decrease target",
22690
+ disabled: busy,
22691
+ onClick: (e) => {
22692
+ e.stopPropagation();
22693
+ if (!busy && display.target !== null) {
22694
+ const next = display.target - 1;
22695
+ applyOptimistic({ target: next });
22696
+ cap.setTarget({ target: next });
22697
+ }
22698
+ },
22699
+ 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"),
22700
+ children: "−"
22701
+ }), /* @__PURE__ */ jsx("button", {
22702
+ type: "button",
22703
+ "aria-label": "Increase target",
22704
+ disabled: busy,
22705
+ onClick: (e) => {
22706
+ e.stopPropagation();
22707
+ if (!busy && display.target !== null) {
22708
+ const next = display.target + 1;
22709
+ applyOptimistic({ target: next });
22710
+ cap.setTarget({ target: next });
22711
+ }
22712
+ },
22713
+ 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"),
22714
+ children: "+"
22715
+ })] }),
22716
+ /* @__PURE__ */ jsx("select", {
22717
+ "aria-label": "Mode",
22718
+ value: display.mode,
22719
+ disabled: busy,
22720
+ onChange: (e) => {
22721
+ e.stopPropagation();
22722
+ const mode = display.availableModes.find((m) => m === e.target.value);
22723
+ if (!busy && mode) {
22724
+ applyOptimistic({ mode });
22725
+ cap.setMode({ mode });
22726
+ }
22727
+ },
22728
+ className: cn("bg-transparent px-0.5 text-xs text-foreground-subtle hover:text-foreground cursor-pointer", busy && "opacity-40 cursor-not-allowed"),
22729
+ children: display.availableModes.map((m) => /* @__PURE__ */ jsx("option", {
22730
+ value: m,
22731
+ children: MODE_LABEL[m]
22732
+ }, m))
22733
+ })
22734
+ ]
22735
+ });
22736
+ const accent = MODE_ACCENT[display.mode];
22737
+ const on = display.mode !== "off";
22738
+ const CurrentPresetIcon = presetIcon(display.preset);
22739
+ const boost = display.preset === "turbo";
22740
+ const period = Math.max(.55, airflowPeriodSec(display.fanMode) * (boost ? .6 : 1));
22741
+ const showVSwing = display.swingVertical !== null;
22742
+ const showHSwing = display.swingHorizontal !== null;
22743
+ const swaying = on && (display.swingVertical === true || display.swingHorizontal === true);
22744
+ return /* @__PURE__ */ jsxs("div", {
22745
+ "data-mode": display.mode,
22746
+ className: cn("relative flex flex-col items-stretch gap-2.5 overflow-hidden rounded-lg border p-3 transition-colors", MODE_COLOR[display.mode]),
22747
+ children: [
22748
+ /* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
22749
+ /* @__PURE__ */ jsxs("div", {
22750
+ 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",
22751
+ children: [
22752
+ /* @__PURE__ */ jsx("div", {
22753
+ className: "pointer-events-none absolute inset-0 opacity-60",
22754
+ children: /* @__PURE__ */ jsx(AirflowViz, {
22755
+ mode: display.mode,
22756
+ accent,
22757
+ periodSec: period,
22758
+ swaying
22759
+ })
22760
+ }),
22761
+ /* @__PURE__ */ jsx("div", { className: "pointer-events-none absolute inset-0 bg-gradient-to-b from-surface/50 via-transparent to-surface/50" }),
22762
+ on && /* @__PURE__ */ jsx("span", {
22763
+ "aria-hidden": true,
22764
+ className: "acv-glow pointer-events-none absolute left-1/2 top-1/2 h-16 w-16 -translate-x-1/2 -translate-y-1/2 rounded-full blur-2xl",
22765
+ style: {
22766
+ background: accent,
22767
+ animation: "acv-glow 3.2s ease-in-out infinite"
22768
+ }
22769
+ }),
22770
+ /* @__PURE__ */ jsxs("div", {
22771
+ className: "relative z-10 flex items-center gap-1.5 text-[11px] font-semibold uppercase tracking-wide",
22772
+ style: { color: accent },
22773
+ children: [
22774
+ /* @__PURE__ */ jsx(ModeIcon, {
22775
+ mode: display.mode,
22776
+ className: "h-3.5 w-3.5"
22777
+ }),
22778
+ MODE_LABEL[display.mode],
22779
+ display.currentTemp !== null && /* @__PURE__ */ jsxs("span", {
22780
+ className: "normal-case text-foreground-subtle",
22781
+ children: [
22782
+ "· ",
22783
+ display.currentTemp,
22784
+ "° now"
22785
+ ]
22786
+ }),
22787
+ display.currentHumidity !== null && /* @__PURE__ */ jsxs("span", {
22788
+ className: "inline-flex items-center gap-0.5 normal-case text-foreground-subtle",
22789
+ children: [
22790
+ /* @__PURE__ */ jsx(Droplets, { className: "h-3 w-3" }),
22791
+ display.currentHumidity,
22792
+ "%"
22793
+ ]
22794
+ })
22795
+ ]
22796
+ }),
22797
+ display.target !== null ? /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs("div", {
22798
+ className: "relative z-10 flex items-center gap-3",
22799
+ children: [
22800
+ /* @__PURE__ */ jsx(RoundStep, {
22801
+ label: "Decrease target",
22802
+ symbol: "−",
22803
+ disabled: busy,
22804
+ onClick: () => {
22805
+ if (busy || display.target === null) return;
22806
+ const next = display.target - 1;
22807
+ applyOptimistic({ target: next });
22808
+ cap.setTarget({ target: next });
22809
+ }
22810
+ }),
22811
+ /* @__PURE__ */ jsxs("div", {
22812
+ className: "flex items-baseline gap-0.5",
22813
+ children: [/* @__PURE__ */ jsx("span", {
22814
+ className: "text-4xl font-bold leading-none tabular-nums",
22815
+ style: { color: accent },
22816
+ children: display.target
22817
+ }), /* @__PURE__ */ jsx("span", {
22818
+ className: "text-lg text-foreground-subtle",
22819
+ children: "°"
22820
+ })]
22821
+ }),
22822
+ /* @__PURE__ */ jsx(RoundStep, {
22823
+ label: "Increase target",
22824
+ symbol: "+",
22825
+ disabled: busy,
22826
+ onClick: () => {
22827
+ if (busy || display.target === null) return;
22828
+ const next = display.target + 1;
22829
+ applyOptimistic({ target: next });
22830
+ cap.setTarget({ target: next });
22831
+ }
22832
+ })
22833
+ ]
22834
+ }), /* @__PURE__ */ jsx("div", {
22835
+ className: "relative z-10 w-36",
22836
+ children: /* @__PURE__ */ jsx(RangeTrack, {
22837
+ value: display.target,
22838
+ min: TARGET_MIN,
22839
+ max: TARGET_MAX,
22840
+ accent
22841
+ })
22842
+ })] }) : /* @__PURE__ */ jsxs("div", {
22843
+ className: "relative z-10 flex items-baseline gap-0.5",
22844
+ children: [/* @__PURE__ */ jsx("span", {
22845
+ className: "text-4xl font-bold leading-none tabular-nums text-foreground",
22846
+ children: display.currentTemp ?? "—"
22847
+ }), /* @__PURE__ */ jsx("span", {
22848
+ className: "text-lg text-foreground-subtle",
22849
+ children: "°"
22850
+ })]
22851
+ })
22852
+ ]
22853
+ }),
22854
+ /* @__PURE__ */ jsxs("div", {
22855
+ className: "relative z-10 grid grid-cols-3 gap-2",
22856
+ children: [
22857
+ /* @__PURE__ */ jsx(CompactSelect, {
22858
+ label: "Mode",
22859
+ icon: /* @__PURE__ */ jsx("span", {
22860
+ style: { color: accent },
22861
+ className: "flex",
22862
+ children: /* @__PURE__ */ jsx(ModeIcon, {
22863
+ mode: display.mode,
22864
+ className: "h-4 w-4"
22865
+ })
22866
+ }),
22867
+ value: display.mode,
22868
+ options: display.availableModes.map((m) => ({
22869
+ value: m,
22870
+ label: MODE_LABEL[m]
22871
+ })),
22872
+ disabled: busy,
22873
+ onChange: (v) => {
22874
+ const mode = display.availableModes.find((m) => m === v);
22875
+ if (mode) {
22876
+ applyOptimistic({ mode });
22877
+ cap.setMode({ mode });
22878
+ }
22879
+ }
22880
+ }),
22881
+ display.availableFanModes.length > 0 && /* @__PURE__ */ jsx(CompactSelect, {
22882
+ label: "Fan",
22883
+ icon: /* @__PURE__ */ jsx(Wind, { className: "h-4 w-4 text-sky-500" }),
22884
+ value: display.fanMode,
22885
+ options: display.availableFanModes.map((f) => ({
22886
+ value: f,
22887
+ label: fanLabel(f)
22888
+ })),
22889
+ disabled: busy,
22890
+ onChange: (v) => {
22891
+ applyOptimistic({ fanMode: v });
22892
+ cap.setFanMode({ fanMode: v });
22893
+ }
22894
+ }),
22895
+ display.availablePresets.length > 0 && /* @__PURE__ */ jsx(CompactSelect, {
22896
+ label: "Preset",
22897
+ icon: /* @__PURE__ */ jsx(CurrentPresetIcon, { className: "h-4 w-4 text-emerald-500" }),
22898
+ value: display.preset,
22899
+ options: display.availablePresets.map((p) => ({
22900
+ value: p,
22901
+ label: fanLabel(p)
22902
+ })),
22903
+ disabled: busy,
22904
+ onChange: (v) => {
22905
+ applyOptimistic({ preset: v });
22906
+ cap.setPreset({ preset: v });
22907
+ }
22908
+ })
22909
+ ]
22910
+ }),
22911
+ (showVSwing || showHSwing) && /* @__PURE__ */ jsx(Field, {
22912
+ label: "Swing",
22913
+ children: /* @__PURE__ */ jsxs("div", {
22914
+ className: "grid grid-cols-2 gap-1",
22915
+ children: [showVSwing && /* @__PURE__ */ jsx(SwingToggle, {
22916
+ axis: "vertical",
22917
+ on: display.swingVertical ?? false,
22918
+ busy,
22919
+ onToggle: (next) => {
22920
+ applyOptimistic({ swingVertical: next });
22921
+ cap.setSwingVertical({ on: next });
22922
+ }
22923
+ }), showHSwing && /* @__PURE__ */ jsx(SwingToggle, {
22924
+ axis: "horizontal",
22925
+ on: display.swingHorizontal ?? false,
22926
+ busy,
22927
+ onToggle: (next) => {
22928
+ applyOptimistic({ swingHorizontal: next });
22929
+ cap.setSwingHorizontal({ on: next });
22930
+ }
22931
+ })]
22932
+ })
22933
+ })
22934
+ ]
22935
+ });
22936
+ }
22937
+ /** Labelled control group — a small uppercase header above its control. */
22938
+ function Field({ label, children }) {
22939
+ return /* @__PURE__ */ jsxs("div", {
22940
+ className: "relative z-10 flex flex-col gap-1",
22941
+ children: [/* @__PURE__ */ jsx("span", {
22942
+ className: "text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle",
22943
+ children: label
22944
+ }), children]
22945
+ });
22946
+ }
22947
+ function ModeIcon({ mode, className }) {
22948
+ const Icon = MODE_ICON[mode];
22949
+ return /* @__PURE__ */ jsx(Icon, {
22950
+ className,
22951
+ "aria-hidden": true
22952
+ });
22953
+ }
22954
+ /** Compact labelled dropdown — a leading icon + native `<select>` + chevron,
22955
+ * used for the Mode / Fan / Preset selectors so all three fit in one row. */
22956
+ function CompactSelect({ label, icon, value, options, disabled, onChange }) {
22957
+ return /* @__PURE__ */ jsxs("div", {
22958
+ className: "flex min-w-0 flex-col gap-1",
22959
+ children: [/* @__PURE__ */ jsx("span", {
22960
+ className: "text-[10px] font-semibold uppercase tracking-wider text-foreground-subtle",
22961
+ children: label
22962
+ }), /* @__PURE__ */ jsxs("div", {
22963
+ className: cn("flex items-center gap-1 overflow-hidden rounded-lg border border-border/60 bg-surface-subtle px-1.5 py-1.5", disabled && "opacity-40"),
22964
+ children: [
22965
+ /* @__PURE__ */ jsx("span", {
22966
+ className: "flex shrink-0",
22967
+ children: icon
22968
+ }),
22969
+ /* @__PURE__ */ jsx("select", {
22970
+ "aria-label": label,
22971
+ value,
22972
+ disabled,
22973
+ onChange: (e) => {
22974
+ e.stopPropagation();
22975
+ if (!disabled) onChange(e.target.value);
22976
+ },
22977
+ className: "min-w-0 flex-1 cursor-pointer appearance-none truncate bg-transparent text-xs font-medium text-foreground outline-none",
22978
+ children: options.map((o) => /* @__PURE__ */ jsx("option", {
22979
+ value: o.value,
22980
+ children: o.label
22981
+ }, o.value))
22982
+ }),
22983
+ /* @__PURE__ */ jsx(ChevronDown, { className: "h-3 w-3 shrink-0 text-foreground-subtle" })
22984
+ ]
22985
+ })]
22986
+ });
22987
+ }
22988
+ /** Circular ± button for the target. */
22989
+ function RoundStep({ label, symbol, disabled, onClick }) {
22990
+ return /* @__PURE__ */ jsx("button", {
22991
+ type: "button",
22992
+ "aria-label": label,
22993
+ disabled,
22994
+ onClick,
22995
+ className: cn("flex h-8 w-8 shrink-0 items-center justify-center rounded-full border border-border bg-surface text-lg leading-none text-foreground-subtle transition-colors hover:bg-surface-hover hover:text-foreground active:scale-95", disabled && "opacity-40 cursor-not-allowed"),
22996
+ children: symbol
22997
+ });
22998
+ }
22999
+ /** Thin gradient range track with a knob at the setpoint fraction. */
23000
+ function RangeTrack({ value, min, max, accent }) {
23001
+ const pct = `${Math.min(1, Math.max(0, (value - min) / (max - min))) * 100}%`;
23002
+ return /* @__PURE__ */ jsxs("div", {
23003
+ className: "mt-2 w-full",
23004
+ children: [/* @__PURE__ */ jsxs("div", {
23005
+ className: "relative h-1.5 w-full rounded-full bg-surface-subtle",
23006
+ children: [/* @__PURE__ */ jsx("div", {
23007
+ className: "absolute inset-y-0 left-0 rounded-full",
23008
+ style: {
23009
+ width: pct,
23010
+ background: accent
23011
+ }
23012
+ }), /* @__PURE__ */ jsx("div", {
23013
+ className: "absolute top-1/2 h-3 w-3 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-surface shadow",
23014
+ style: {
23015
+ left: pct,
23016
+ background: accent
23017
+ }
23018
+ })]
23019
+ }), /* @__PURE__ */ jsxs("div", {
23020
+ className: "mt-0.5 flex justify-between text-[9px] tabular-nums text-foreground-subtle",
23021
+ children: [/* @__PURE__ */ jsxs("span", { children: [min, "°"] }), /* @__PURE__ */ jsxs("span", { children: [max, "°"] })]
23022
+ })]
23023
+ });
23024
+ }
23025
+ /**
23026
+ * Animated centerpiece. `fan_only` renders a spinning fan; `off` a dim static
23027
+ * vent; every active mode renders drifting particles that FALL (cool/dry/auto)
23028
+ * or RISE (heat), with a horizontal sweep overlaid when a swing axis is active.
23029
+ */
23030
+ function AirflowViz({ mode, accent, periodSec, swaying }) {
23031
+ const columns = [
23032
+ 0,
23033
+ 1,
23034
+ 2,
23035
+ 3,
23036
+ 4,
23037
+ 5
23038
+ ];
23039
+ const rising = mode === "heat";
23040
+ const isDroplet = mode === "dry";
23041
+ return /* @__PURE__ */ jsx("div", {
23042
+ "aria-hidden": true,
23043
+ className: "absolute inset-0 overflow-hidden",
23044
+ children: mode === "off" ? /* @__PURE__ */ jsx("div", {
23045
+ className: "flex h-full items-center justify-center gap-2 opacity-30",
23046
+ children: columns.map((i) => /* @__PURE__ */ jsx("span", { className: "h-8 w-1 rounded-full bg-foreground-subtle opacity-40" }, i))
23047
+ }) : mode === "fan_only" ? /* @__PURE__ */ jsx("div", {
23048
+ className: "flex h-full items-center justify-center",
23049
+ children: /* @__PURE__ */ jsx(FanBlades, {
23050
+ color: accent,
23051
+ periodSec: Math.max(.5, periodSec * .7),
23052
+ size: 56
23053
+ })
23054
+ }) : /* @__PURE__ */ jsx("div", {
23055
+ className: cn("acv-sway-wrap absolute inset-0", swaying && "acv-sway"),
23056
+ style: swaying ? { animation: "acv-sway 2.6s ease-in-out infinite" } : void 0,
23057
+ children: columns.map((i) => {
23058
+ return /* @__PURE__ */ jsx("span", {
23059
+ className: "acv-streak absolute rounded-full",
23060
+ style: {
23061
+ left: `${8 + i * 15}%`,
23062
+ width: isDroplet ? "0.4rem" : "0.3rem",
23063
+ height: isDroplet ? "0.4rem" : "1.9rem",
23064
+ background: accent,
23065
+ boxShadow: `0 0 6px ${accent}`,
23066
+ animationName: rising ? "acv-rise" : "acv-fall",
23067
+ animationTimingFunction: "linear",
23068
+ animationIterationCount: "infinite",
23069
+ animationDuration: `${periodSec}s`,
23070
+ animationDelay: `${i % 3 * (periodSec / 3) + i * .05}s`
23071
+ }
23072
+ }, i);
23073
+ })
23074
+ })
23075
+ });
23076
+ }
23077
+ /** Big spinning fan for `fan_only` mode. */
23078
+ function FanBlades({ color, periodSec, size }) {
23079
+ return /* @__PURE__ */ jsxs("svg", {
23080
+ width: size,
23081
+ height: size,
23082
+ viewBox: "0 0 100 100",
23083
+ className: "acv-fan",
23084
+ style: {
23085
+ animation: `acv-spin ${periodSec}s linear infinite`,
23086
+ transformOrigin: "50% 50%"
23087
+ },
23088
+ "aria-hidden": true,
23089
+ children: [[
23090
+ 0,
23091
+ 120,
23092
+ 240
23093
+ ].map((deg) => /* @__PURE__ */ jsx("path", {
23094
+ d: "M50 50 C 58 30, 78 26, 84 12 C 66 20, 54 34, 50 50 Z",
23095
+ fill: color,
23096
+ opacity: .85,
23097
+ transform: `rotate(${deg} 50 50)`
23098
+ }, deg)), /* @__PURE__ */ jsx("circle", {
23099
+ cx: "50",
23100
+ cy: "50",
23101
+ r: "7",
23102
+ fill: color
23103
+ })]
23104
+ });
23105
+ }
23106
+ /** Swing axis toggle — a card with a MoveVertical/Horizontal glyph that
23107
+ * oscillates along its axis when on. On/off is non-destructive → plain tap. */
23108
+ function SwingToggle({ axis, on, busy, onToggle }) {
23109
+ const label = axis === "vertical" ? "Vertical" : "Horizontal";
23110
+ const Icon = axis === "vertical" ? MoveVertical : MoveHorizontal;
23111
+ const anim = axis === "vertical" ? "acv-swing-v" : "acv-swing-h";
23112
+ return /* @__PURE__ */ jsxs("button", {
23113
+ type: "button",
23114
+ "aria-label": `${label} swing`,
23115
+ "aria-pressed": on,
23116
+ disabled: busy,
23117
+ onClick: () => {
23118
+ if (!busy) onToggle(!on);
23119
+ },
23120
+ className: cn("flex items-center justify-center gap-2 rounded-lg border px-2 py-1.5 text-xs font-medium transition-colors", on ? "border-transparent bg-indigo-400 text-indigo-950 shadow-sm" : "border-border/60 bg-surface-subtle text-foreground-subtle hover:bg-surface-hover hover:text-foreground", busy && "opacity-40 cursor-not-allowed"),
23121
+ children: [/* @__PURE__ */ jsx(Icon, {
23122
+ className: "acv-swing h-4 w-4",
23123
+ "aria-hidden": true,
23124
+ style: on ? { animation: `${anim} 1.4s ease-in-out infinite` } : void 0
23125
+ }), label]
23126
+ });
23127
+ }
23128
+ //#endregion
22174
23129
  //#region src/composites/device-controls/media-player-panel.tsx
22175
23130
  /**
22176
23131
  * Exhaustive colour map — one entry per MediaPlayerState.
@@ -24052,6 +25007,26 @@ function ThermostatInlineControl({ trpc, deviceId, features, optimistic }) {
24052
25007
  optimistic
24053
25008
  });
24054
25009
  }
25010
+ function AcInlineControl({ trpc, deviceId, features, optimistic }) {
25011
+ if (!useClimateCapGuard(trpc, deviceId)) return null;
25012
+ return /* @__PURE__ */ jsx(AcPanel, {
25013
+ trpc,
25014
+ deviceId,
25015
+ features,
25016
+ layout: "compact",
25017
+ optimistic
25018
+ });
25019
+ }
25020
+ function AcHeroCard({ trpc, deviceId, features, optimistic }) {
25021
+ if (!useClimateCapGuard(trpc, deviceId)) return null;
25022
+ return /* @__PURE__ */ jsx(AcPanel, {
25023
+ trpc,
25024
+ deviceId,
25025
+ features,
25026
+ layout: "full",
25027
+ optimistic
25028
+ });
25029
+ }
24055
25030
  function useMediaPlayerCapGuard(trpc, deviceId) {
24056
25031
  const { cap } = useDeviceCapability({
24057
25032
  trpc,
@@ -24138,6 +25113,10 @@ var THERMOSTAT_CONTROL = {
24138
25113
  InlineControl: ThermostatInlineControl,
24139
25114
  HeroCard: ThermostatHeroCard
24140
25115
  };
25116
+ var CLIMATE_CONTROL = {
25117
+ InlineControl: AcInlineControl,
25118
+ HeroCard: AcHeroCard
25119
+ };
24141
25120
  var MEDIA_PLAYER_CONTROL = {
24142
25121
  InlineControl: MediaPlayerInlineControl,
24143
25122
  HeroCard: MediaPlayerHeroCard
@@ -24195,6 +25174,7 @@ var DEVICE_TYPE_CONTROL = {
24195
25174
  [DeviceType.Fan]: FAN_CONTROL,
24196
25175
  [DeviceType.Sensor]: SENSOR_CONTROL,
24197
25176
  [DeviceType.Thermostat]: THERMOSTAT_CONTROL,
25177
+ [DeviceType.Climate]: CLIMATE_CONTROL,
24198
25178
  [DeviceType.Button]: {
24199
25179
  InlineControl: ButtonControl,
24200
25180
  HeroCard: ButtonHeroCard
@@ -24239,6 +25219,7 @@ var CONTROL_FILLS = {
24239
25219
  [DeviceType.Cover]: true,
24240
25220
  [DeviceType.Valve]: true,
24241
25221
  [DeviceType.Thermostat]: true,
25222
+ [DeviceType.Climate]: true,
24242
25223
  [DeviceType.Control]: true,
24243
25224
  [DeviceType.Button]: true,
24244
25225
  [DeviceType.MediaPlayer]: true,
@@ -42558,4 +43539,4 @@ var MotionZonesSettings = lazy(() => import("./MotionZonesSettings-NcxxQN8r.js")
42558
43539
  /** Lazy-wrapped `PrivacyMaskSettings` — code-split off the main bundle. */
42559
43540
  var PrivacyMaskSettings = lazy(() => import("./PrivacyMaskSettings-APgPLF7p.js").then((m) => ({ default: m.PrivacyMaskSettings })));
42560
43541
  //#endregion
42561
- export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EmptyState, ErrorBox, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolvePrimaryChild, sortRows, statusIcons, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdateFrameworkPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverDevices, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputSend, useNotificationOutputSendTest, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDetect, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignDecoder, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDecoderAssignment, usePipelineOrchestratorGetDecoderAssignments, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignDecoder, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerReportMotion, usePlateGalleryCorrectPlateText, usePlateGalleryDeletePlate, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordingApplyDeviceSettingsPatch, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetStatus, useSnapshotInvalidateCache, useSnapshotProviderGetSnapshot, useSnapshotProviderSupportsDevice, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };
43542
+ export { AddonGlobalSettingsForm, AgentStepEditor, AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl, AppShell, ArcKnob, AudioClassificationList, AudioLevelWaveform, AudioWaveform, AutotrackSection, BTN_COMPACT, BTN_COMPACT_DANGER, BTN_COMPACT_PRIMARY, BTN_COMPACT_WARNING, Badge, BatteryBadge, BottomSheet, Breadcrumb, BrightnessPanel, Button, ButtonControl, ButtonHeroCard, CENTER, CHIP_ACTIVE, CHIP_BASE, CHIP_INACTIVE, CLASS_COLORS, COLUMN_BREAKPOINT_CLASS, COLUMN_PRIORITY, CONTROL_CAP_NAMES, CONTROL_FILLS, CameraStreamPlayer, Card, Checkbox, ChildSectionAccordion, ClimatePanel, CodeBlock, CollapsibleCard, ConfigFormBuilder, FormField as ConfigFormField, ConfigSchemaField, ConfirmActionButton, ConfirmDialogProvider, ConsumablesPanel, ContainerChildrenProvider, ContainerPrimaryHero, ControlColumn, ControlHeroCard, ControlInlineControl, ControlPanel, CopyButton, CoverHeroCard, CoverInlineControl, CoverPanel, CustomFieldRenderersProvider, DEFAULT_COLOR, DEVICE_COLUMNS, DEVICE_LIST_PAGE_SIZE_KEY, DEVICE_LIST_PAGE_SIZE_OPTIONS, DEVICE_ROLE_META, DEVICE_TYPE_CONTROL, DEVICE_TYPE_META, DataTable, DetectionCanvas, DetectionOverlay, DetectionResultTree, DevShell, DeviceActivityPanel, DeviceBatchToolbar, DeviceCard, DeviceContextProvider, DeviceExportPanel, DeviceGrid, DeviceItem, DeviceList, Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, DiscoveryPanel, DoorbellRecentPanel, Dropdown, DropdownContent, DropdownItem, DropdownTrigger, DummyHeroCard, DummyInline, EmptyState, ErrorBox, EventStream, FILL, FanHeroCard, FanInlineControl, FanPanel, FilterBar, FloatingEventStream, FloatingLogStream, FloatingPanel, FormField$1 as FormField, GRID_GAP, GRID_PAIRED, GRID_QUICK_STATS, GripTrack, HOST_WIDGETS, HlsVideo, HoverZoomImage, HumidifierHeroCard, HumidifierInlineControl, INPUT_COMPACT, IconAction, IconButton, ImageHeroCard, ImageInlineControl, ImageSelector, InferenceConfigSelector, Input, KebabMenu, KeyValueList, LIST_ROW, Label, LawnMowerHeroCard, LawnMowerInlineControl, LightHeroCard, LightInlineControl, LockHeroCard, LockInlineControl, LockPanel, LogStream, LoginForm, MODE_COLOR, MaskShapeCanvas, MediaPlayerHeroCard, MediaPlayerInlineControl, MediaPlayerPanel, MobileDrawer, MotionZonesSettings, NodeMultiSelectField, NodePicker, NodeSelectField, OfflineBadge, PHASE_CONFIG, PRIORITY, PTZOverlay, PageHeader, PhaseIcon, PipelineBuilder, PipelineRuntimeSelector, PipelineStep, PipelineTreeMatrix, PlayerOverlaysProvider, Popover, PopoverContent, PopoverRowAction, PopoverTrigger, PrimaryChildPicker, PrivacyMaskSettings, ProviderBadge, PtzPanel, QrCode, RIGHT, ROLE_DESCRIPTOR, RadialGauge, RecordingPanel, ResponseLog, SECTION_BODY, SECTION_CARD, SECTION_HEADER, SPLIT_PANEL_OUTER, SPLIT_PANEL_SIDE, STACK_GAP, STATE_COLOR, ScopePicker, ScrollArea, Select, SemanticBadge, SensorHeroCard, SensorInlineControl, SensorValueAtom, Separator, Sidebar, SidebarItem, Skeleton, SlideOverPanel, SlideToggle, SnapshotButton, StatCard, StateValuesStream, StatusBadge, StepTimings, StepTreeMaster, Stepper, StreamBrokerSelector, StreamPanel, Switch, SwitchHeroCard, SwitchInlineControl, SwitchPanel, SystemProvider, TEXT_FIELD_LABEL, TEXT_HINT, TEXT_METRIC, TEXT_SECTION_LABEL, TEXT_VALUE, TIMEZONES, Tabs, TabsContent, TabsList, TabsTrigger, TapToggle, ThemeProvider, ThermostatHeroCard, ThermostatInlineControl, TimezoneSelector, Tooltip, TooltipContent, TooltipTrigger, VacuumHeroCard, VacuumInlineControl, ValueReadout, ValveHeroCard, ValveInlineControl, VersionBadge, VodPlaybackProvider, WaterHeaterHeroCard, WaterHeaterInlineControl, WeatherHeroCard, WeatherInlineControl, WidgetMetricCard, WidgetPanel, WidgetRegistryProvider, WidgetSlot, ZoneEditingProvider, allDeviceTypeFilterOptions, buildStepTreeFromSchema, childEntityId, cn, columnsForContext, containerChildToRef, countableDevices, coverHighlight, createSharedContext, createTheme, darkColors, defaultTheme, deriveDeviceKind, deviceRoleMeta, deviceRoleMetaOf, deviceTypeMeta, deviceTypeMetaOf, ensureMfHostInit, findTimezone, formatControlDateTime, formatLastSeen, fuzzyMatch, getClassColor, getPhaseVisual, groupChildrenByLayout, hardwareLabel, humidifierTint, createLucideIcon as i, isAbsentProvider, isFieldVisible, lawnMowerActivityMeta, lightColors, loadRemoteBundle, metadataEntries, metadataString, mirror, mountAddonPage, Square as n, nextSort, normalizeForSearch, overrideEntityIdFromLink, providerIcons, EyeOff as r, resolveContainerPrimary, resolveControlAlign, resolveDeviceControl, resolvePrimaryChild, sortRows, statusIcons, Trash2 as t, tankAlert, themeToCss, trpc, useAccessoriesGetStatus, useAccessoriesSetChildHidden, useAddonPagesListPages, useAddonSettingsGetDeviceSettings, useAddonSettingsGetGlobalSettings, useAddonSettingsUpdateDeviceSettings, useAddonSettingsUpdateGlobalSettings, useAddonWidgetsListWidgets, useAddonsApplyAutoUpdateToAll, useAddonsCancelJob, useAddonsCustom, useAddonsForceRefresh, useAddonsGetAddonAutoUpdate, useAddonsGetAutoUpdateSettings, useAddonsGetJob, useAddonsGetLastRestart, useAddonsGetLogs, useAddonsGetVersions, useAddonsInstallFromWorkspace, useAddonsInstallPackage, useAddonsIsWorkspaceAvailable, useAddonsList, useAddonsListCapabilityProviders, useAddonsListFrameworkPackages, useAddonsListJobs, useAddonsListPackages, useAddonsListUpdates, useAddonsListWorkspacePackages, useAddonsOnAddonLogs, useAddonsReloadPackages, useAddonsRestartAddon, useAddonsRestartServer, useAddonsRetryLoad, useAddonsRollbackPackage, useAddonsSearchAvailable, useAddonsSetAddonAutoUpdate, useAddonsSetAutoUpdateSettings, useAddonsSetCapabilityProviderEnabled, useAddonsStartJob, useAddonsUninstallPackage, useAddonsUpdateFrameworkPackage, useAddonsUpdatePackage, useAirQualitySensorGetStatus, useAlarmPanelArm, useAlarmPanelDisarm, useAlarmPanelGetStatus, useAlarmPanelTrigger, useAlertsDismiss, useAlertsEmit, useAlertsGetUnreadCount, useAlertsList, useAlertsMarkAllRead, useAlertsMarkRead, useAlertsUpdate, useAllWidgets, useAmbientLightSensorGetStatus, useAudioAnalysisApplyDeviceSettingsPatch, useAudioAnalysisGetDeviceLiveContribution, useAudioAnalysisGetDeviceSettingsContribution, useAudioAnalysisResolveDeviceSettings, useAudioAnalyzerAnalyseChunk, useAudioAnalyzerClassify, useAudioAnalyzerDispose, useAudioAnalyzerIsReady, useAudioAnalyzerReprobeAudioEngine, useAudioCodecCanHandle, useAudioCodecCloseSession, useAudioCodecCreateDecodeSession, useAudioCodecCreateEncodeSession, useAudioCodecFlushEncode, useAudioCodecListActiveSessions, useAudioCodecListSupportedCodecs, useAudioCodecPullEncoded, useAudioCodecPullPcm, useAudioCodecPushEncodedFrame, useAudioCodecPushPcm, useAudioMetricsGetCurrentSnapshot, useAudioMetricsGetHistory, useAutomationControlDisable, useAutomationControlEnable, useAutomationControlGetStatus, useAutomationControlTrigger, useBackupDelete, useBackupGetEntries, useBackupList, useBackupListArchives, useBackupListDestinations, useBackupListLocations, useBackupPreviewSchedule, useBackupRestore, useBackupTrigger, useBackupUpsertDestinationPolicy, useBatteryGetStatus, useBatteryWakeForStream, useBinaryGetStatus, useBrightnessGetStatus, useBrightnessSetBrightness, useBrokerAdd, useBrokerGet, useBrokerGetBrokerConfig, useBrokerGetSettings, useBrokerGetSettingsSchema, useBrokerGetState, useBrokerGetStatus, useBrokerList, useBrokerListProviders, useBrokerPublish, useBrokerRemove, useBrokerSetSettings, useBrokerSubscribe, useBrokerTestConnection, useBrokerTestSettings, useBrokerUnsubscribe, useButtonPress, useCameraCredentialsGetCredentials, useCameraCredentialsGetStatus, useCameraPipelineConfigApplyDeviceSettingsPatch, useCameraPipelineConfigGetDeviceLiveContribution, useCameraPipelineConfigGetDeviceSettingsContribution, useCameraStreamsGetBrokerStreams, useCameraStreamsGetCameraStreams, useCameraStreamsGetProfileRtspEntries, useCameraStreamsGetRtspEntries, useCameraStreamsPickStream, useCarbonMonoxideGetStatus, useClimateControlGetStatus, useClimateControlSetFanMode, useClimateControlSetMode, useClimateControlSetPreset, useClimateControlSetSwingHorizontal, useClimateControlSetSwingVertical, useClimateControlSetTarget, useClimateControlSetTargetHumidity, useClimateControlSetTargetRange, useClusterNodes, useColorGetStatus, useColorSetColor, useConfirm, useConnectivityGetStatus, useConsumablesGetStatus, useConsumablesReset, useContactGetStatus, useContainerChildren, useControlGetStatus, useControlSetValue, useCoverClose, useCoverGetStatus, useCoverOpen, useCoverSetPosition, useCoverSetTiltPosition, useCoverStop, useCustomFieldRenderer, useDebouncedString, useDecoderCreateSession, useDecoderDestroySession, useDecoderGetFrame, useDecoderGetInfo, useDecoderGetShmStats, useDecoderGetStats, useDecoderListActiveSessions, useDecoderOpenStream, useDecoderPullFrames, useDecoderPullHandles, useDecoderPushPacket, useDecoderReprobeHwaccel, useDecoderSupportsCodec, useDecoderUpdateConfig, useDetectionPipelineApplyDeviceSettingsPatch, useDetectionPipelineGetDeviceLiveContribution, useDetectionPipelineGetDeviceSettingsContribution, useDevShell, useDevice, useDeviceAdoptionAdopt, useDeviceAdoptionGetCandidate, useDeviceAdoptionGetStatus, useDeviceAdoptionListCandidateFilters, useDeviceAdoptionListCandidates, useDeviceAdoptionRefresh, useDeviceAdoptionRelease, useDeviceAdoptionResync, useDeviceAutotrack, useDeviceBattery, useDeviceCapSlice, useDeviceCapability, useDeviceDetections, useDeviceDiscoveryAdoptDevice, useDeviceDiscoveryGetStatus, useDeviceDiscoveryListDiscovered, useDeviceDiscoveryRefreshDiscovery, useDeviceDiscoveryReleaseDevice, useDeviceExportApplyDeviceSettingsPatch, useDeviceExportExposeDevice, useDeviceExportGetDeviceLiveContribution, useDeviceExportGetDeviceSettingsContribution, useDeviceExportGetStatus, useDeviceExportListExposedDevices, useDeviceExportListSupportedDeviceKinds, useDeviceExportUnexposeDevice, useDeviceId, useDeviceListPageSize, useDeviceManagerAddLocation, useDeviceManagerAdoptDevice, useDeviceManagerAdoptionAdopt, useDeviceManagerAdoptionListCandidateFilters, useDeviceManagerAdoptionListCandidates, useDeviceManagerAdoptionRefresh, useDeviceManagerAdoptionRelease, useDeviceManagerAdoptionResync, useDeviceManagerAllocateDeviceId, useDeviceManagerApplyInitialMeta, useDeviceManagerCreateDevice, useDeviceManagerDisable, useDeviceManagerDiscoverAllProviders, useDeviceManagerDiscoverDevices, useDeviceManagerDiscoverProvider, useDeviceManagerDiscoveryProviders, useDeviceManagerEnable, useDeviceManagerGetAllBindings, useDeviceManagerGetBindings, useDeviceManagerGetChildren, useDeviceManagerGetConfigSchema, useDeviceManagerGetCreationSchema, useDeviceManagerGetDevice, useDeviceManagerGetDeviceAggregate, useDeviceManagerGetDeviceLiveInfoAggregate, useDeviceManagerGetDeviceSettingsAggregate, useDeviceManagerGetDeviceStatusAggregate, useDeviceManagerGetSettingsSchema, useDeviceManagerGetStreamProfileMap, useDeviceManagerGetStreamSources, useDeviceManagerGetWireableFields, useDeviceManagerListAll, useDeviceManagerListBindableCapsForDeviceType, useDeviceManagerListLocations, useDeviceManagerListPersistedByAddon, useDeviceManagerListWrappersForCap, useDeviceManagerLoadConfig, useDeviceManagerLoadMeta, useDeviceManagerLoadRuntimeState, useDeviceManagerPersistConfig, useDeviceManagerProbeStreams, useDeviceManagerProviderCreationType, useDeviceManagerProviderDiscoveryParamsSchema, useDeviceManagerRegisterDevice, useDeviceManagerRemove, useDeviceManagerRemoveByIntegration, useDeviceManagerRemoveDevice, useDeviceManagerRemoveLocation, useDeviceManagerRunDeviceAction, useDeviceManagerSetChildLayout, useDeviceManagerSetDeviceLinks, useDeviceManagerSetDisabled, useDeviceManagerSetIntegrationId, useDeviceManagerSetLinkDeviceId, useDeviceManagerSetLocation, useDeviceManagerSetMetadata, useDeviceManagerSetName, useDeviceManagerSetPrimaryChildEntityId, useDeviceManagerSetRole, useDeviceManagerSetStreamProfileMap, useDeviceManagerSetType, useDeviceManagerSetWrapperActive, useDeviceManagerTestCreationField, useDeviceManagerTestField, useDeviceManagerUpdateConfig, useDeviceManagerUpdateDeviceField, useDeviceManagerUpdateDeviceFieldsBatch, useDeviceOpsGetConfigEntries, useDeviceOpsGetRawState, useDeviceOpsGetSettingsSchema, useDeviceOpsGetStreamSources, useDeviceOpsRemoveDevice, useDeviceOpsRunAction, useDeviceOpsSetConfig, useDeviceProviderAdoptDiscoveredDevice, useDeviceProviderCreateDevice, useDeviceProviderDiscoverDevices, useDeviceProviderGetChildCreationSchema, useDeviceProviderGetDevices, useDeviceProviderGetDiscoveryParamsSchema, useDeviceProviderGetManualCreationType, useDeviceProviderGetStatus, useDeviceProviderStart, useDeviceProviderStop, useDeviceProviderSupportsDiscovery, useDeviceProviderSupportsManualCreation, useDeviceProviderTestCreationField, useDeviceProxy, useDeviceSnapshot, useDeviceSnapshotImage, useDeviceState, useDeviceStateGetAllSnapshots, useDeviceStateGetCapSlice, useDeviceStateGetSnapshot, useDeviceStateSetCapSlice, useDeviceStateSlice, useDeviceStatusGetStatus, useDeviceWebrtc, useDevices, useDoorbellEvents, useDoorbellGetStatus, useEnumSensorGetStatus, useEventEmitterGetStatus, useEventInvalidation, useEventStreamLatest, useEventStreamMap, useEventsGetEventClipUrl, useEventsGetEventThumbnail, useEventsGetEvents, useFaceGalleryAssignFace, useFaceGalleryAssignFaces, useFaceGalleryCreateIdentity, useFaceGalleryDeleteFace, useFaceGalleryDeleteIdentity, useFaceGalleryGetFaceByTrack, useFaceGalleryGetFaceMedia, useFaceGalleryListIdentities, useFaceGalleryListIdentitySamples, useFaceGalleryListRecentFaces, useFaceGalleryRemoveSample, useFaceGalleryRenameIdentity, useFaceGallerySuggestFaceClusters, useFaceGalleryUnassignFace, useFaceGalleryUnassignFaces, useFanControlGetStatus, useFanControlSetDirection, useFanControlSetOscillating, useFanControlSetPercentage, useFanControlSetPreset, useFeatureProbeGetStatus, useFloodGetStatus, useGasGetStatus, useHumidifierGetStatus, useHumidifierSetMode, useHumidifierSetOn, useHumidifierSetTargetHumidity, useHumiditySensorGetStatus, useImageGetStatus, useIntegrationsCreate, useIntegrationsDelete, useIntegrationsGet, useIntegrationsGetAvailableTypes, useIntegrationsGetByAddonId, useIntegrationsGetSettings, useIntegrationsList, useIntegrationsSetSettings, useIntegrationsTestConnection, useIntegrationsUpdate, useIntercomEndTalkSession, useIntercomGetStatus, useIntercomHandleAnswer, useIntercomPushTalkAudio, useIntercomStartSession, useIntercomStartTalkSession, useIntercomStopSession, useIsMidWidth, useIsMobile, useLawnMowerControlDock, useLawnMowerControlGetStatus, useLawnMowerControlPause, useLawnMowerControlStartMowing, useLiveBuffer, useLiveEvent, useLocalNetworkGetAllowedAddresses, useLocalNetworkGetConnectionEndpoints, useLocalNetworkGetPreferred, useLocalNetworkList, useLocalNetworkResetAllowlistToBestMatch, useLocalNetworkSetAllowedAddresses, useLockControlGetStatus, useLockControlLock, useLockControlOpen, useLockControlUnlock, useMediaPlayerGetStatus, useMediaPlayerNext, useMediaPlayerPause, useMediaPlayerPlay, useMediaPlayerPlayMedia, useMediaPlayerPrevious, useMediaPlayerSeek, useMediaPlayerSelectSource, useMediaPlayerSetMute, useMediaPlayerSetRepeat, useMediaPlayerSetShuffle, useMediaPlayerSetVolume, useMediaPlayerStop, useMeshNetworkGetStatus, useMeshNetworkJoin, useMeshNetworkLeave, useMeshNetworkListPeers, useMeshNetworkLogout, useMeshNetworkStartLogin, useMeshNetworkTestConnection, useMetricsProviderCollectSnapshot, useMetricsProviderDumpHeapSnapshot, useMetricsProviderGetAddonStats, useMetricsProviderGetCached, useMetricsProviderGetCpuTemperature, useMetricsProviderGetCurrent, useMetricsProviderGetDiskSpace, useMetricsProviderGetGpuInfo, useMetricsProviderGetProcessStats, useMetricsProviderKillProcess, useMetricsProviderListAddonInstances, useMetricsProviderListNodeProcesses, useMotionDetectionAnalyze, useMotionDetectionApplyDeviceSettingsPatch, useMotionDetectionGetDeviceLiveContribution, useMotionDetectionGetDeviceSettingsContribution, useMotionDetectionRemoveCamera, useMotionDetectionReset, useMotionGetStatus, useMotionIsDetected, useMotionTriggerGetStatus, useMotionTriggerSetMotionTrigger, useMotionZonesGetOptions, useMotionZonesGetStatus, useMotionZonesSetZone, useMqttBrokerAddBroker, useMqttBrokerGetBrokerConfig, useMqttBrokerGetStatus, useMqttBrokerListBrokers, useMqttBrokerRemoveBroker, useMqttBrokerStartEmbeddedBroker, useMqttBrokerStopEmbeddedBroker, useMqttBrokerTestConnection, useNativeObjectDetectionGetStatus, useNativeObjectDetectionSetEnabled, useNetworkAccessGetEndpoint, useNetworkAccessGetStatus, useNetworkAccessListEndpoints, useNetworkAccessStart, useNetworkAccessStop, useNetworkQualityGetAllStats, useNetworkQualityGetDeviceStats, useNetworkQualityReportClientStats, useNodesClusterAddonStatus, useNodesDeployAddon, useNodesExecuteQuery, useNodesGetCapUsageGraph, useNodesGetNodeAddons, useNodesRenameNode, useNodesRestartAddon, useNodesRestartNode, useNodesRestartProcess, useNodesSetProcessLogLevel, useNodesShutdownNode, useNodesTopology, useNodesUndeployAddon, useNotificationOutputSend, useNotificationOutputSendTest, useNotifierCancel, useNotifierGetStatus, useNotifierSend, useNumericSensorGetStatus, useOptimisticSlice, useOptionalSystem, useOptionalWidgetRegistry, useOsdGetStatus, useOsdSetOverlay, usePTZ, usePipelineAnalyticsApplyDeviceSettingsPatch, usePipelineAnalyticsClearTracks, usePipelineAnalyticsGetActiveTracks, usePipelineAnalyticsGetAudioEvents, usePipelineAnalyticsGetDeviceLiveContribution, usePipelineAnalyticsGetDeviceSettingsContribution, usePipelineAnalyticsGetEventDensity, usePipelineAnalyticsGetEventMedia, usePipelineAnalyticsGetMotionEvents, usePipelineAnalyticsGetObjectEvents, usePipelineAnalyticsGetTrack, usePipelineAnalyticsGetTrackMedia, usePipelineAnalyticsListTracks, usePipelineAnalyticsPruneEventsBefore, usePipelineAnalyticsSearchObjectEvents, usePipelineExecutorCacheFrameInPool, usePipelineExecutorDeleteModel, usePipelineExecutorDeleteTemplate, usePipelineExecutorDetect, usePipelineExecutorDownloadModel, usePipelineExecutorGetAddonModels, usePipelineExecutorGetAudioCapabilities, usePipelineExecutorGetAvailableEngines, usePipelineExecutorGetCapabilities, usePipelineExecutorGetDefaultSteps, usePipelineExecutorGetDetectionConfigSchema, usePipelineExecutorGetEffectiveTuning, usePipelineExecutorGetEngineProvisioning, usePipelineExecutorGetGlobalPipelineConfig, usePipelineExecutorGetGlobalSteps, usePipelineExecutorGetOrchestratorConfigSchema, usePipelineExecutorGetReferenceAudio, usePipelineExecutorGetReferenceAudioFiles, usePipelineExecutorGetReferenceImage, usePipelineExecutorGetSchema, usePipelineExecutorGetSelectedEngine, usePipelineExecutorGetVideoPipelineSteps, usePipelineExecutorInferCached, usePipelineExecutorKillEngine, usePipelineExecutorListLoadedEngines, usePipelineExecutorListReferenceImages, usePipelineExecutorListTemplates, usePipelineExecutorReprobeEngine, usePipelineExecutorRunAudioTest, usePipelineExecutorRunPipeline, usePipelineExecutorRunPipelineBatch, usePipelineExecutorSaveTemplate, usePipelineExecutorSetVideoPipelineSteps, usePipelineExecutorSpinEngine, usePipelineExecutorUncacheFrame, usePipelineExecutorUpdateTemplate, usePipelineOrchestratorApplyDeviceSettingsPatch, usePipelineOrchestratorAssignAudio, usePipelineOrchestratorAssignDecoder, usePipelineOrchestratorAssignPipeline, usePipelineOrchestratorDeleteTemplate, usePipelineOrchestratorGetAgentLoad, usePipelineOrchestratorGetAgentSettings, usePipelineOrchestratorGetAudioAssignment, usePipelineOrchestratorGetAudioAssignments, usePipelineOrchestratorGetAudioNodeLoad, usePipelineOrchestratorGetCameraMetrics, usePipelineOrchestratorGetCameraSettings, usePipelineOrchestratorGetCameraStatus, usePipelineOrchestratorGetCameraStatuses, usePipelineOrchestratorGetCameraStepOverrides, usePipelineOrchestratorGetCapabilityBindings, usePipelineOrchestratorGetDecoderAssignment, usePipelineOrchestratorGetDecoderAssignments, usePipelineOrchestratorGetDeviceLiveContribution, usePipelineOrchestratorGetDeviceSettingsContribution, usePipelineOrchestratorGetGlobalMetrics, usePipelineOrchestratorGetPipelineAssignment, usePipelineOrchestratorGetPipelineAssignments, usePipelineOrchestratorListAgentSettings, usePipelineOrchestratorListTemplates, usePipelineOrchestratorRebalance, usePipelineOrchestratorRemoveAgentSettings, usePipelineOrchestratorResolvePipeline, usePipelineOrchestratorSaveTemplate, usePipelineOrchestratorSetAgentAddonDefaults, usePipelineOrchestratorSetAgentMaxCameras, usePipelineOrchestratorSetCameraPipelineForAgent, usePipelineOrchestratorSetCameraStepOverride, usePipelineOrchestratorSetCameraStepToggle, usePipelineOrchestratorSetCapabilityBinding, usePipelineOrchestratorUnassignAudio, usePipelineOrchestratorUnassignDecoder, usePipelineOrchestratorUnassignPipeline, usePipelineOrchestratorUpdateTemplate, usePipelineRunnerAttachCamera, usePipelineRunnerDetachCamera, usePipelineRunnerGetAllCameraMetrics, usePipelineRunnerGetCameraMetrics, usePipelineRunnerGetLocalCameras, usePipelineRunnerGetLocalLoad, usePipelineRunnerGetLocalMetrics, usePipelineRunnerReportMotion, usePlateGalleryCorrectPlateText, usePlateGalleryDeletePlate, usePlateGalleryGetPlateByTrack, usePlateGalleryGetPlateMedia, usePlateGalleryListPlates, usePlateGallerySearchPlates, usePlateGallerySuggestPlateClusters, usePlayerOverlayLayer, usePlayerOverlayLayers, usePlayerToolbarButton, usePlayerToolbarButtons, usePowerMeterGetStatus, usePresenceGetStatus, usePressureSensorGetStatus, usePrivacyMaskGetOptions, usePrivacyMaskGetStatus, usePrivacyMaskSetMask, usePtzAutotrackGetSettings, usePtzAutotrackGetStatus, usePtzAutotrackSetEnabled, usePtzAutotrackSetSettings, usePtzContinuousMove, usePtzDeletePreset, usePtzGetOptions, usePtzGetPosition, usePtzGetPresets, usePtzGetStatus, usePtzGoHome, usePtzGoToPreset, usePtzMove, usePtzSavePreset, usePtzSetAutofocus, usePtzStop, useRebootReboot, useRecordingApplyDeviceSettingsPatch, useRecordingGetAvailability, useRecordingGetDaysWithRecordings, useRecordingGetDeviceConfig, useRecordingGetDeviceLiveContribution, useRecordingGetDeviceSettingsContribution, useRecordingGetPlaybackManifest, useRecordingGetStatus, useRecordingGetStorageUsage, useRecordingLocateSegment, useRecordingPruneFootage, useRecordingReadSegmentBytes, useRecordingRescanStorage, useRecordingSetDeviceConfig, useRemoteComponent, useScriptRunnerGetStatus, useScriptRunnerRun, useScriptRunnerStop, useSettingsStoreCount, useSettingsStoreDeclareCollection, useSettingsStoreDelete, useSettingsStoreGet, useSettingsStoreHistogram, useSettingsStoreInsert, useSettingsStoreIsEmpty, useSettingsStoreQuery, useSettingsStoreSet, useSettingsStoreUpdate, useSmokeGetStatus, useSnapshotApplyDeviceSettingsPatch, useSnapshotGetDeviceLiveContribution, useSnapshotGetDeviceSettingsContribution, useSnapshotGetSnapshot, useSnapshotGetStatus, useSnapshotInvalidateCache, useSnapshotProviderGetSnapshot, useSnapshotProviderSupportsDevice, useStorageAbortUpload, useStorageBeginDownload, useStorageBeginUpload, useStorageDelete, useStorageDeleteLocation, useStorageEndDownload, useStorageExists, useStorageFinalizeUpload, useStorageGetAvailableSpace, useStorageGetDefaultLocation, useStorageList, useStorageListLocationDeclarations, useStorageListLocations, useStorageListProviders, useStorageRead, useStorageReadChunk, useStorageResolve, useStorageTestConfig, useStorageTestLocation, useStorageUpsertLocation, useStorageWrite, useStorageWriteChunk, useStreamBrokerApplyDeviceSettingsPatch, useStreamBrokerAssignProfile, useStreamBrokerGetAllRtspEntries, useStreamBrokerGetBrokerStats, useStreamBrokerGetDeviceLiveContribution, useStreamBrokerGetDeviceSettingsContribution, useStreamBrokerGetPreBufferInfo, useStreamBrokerGetRtspEntry, useStreamBrokerGetRtspPort, useStreamBrokerGetStreamUrl, useStreamBrokerGetStreamWithCodec, useStreamBrokerIsRtspEnabled, useStreamBrokerKillClient, useStreamBrokerListAllCameraStreams, useStreamBrokerListAllProfileSlots, useStreamBrokerListClients, useStreamBrokerProbeStream, useStreamBrokerPublishCameraStream, useStreamBrokerPullAudioChunks, useStreamBrokerPullFrameHandles, useStreamBrokerRegenerateRtspToken, useStreamBrokerReleaseStreamWithCodec, useStreamBrokerRestartProfile, useStreamBrokerRetractCameraStream, useStreamBrokerSetPreBufferDuration, useStreamBrokerSetRtspEnabled, useStreamBrokerSubscribeAudioChunks, useStreamBrokerSubscribeFrames, useStreamBrokerUnassignProfile, useStreamBrokerUnsubscribeAudioChunks, useStreamBrokerUnsubscribeFrames, useStreamCatalogGetCatalog, useStreamParamsGetConfigSchema, useStreamParamsGetOptions, useStreamParamsGetStatus, useStreamParamsSetProfile, useSwitchGetStatus, useSwitchSetState, useSystem, useSystemFeatureFlags, useSystemForceRetentionCleanup, useSystemGetRetentionConfig, useSystemHealth, useSystemInfo, useSystemMutation, useSystemNetworkAddresses, useSystemQuery, useSystemSetRetentionConfig, useTamperGetStatus, useTemperatureSensorGetStatus, useThemeMode, useToastOnToast, useTurnProviderGetTurnServers, useUpdateGetStatus, useUpdateInstallUpdate, useUserManagementConfirmTotp, useUserManagementCreateApiKey, useUserManagementCreateScopedToken, useUserManagementCreateUser, useUserManagementDeleteUser, useUserManagementDisableTotp, useUserManagementGetTotpStatus, useUserManagementListApiKeys, useUserManagementListOauthSessions, useUserManagementListScopedTokens, useUserManagementListUsers, useUserManagementOauthExchangeCode, useUserManagementOauthIssueCode, useUserManagementOauthRefresh, useUserManagementOauthVerifyAccessToken, useUserManagementResetPassword, useUserManagementRevokeApiKey, useUserManagementRevokeOauthSession, useUserManagementRevokeScopedToken, useUserManagementSetUserScopes, useUserManagementSetupTotp, useUserManagementUpdateUser, useUserManagementValidateApiKey, useUserManagementValidateCredentials, useUserManagementValidateScopedToken, useUserManagementVerifyTotp, useVacuumControlGetStatus, useVacuumControlLocate, useVacuumControlPause, useVacuumControlReturnToBase, useVacuumControlSetFanSpeed, useVacuumControlStart, useVacuumControlStop, useValveClose, useValveGetStatus, useValveOpen, useValveSetPosition, useValveStop, useVibrationGetStatus, useVideoclipsGetClipPlayback, useVideoclipsListClips, useVodPlayback, useWaterHeaterGetStatus, useWaterHeaterSetAway, useWaterHeaterSetOperationMode, useWaterHeaterSetTargetTemp, useWeatherGetStatus, useWebrtcSessionAddIceCandidate, useWebrtcSessionCloseSession, useWebrtcSessionCreateSession, useWebrtcSessionGetIceCandidates, useWebrtcSessionGetSessionState, useWebrtcSessionHandleAnswer, useWebrtcSessionHandleOffer, useWebrtcSessionHasAdaptiveBitrate, useWebrtcSessionListStreams, useWidget, useWidgetMetadata, useWidgetRegistry, useZoneAnalyticsGetCameraHistory, useZoneAnalyticsGetCurrentSnapshot, useZoneAnalyticsGetUnzonedHistory, useZoneAnalyticsGetZoneHistory, useZoneEditing, useZoneRulesListRules, useZoneRulesSetRules, useZonesAddZone, useZonesListZones, useZonesRemoveZone, useZonesUpdateZone, vacuumStateMeta, validateScopes, valveStateMeta, waterHeaterPhase, waterHeaterTint, weatherConditionMeta, weatherTint };