@camstack/ui-library 1.2.257 → 1.2.259

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.
Files changed (375) hide show
  1. package/dist/composites/accelerator-label.d.ts +9 -9
  2. package/dist/composites/adaptive-downlink.d.ts +141 -143
  3. package/dist/composites/addon-global-settings-form.d.ts +73 -60
  4. package/dist/composites/addon-page-props.d.ts +34 -10
  5. package/dist/composites/agent-step-editor.d.ts +48 -47
  6. package/dist/composites/app-shell/app-shell.d.ts +17 -17
  7. package/dist/composites/app-shell/index.d.ts +3 -3
  8. package/dist/composites/app-shell/sidebar-item.d.ts +9 -8
  9. package/dist/composites/app-shell/sidebar.d.ts +10 -10
  10. package/dist/composites/audio-classification-list.d.ts +16 -15
  11. package/dist/composites/audio-level-waveform.d.ts +31 -30
  12. package/dist/composites/audio-waveform.d.ts +18 -17
  13. package/dist/composites/battery-badge.d.ts +27 -13
  14. package/dist/composites/breadcrumb.d.ts +21 -21
  15. package/dist/composites/camera-stream-player.d.ts +309 -309
  16. package/dist/composites/cap-settings/AutotrackSection.d.ts +19 -2
  17. package/dist/composites/cap-settings/CameraGridLayoutEditor.d.ts +24 -2
  18. package/dist/composites/cap-settings/ConsumablesPanel.d.ts +21 -2
  19. package/dist/composites/cap-settings/CoverageTrack.d.ts +21 -20
  20. package/dist/composites/cap-settings/EventBucketStrip.d.ts +21 -20
  21. package/dist/composites/cap-settings/EventHeatmap.d.ts +8 -7
  22. package/dist/composites/cap-settings/HomePresetPicker.d.ts +2 -2
  23. package/dist/composites/cap-settings/MaskShapeCanvas.d.ts +143 -41
  24. package/dist/composites/cap-settings/MotionZonesSettings.d.ts +41 -2
  25. package/dist/composites/cap-settings/NavigationPanel.d.ts +14 -2
  26. package/dist/composites/cap-settings/PrivacyMaskSettings.d.ts +3 -2
  27. package/dist/composites/cap-settings/PtzPanel.d.ts +15 -2
  28. package/dist/composites/cap-settings/RecordingBandsEditor.d.ts +33 -32
  29. package/dist/composites/cap-settings/RecordingPanel.d.ts +3 -2
  30. package/dist/composites/cap-settings/RecordingSettings.d.ts +11 -10
  31. package/dist/composites/cap-settings/RecordingTimeline.d.ts +3 -2
  32. package/dist/composites/cap-settings/SceneMonitorEditor.d.ts +3 -51
  33. package/dist/composites/cap-settings/SceneReferenceGallery.d.ts +62 -23
  34. package/dist/composites/cap-settings/SceneSettingsForm.d.ts +52 -16
  35. package/dist/composites/cap-settings/TimelineControls.d.ts +21 -20
  36. package/dist/composites/cap-settings/camera-grid-layout.d.ts +95 -95
  37. package/dist/composites/cap-settings/event-thumb.d.ts +9 -8
  38. package/dist/composites/cap-settings/index.d.ts +20 -20
  39. package/dist/composites/cap-settings/privacy-mask-audio.d.ts +47 -47
  40. package/dist/composites/cap-settings/recording-config-form.d.ts +25 -25
  41. package/dist/composites/cap-settings/recording-spans.d.ts +14 -14
  42. package/dist/composites/cap-settings/recording-timeline-model.d.ts +57 -57
  43. package/dist/composites/cap-settings/scene-monitor-copy.d.ts +58 -49
  44. package/dist/composites/client-network-sample.d.ts +41 -41
  45. package/dist/composites/clips/ClipBandBar.d.ts +44 -14
  46. package/dist/composites/clips/ClipPanel.d.ts +30 -6
  47. package/dist/composites/clips/ClipTile.d.ts +26 -5
  48. package/dist/composites/clips/ClipsSection.d.ts +107 -2
  49. package/dist/composites/clips/clip-band.d.ts +72 -38
  50. package/dist/composites/clips/clip-day-window.d.ts +7 -30
  51. package/dist/composites/clips/clip-source-state.d.ts +55 -26
  52. package/dist/composites/clips/clip-still-retry.d.ts +39 -39
  53. package/dist/composites/clips/clip-thumbnail-fetch.d.ts +9 -9
  54. package/dist/composites/clips/clip-tile-media.d.ts +64 -32
  55. package/dist/composites/clips/clip-view-state.d.ts +76 -46
  56. package/dist/composites/code-block.d.ts +5 -4
  57. package/dist/composites/config-form-builder.d.ts +14 -13
  58. package/dist/composites/config-form-field.d.ts +63 -62
  59. package/dist/composites/config-icon-field.d.ts +10 -9
  60. package/dist/composites/config-secret-field.d.ts +51 -27
  61. package/dist/composites/confirm-action-button.d.ts +52 -39
  62. package/dist/composites/confirm-dialog.d.ts +110 -48
  63. package/dist/composites/copy-button.d.ts +25 -19
  64. package/dist/composites/data-table/data-table-header.d.ts +8 -7
  65. package/dist/composites/data-table/data-table-pagination.d.ts +7 -6
  66. package/dist/composites/data-table/data-table-row.d.ts +8 -7
  67. package/dist/composites/data-table/data-table.d.ts +3 -2
  68. package/dist/composites/data-table/index.d.ts +2 -2
  69. package/dist/composites/data-table/types.d.ts +29 -29
  70. package/dist/composites/data-table-filter-bar.d.ts +30 -29
  71. package/dist/composites/data-table-filter.d.ts +34 -34
  72. package/dist/composites/data-table-layout.d.ts +24 -24
  73. package/dist/composites/data-table-pager.d.ts +5 -5
  74. package/dist/composites/data-table-pagination.d.ts +23 -23
  75. package/dist/composites/data-table-selection.d.ts +10 -10
  76. package/dist/composites/data-table.d.ts +167 -118
  77. package/dist/composites/detection-canvas.d.ts +34 -25
  78. package/dist/composites/detection-colors.d.ts +9 -9
  79. package/dist/composites/detection-overlay.d.ts +33 -32
  80. package/dist/composites/detection-result-tree.d.ts +22 -9
  81. package/dist/composites/dev-shell.d.ts +15 -14
  82. package/dist/composites/device-activity-panel.d.ts +37 -31
  83. package/dist/composites/device-card.d.ts +32 -32
  84. package/dist/composites/device-controls/ac-panel.d.ts +2 -2
  85. package/dist/composites/device-controls/alarm-hero-card.d.ts +42 -42
  86. package/dist/composites/device-controls/atoms.d.ts +50 -50
  87. package/dist/composites/device-controls/brightness-panel.d.ts +3 -3
  88. package/dist/composites/device-controls/button-control.d.ts +14 -14
  89. package/dist/composites/device-controls/climate-panel.d.ts +12 -12
  90. package/dist/composites/device-controls/container-primary-hero.d.ts +33 -16
  91. package/dist/composites/device-controls/container-primary.d.ts +68 -39
  92. package/dist/composites/device-controls/control-panel.d.ts +4 -4
  93. package/dist/composites/device-controls/control-registry.d.ts +81 -70
  94. package/dist/composites/device-controls/cover-hero-card.d.ts +26 -26
  95. package/dist/composites/device-controls/cover-inline.d.ts +20 -20
  96. package/dist/composites/device-controls/cover-panel.d.ts +2 -2
  97. package/dist/composites/device-controls/dummy-hero-card.d.ts +2 -2
  98. package/dist/composites/device-controls/fan-hero-card.d.ts +20 -20
  99. package/dist/composites/device-controls/fan-panel.d.ts +3 -3
  100. package/dist/composites/device-controls/humidifier-control.d.ts +46 -29
  101. package/dist/composites/device-controls/image-control.d.ts +41 -27
  102. package/dist/composites/device-controls/index.d.ts +34 -34
  103. package/dist/composites/device-controls/lawn-mower-control.d.ts +30 -16
  104. package/dist/composites/device-controls/light-hero-card.d.ts +15 -15
  105. package/dist/composites/device-controls/lock-hero-card.d.ts +14 -14
  106. package/dist/composites/device-controls/lock-panel.d.ts +3 -3
  107. package/dist/composites/device-controls/media-player-hero-card.d.ts +16 -16
  108. package/dist/composites/device-controls/media-player-panel.d.ts +7 -7
  109. package/dist/composites/device-controls/offline-badge.d.ts +23 -8
  110. package/dist/composites/device-controls/panel-controls.d.ts +39 -20
  111. package/dist/composites/device-controls/pet-feeder-panel.d.ts +27 -9
  112. package/dist/composites/device-controls/popover-row-action.d.ts +18 -6
  113. package/dist/composites/device-controls/primary-child-picker.d.ts +31 -15
  114. package/dist/composites/device-controls/primary-child.d.ts +14 -25
  115. package/dist/composites/device-controls/radial-gauge.d.ts +17 -17
  116. package/dist/composites/device-controls/script-automation-controls.d.ts +9 -9
  117. package/dist/composites/device-controls/sensor-hero-card.d.ts +26 -8
  118. package/dist/composites/device-controls/sensor-inline-control.d.ts +21 -9
  119. package/dist/composites/device-controls/sensor-value-atom.d.ts +97 -76
  120. package/dist/composites/device-controls/switch-hero-card.d.ts +11 -11
  121. package/dist/composites/device-controls/switch-panel.d.ts +2 -2
  122. package/dist/composites/device-controls/tap-toggle.d.ts +13 -13
  123. package/dist/composites/device-controls/thermostat-hero-card.d.ts +16 -16
  124. package/dist/composites/device-controls/types.d.ts +11 -11
  125. package/dist/composites/device-controls/update-control.d.ts +20 -7
  126. package/dist/composites/device-controls/vacuum-control.d.ts +41 -25
  127. package/dist/composites/device-controls/valve-control.d.ts +51 -35
  128. package/dist/composites/device-controls/water-heater-control.d.ts +48 -31
  129. package/dist/composites/device-controls/weather-control.d.ts +46 -28
  130. package/dist/composites/device-export-panel.d.ts +34 -34
  131. package/dist/composites/device-grid.d.ts +10 -10
  132. package/dist/composites/device-item/actions.d.ts +40 -18
  133. package/dist/composites/device-item/admin-link-quick-action.d.ts +66 -26
  134. package/dist/composites/device-item/child-layout.d.ts +43 -26
  135. package/dist/composites/device-item/child-section-accordion.d.ts +20 -6
  136. package/dist/composites/device-item/children-accordion.d.ts +11 -11
  137. package/dist/composites/device-item/container-children-context.d.ts +28 -11
  138. package/dist/composites/device-item/device-delete-action.d.ts +23 -5
  139. package/dist/composites/device-item/features.d.ts +33 -15
  140. package/dist/composites/device-item/header.d.ts +53 -31
  141. package/dist/composites/device-item/helpers.d.ts +291 -274
  142. package/dist/composites/device-item/index.d.ts +18 -9
  143. package/dist/composites/device-item/preview.d.ts +41 -21
  144. package/dist/composites/device-item/quick-detail-action.d.ts +4 -4
  145. package/dist/composites/device-item/reboot-quick-action.d.ts +28 -7
  146. package/dist/composites/device-item/role-display-defaults-context.d.ts +28 -12
  147. package/dist/composites/device-item/status-dot.d.ts +24 -6
  148. package/dist/composites/device-list/batch-actions-bar.d.ts +23 -12
  149. package/dist/composites/device-list/batch-toolbar.d.ts +13 -13
  150. package/dist/composites/device-list/columns.d.ts +108 -108
  151. package/dist/composites/device-list/device-integration.d.ts +48 -58
  152. package/dist/composites/device-list/device-mode.d.ts +121 -121
  153. package/dist/composites/device-list/empty-state.d.ts +14 -3
  154. package/dist/composites/device-list/filter-chips.d.ts +42 -29
  155. package/dist/composites/device-list/fuzzy-match.d.ts +22 -22
  156. package/dist/composites/device-list/generic-mode.d.ts +88 -88
  157. package/dist/composites/device-list/group.d.ts +62 -35
  158. package/dist/composites/device-list/hardware-cell.d.ts +14 -3
  159. package/dist/composites/device-list/hardware.d.ts +29 -11
  160. package/dist/composites/device-list/icon-action.d.ts +27 -15
  161. package/dist/composites/device-list/index.d.ts +46 -23
  162. package/dist/composites/device-list/multi-select.d.ts +17 -17
  163. package/dist/composites/device-list/page-size-select.d.ts +13 -7
  164. package/dist/composites/device-list/pagination.d.ts +19 -12
  165. package/dist/composites/device-list/sort.d.ts +28 -15
  166. package/dist/composites/device-list/sortable-header.d.ts +20 -7
  167. package/dist/composites/device-list/table-layout.d.ts +44 -44
  168. package/dist/composites/device-list/type-filter.d.ts +16 -16
  169. package/dist/composites/device-list/url-state.d.ts +35 -35
  170. package/dist/composites/device-meta.d.ts +43 -43
  171. package/dist/composites/device-picker/DevicePicker.d.ts +72 -33
  172. package/dist/composites/device-picker/SelectedChip.d.ts +10 -9
  173. package/dist/composites/device-picker/device-filter-bar.d.ts +19 -18
  174. package/dist/composites/device-picker/device-fleet-view.d.ts +11 -3
  175. package/dist/composites/device-picker/device-parent.d.ts +27 -27
  176. package/dist/composites/device-picker/device-picker-grouping.d.ts +3 -3
  177. package/dist/composites/device-picker/device-picker-model.d.ts +140 -140
  178. package/dist/composites/device-picker/device-selection-rows.d.ts +31 -24
  179. package/dist/composites/device-picker/device-selection.d.ts +43 -43
  180. package/dist/composites/device-picker/index.d.ts +9 -9
  181. package/dist/composites/device-select-field.d.ts +17 -16
  182. package/dist/composites/device-select-filter.d.ts +78 -78
  183. package/dist/composites/device-selector-picker.d.ts +25 -25
  184. package/dist/composites/device-step-matrix.d.ts +54 -28
  185. package/dist/composites/discovery-panel.d.ts +22 -22
  186. package/dist/composites/doorbell-recent-panel.d.ts +9 -8
  187. package/dist/composites/empty-state.d.ts +8 -8
  188. package/dist/composites/error-box.d.ts +32 -17
  189. package/dist/composites/event-kind-visuals.d.ts +29 -18
  190. package/dist/composites/event-stream.d.ts +59 -42
  191. package/dist/composites/extensions/AssociationSlotCard.d.ts +45 -24
  192. package/dist/composites/extensions/ExtensionsPanel.d.ts +41 -18
  193. package/dist/composites/extensions/extensions-view-state.d.ts +71 -53
  194. package/dist/composites/filter-bar.d.ts +22 -21
  195. package/dist/composites/form-field.d.ts +9 -9
  196. package/dist/composites/format-state-value.d.ts +23 -51
  197. package/dist/composites/grouped-model-selector.d.ts +7 -6
  198. package/dist/composites/hls-quality.d.ts +26 -26
  199. package/dist/composites/hls-video.d.ts +62 -39
  200. package/dist/composites/hover-zoom-image.d.ts +35 -16
  201. package/dist/composites/icon-picker.d.ts +86 -50
  202. package/dist/composites/image-selector.d.ts +21 -20
  203. package/dist/composites/index.d.ts +204 -204
  204. package/dist/composites/inference-config-selector.d.ts +36 -35
  205. package/dist/composites/kebab-menu.d.ts +53 -35
  206. package/dist/composites/key-value-list.d.ts +14 -14
  207. package/dist/composites/log-stream-scroll.d.ts +24 -24
  208. package/dist/composites/log-stream.d.ts +81 -70
  209. package/dist/composites/login-form.d.ts +7 -6
  210. package/dist/composites/model-bound-slider.d.ts +46 -26
  211. package/dist/composites/model-picker.d.ts +20 -19
  212. package/dist/composites/mount-addon-page.d.ts +12 -12
  213. package/dist/composites/network-link-badge.d.ts +7 -6
  214. package/dist/composites/node-picker.d.ts +14 -13
  215. package/dist/composites/notification-targets-field.d.ts +76 -58
  216. package/dist/composites/notification-targets-options.d.ts +9 -6
  217. package/dist/composites/option-select/OptionSelect.d.ts +23 -22
  218. package/dist/composites/option-select/index.d.ts +4 -4
  219. package/dist/composites/option-select/option-select-model.d.ts +35 -35
  220. package/dist/composites/page-header.d.ts +6 -6
  221. package/dist/composites/peer-connection-config.d.ts +9 -9
  222. package/dist/composites/phase-icon.d.ts +10 -3
  223. package/dist/composites/pipeline-builder.d.ts +21 -13
  224. package/dist/composites/pipeline-matrix-shared.d.ts +159 -150
  225. package/dist/composites/pipeline-runtime-selector.d.ts +12 -11
  226. package/dist/composites/pipeline-step.d.ts +39 -31
  227. package/dist/composites/placeholder-field/PlaceholderChipField.d.ts +23 -22
  228. package/dist/composites/placeholder-field/index.d.ts +1 -1
  229. package/dist/composites/provider-badge.d.ts +6 -5
  230. package/dist/composites/ptz-overlay.d.ts +38 -18
  231. package/dist/composites/qr-code.d.ts +24 -10
  232. package/dist/composites/reconnect-schedule.d.ts +22 -22
  233. package/dist/composites/resolve-step-default-model.d.ts +94 -94
  234. package/dist/composites/response-log.d.ts +7 -6
  235. package/dist/composites/root-model-source.d.ts +21 -10
  236. package/dist/composites/scope-picker.d.ts +49 -25
  237. package/dist/composites/section-card.d.ts +19 -11
  238. package/dist/composites/setting-row.d.ts +39 -21
  239. package/dist/composites/snapshot-button.d.ts +23 -19
  240. package/dist/composites/sort-header-button.d.ts +25 -8
  241. package/dist/composites/stat-card.d.ts +20 -8
  242. package/dist/composites/state-values-stream.d.ts +49 -24
  243. package/dist/composites/status-badge.d.ts +10 -8
  244. package/dist/composites/step-inspector/gate-control.d.ts +13 -12
  245. package/dist/composites/step-inspector/index.d.ts +8 -8
  246. package/dist/composites/step-inspector/layered-settings-form.d.ts +41 -30
  247. package/dist/composites/step-inspector/segmented-choice.d.ts +8 -7
  248. package/dist/composites/step-inspector/setting-values.d.ts +13 -8
  249. package/dist/composites/step-inspector/step-detail-dock.d.ts +39 -23
  250. package/dist/composites/step-inspector/step-inspector-panel.d.ts +34 -28
  251. package/dist/composites/step-inspector/step-model-row.d.ts +29 -24
  252. package/dist/composites/step-inspector/step-search.d.ts +11 -11
  253. package/dist/composites/step-timings.d.ts +7 -6
  254. package/dist/composites/step-tree.d.ts +17 -12
  255. package/dist/composites/stream-broker-selector.d.ts +29 -8
  256. package/dist/composites/stream-debug/stream-debug-overlay.d.ts +40 -40
  257. package/dist/composites/stream-debug/webrtc-debug-stats.d.ts +144 -129
  258. package/dist/composites/stream-panel.d.ts +212 -201
  259. package/dist/composites/table-sort.d.ts +61 -61
  260. package/dist/composites/timezone-selector.d.ts +15 -13
  261. package/dist/composites/training/send-frame-to-training.d.ts +5 -4
  262. package/dist/composites/training/training-collection-picker.d.ts +4 -3
  263. package/dist/composites/training/training-refusal-text.d.ts +6 -6
  264. package/dist/composites/unit-picker/UnitPicker.d.ts +19 -14
  265. package/dist/composites/unit-picker/index.d.ts +1 -1
  266. package/dist/composites/use-data-table-filter.d.ts +19 -19
  267. package/dist/composites/version-badge.d.ts +19 -18
  268. package/dist/composites/webrtc-diagnostics/EndpointTestCard.d.ts +7 -7
  269. package/dist/composites/webrtc-diagnostics/HubSessionTestCard.d.ts +14 -14
  270. package/dist/composites/webrtc-diagnostics/RunReport.d.ts +10 -5
  271. package/dist/composites/webrtc-diagnostics/endpoint-probe.d.ts +41 -21
  272. package/dist/composites/webrtc-diagnostics/endpoint-test.d.ts +37 -32
  273. package/dist/composites/webrtc-diagnostics/format.d.ts +3 -3
  274. package/dist/composites/webrtc-diagnostics/ice-candidates.d.ts +49 -49
  275. package/dist/composites/webrtc-diagnostics/nat-mapping.d.ts +36 -36
  276. package/dist/composites/webrtc-diagnostics/session-run.d.ts +108 -95
  277. package/dist/composites/webrtc-diagnostics/session-verdict.d.ts +29 -20
  278. package/dist/composites/widget-panel.d.ts +23 -23
  279. package/dist/composites/widget-slot.d.ts +35 -17
  280. package/dist/contexts/custom-field-renderers.d.ts +53 -17
  281. package/dist/contexts/device-context.d.ts +32 -12
  282. package/dist/contexts/device-quick-detail.d.ts +13 -4
  283. package/dist/contexts/player-overlays.d.ts +82 -42
  284. package/dist/contexts/recorded-playback.d.ts +40 -18
  285. package/dist/contexts/system-context.d.ts +28 -13
  286. package/dist/contexts/vod-playback.d.ts +39 -22
  287. package/dist/contexts/widget-registry.d.ts +139 -102
  288. package/dist/contexts/zone-editing.d.ts +69 -46
  289. package/dist/generated/system-hooks.d.ts +17 -1
  290. package/dist/hooks/index.d.ts +43 -43
  291. package/dist/hooks/turn-server-cache.d.ts +69 -69
  292. package/dist/hooks/use-capability-presence.d.ts +65 -28
  293. package/dist/hooks/use-cluster-nodes.d.ts +54 -27
  294. package/dist/hooks/use-device-autotrack.d.ts +7 -7
  295. package/dist/hooks/use-device-battery.d.ts +24 -11
  296. package/dist/hooks/use-device-cap-slice.d.ts +15 -15
  297. package/dist/hooks/use-device-capability.d.ts +61 -27
  298. package/dist/hooks/use-device-detections.d.ts +32 -32
  299. package/dist/hooks/use-device-features.d.ts +18 -18
  300. package/dist/hooks/use-device-list-page-size.d.ts +19 -6
  301. package/dist/hooks/use-device-network-link.d.ts +15 -7
  302. package/dist/hooks/use-device-proxy.d.ts +98 -92
  303. package/dist/hooks/use-device-snapshot.d.ts +23 -23
  304. package/dist/hooks/use-device-webrtc.d.ts +211 -205
  305. package/dist/hooks/use-devices.d.ts +9 -9
  306. package/dist/hooks/use-doorbell-events.d.ts +13 -13
  307. package/dist/hooks/use-event-stream.d.ts +6 -3
  308. package/dist/hooks/use-is-mobile.d.ts +5 -5
  309. package/dist/hooks/use-live-buffer.d.ts +5 -5
  310. package/dist/hooks/use-live-event.d.ts +1 -1
  311. package/dist/hooks/use-navigation.d.ts +20 -20
  312. package/dist/hooks/use-optimistic-slice.d.ts +13 -13
  313. package/dist/hooks/use-persisted-page-size.d.ts +10 -10
  314. package/dist/hooks/use-ptz.d.ts +108 -108
  315. package/dist/hooks/use-stationary-overlay.d.ts +37 -37
  316. package/dist/hooks/use-system-query.d.ts +33 -10
  317. package/dist/hooks/use-url-query.d.ts +3 -3
  318. package/dist/icons/index.d.ts +2 -2
  319. package/dist/icons/provider-icons.d.ts +2 -2
  320. package/dist/icons/status-icons.d.ts +2 -2
  321. package/dist/index.cjs +124 -69
  322. package/dist/index.d.ts +31 -27
  323. package/dist/index.js +124 -69
  324. package/dist/lib/cap-error.d.ts +18 -39
  325. package/dist/lib/cn.d.ts +1 -1
  326. package/dist/lib/fleet-query-defaults.d.ts +68 -34
  327. package/dist/lib/format-control-datetime.d.ts +16 -16
  328. package/dist/lib/format-duration.d.ts +12 -12
  329. package/dist/lib/format-last-seen.d.ts +5 -18
  330. package/dist/lib/format-numeric.d.ts +7 -7
  331. package/dist/lib/hub-mount.d.ts +8 -42
  332. package/dist/lib/index.d.ts +21 -21
  333. package/dist/lib/phase-config.d.ts +24 -11
  334. package/dist/lib/pipeline-mirror.d.ts +16 -16
  335. package/dist/lib/recorded-control-protocol.d.ts +41 -43
  336. package/dist/lib/resolve-sensor-display.d.ts +36 -20
  337. package/dist/lib/responsive.d.ts +54 -54
  338. package/dist/lib/scrub-controller.d.ts +75 -78
  339. package/dist/lib/shared-context.d.ts +27 -2
  340. package/dist/lib/tailwind-variants.d.ts +20 -20
  341. package/dist/primitives/badge.d.ts +5 -10
  342. package/dist/primitives/bottom-sheet.d.ts +7 -7
  343. package/dist/primitives/button.d.ts +5 -9
  344. package/dist/primitives/card.d.ts +4 -8
  345. package/dist/primitives/checkbox.d.ts +3 -4
  346. package/dist/primitives/collapsible-card.d.ts +23 -13
  347. package/dist/primitives/dialog.d.ts +33 -59
  348. package/dist/primitives/dropdown.d.ts +13 -13
  349. package/dist/primitives/floating-panel.d.ts +41 -20
  350. package/dist/primitives/icon-button.d.ts +8 -12
  351. package/dist/primitives/index.d.ts +22 -22
  352. package/dist/primitives/input.d.ts +6 -16
  353. package/dist/primitives/label.d.ts +3 -4
  354. package/dist/primitives/mobile-drawer.d.ts +8 -8
  355. package/dist/primitives/password-input.d.ts +18 -18
  356. package/dist/primitives/popover.d.ts +7 -7
  357. package/dist/primitives/scroll-area.d.ts +3 -4
  358. package/dist/primitives/select.d.ts +20 -20
  359. package/dist/primitives/separator.d.ts +4 -8
  360. package/dist/primitives/skeleton.d.ts +3 -4
  361. package/dist/primitives/switch.d.ts +6 -6
  362. package/dist/primitives/tabs.d.ts +26 -26
  363. package/dist/primitives/tooltip.d.ts +12 -12
  364. package/dist/theme/create-theme.d.ts +1 -1
  365. package/dist/theme/defaults.d.ts +1 -1
  366. package/dist/theme/index.d.ts +6 -6
  367. package/dist/theme/theme-provider.d.ts +8 -7
  368. package/dist/theme/theme-to-css.d.ts +1 -1
  369. package/dist/theme/types.d.ts +98 -100
  370. package/dist/theme/use-theme-mode.d.ts +1 -1
  371. package/dist/trpc-react.d.ts +23 -3
  372. package/dist/widgets/host-widgets.d.ts +4 -4
  373. package/package.json +8 -4
  374. package/src/tailwind/camstack-theme.css +11 -0
  375. package/dist/composites/unit-picker/UnitPicker.spec.d.ts +0 -1
@@ -1,106 +1,127 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceProxy, SliceHandle } from '@camstack/types';
3
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
4
- import { ControlDateTimeFormat } from '../../lib/format-control-datetime';
5
- import { DeviceItemDevice } from '../device-item/helpers';
1
+ /**
2
+ * SensorValueAtom — read-only badge for Sensor / Presence device rows.
3
+ *
4
+ * Renders a compact inline badge showing the device's current value:
5
+ * - typed numeric roles (temperature/humidity/ambient-light/pressure):
6
+ * value + canonical unit from ROLE_DESCRIPTOR (not sourceInfo)
7
+ * - generic numeric-sensor role: value + unit from the SLICE (populated
8
+ * live by the HA provider from state.attributes.unit_of_measurement)
9
+ * - binary roles: on/off label coloured per state
10
+ * - presence: Home / Away / zone name
11
+ *
12
+ * Returns null when no descriptor matches the role, or when the slice
13
+ * has not yet landed (binding still resolving, or cap unbound).
14
+ *
15
+ * The proxy state is accessed via a typed per-role accessor stored in
16
+ * `SensorDescriptor.getSliceHandle`. Each accessor is a concrete arrow
17
+ * into the typed `DeviceProxy['state']` shape — no dynamic string
18
+ * indexing. The shared handle type is `SliceHandle<unknown>` so the
19
+ * discriminated union can hold all three descriptor kinds without casts
20
+ * at the call site; narrowing occurs after `useDeviceStateSlice`.
21
+ */
22
+ import type { ReactNode } from "react";
23
+ import type { DeviceProxy, SliceHandle } from "@camstack/types";
24
+ import { type UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
25
+ import { type ControlDateTimeFormat } from "../../lib/format-control-datetime";
26
+ import type { DeviceItemDevice } from "../device-item/helpers";
6
27
  interface NumericDescriptor {
7
- readonly kind: 'numeric';
8
- /** Field in the slice that holds the numeric value. */
9
- readonly field: string;
10
- /** Canonical display unit for TYPED roles (temperature → '°C', humidity → '%',
11
- * ambient-light → 'lx', pressure → 'hPa'). When present the UI renders this
12
- * directly WITHOUT consulting the slice or sourceInfo.
13
- * For the generic `numeric-sensor` role this is `undefined` — the unit is
14
- * read live from the slice (`slice.unit`). */
15
- readonly canonicalUnit?: string;
16
- /** Accessor into DeviceProxy['state'] — returns a typed slice handle. */
17
- readonly getSliceHandle: (state: DeviceProxy['state']) => SliceHandle<unknown>;
28
+ readonly kind: "numeric";
29
+ /** Field in the slice that holds the numeric value. */
30
+ readonly field: string;
31
+ /** Canonical display unit for TYPED roles (temperature → '°C', humidity → '%',
32
+ * ambient-light → 'lx', pressure → 'hPa'). When present the UI renders this
33
+ * directly WITHOUT consulting the slice or sourceInfo.
34
+ * For the generic `numeric-sensor` role this is `undefined` — the unit is
35
+ * read live from the slice (`slice.unit`). */
36
+ readonly canonicalUnit?: string;
37
+ /** Accessor into DeviceProxy['state'] — returns a typed slice handle. */
38
+ readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
18
39
  }
19
40
  interface BinaryDescriptor {
20
- readonly kind: 'binary';
21
- /** Field in the slice that holds the boolean trigger. */
22
- readonly field: string;
23
- /** Label shown when the boolean field is truthy. */
24
- readonly onLabel: string;
25
- /** Label shown when the boolean field is falsy. */
26
- readonly offLabel: string;
27
- readonly getSliceHandle: (state: DeviceProxy['state']) => SliceHandle<unknown>;
41
+ readonly kind: "binary";
42
+ /** Field in the slice that holds the boolean trigger. */
43
+ readonly field: string;
44
+ /** Label shown when the boolean field is truthy. */
45
+ readonly onLabel: string;
46
+ /** Label shown when the boolean field is falsy. */
47
+ readonly offLabel: string;
48
+ readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
28
49
  }
29
50
  interface PresenceDescriptor {
30
- readonly kind: 'presence';
31
- readonly getSliceHandle: (state: DeviceProxy['state']) => SliceHandle<unknown>;
51
+ readonly kind: "presence";
52
+ readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
32
53
  }
33
54
  /**
34
- * String-valued sensor whose slice holds `{ value: string, lastFetchedAt }`.
35
- * Used for HA free-text sensors (IP address, SSID, firmware version, …) that
36
- * have no numeric device_class and whose state is a plain string.
37
- */
55
+ * String-valued sensor whose slice holds `{ value: string, lastFetchedAt }`.
56
+ * Used for HA free-text sensors (IP address, SSID, firmware version, …) that
57
+ * have no numeric device_class and whose state is a plain string.
58
+ */
38
59
  interface StringDescriptor {
39
- readonly kind: 'string';
40
- readonly getSliceHandle: (state: DeviceProxy['state']) => SliceHandle<unknown>;
60
+ readonly kind: "string";
61
+ readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
41
62
  }
42
63
  /**
43
- * Date / timestamp sensor whose slice holds `{ value: string, format? }`
44
- * carrying a raw ISO string (e.g. '2025-12-02T09:36:12+00:00'). Rendered
45
- * locale-formatted via `formatControlDateTime`. The slice's own `format` (seeded
46
- * by the HA provider from the entity's `device_class` — `timestamp` → 'datetime',
47
- * `date` → 'date', time-only → 'time') selects the shape; `descriptor.format` is
48
- * the fallback for slices adopted before the field was threaded ('datetime').
49
- */
64
+ * Date / timestamp sensor whose slice holds `{ value: string, format? }`
65
+ * carrying a raw ISO string (e.g. '2025-12-02T09:36:12+00:00'). Rendered
66
+ * locale-formatted via `formatControlDateTime`. The slice's own `format` (seeded
67
+ * by the HA provider from the entity's `device_class` — `timestamp` → 'datetime',
68
+ * `date` → 'date', time-only → 'time') selects the shape; `descriptor.format` is
69
+ * the fallback for slices adopted before the field was threaded ('datetime').
70
+ */
50
71
  interface DateTimeDescriptor {
51
- readonly kind: 'datetime';
52
- readonly format: ControlDateTimeFormat;
53
- readonly getSliceHandle: (state: DeviceProxy['state']) => SliceHandle<unknown>;
72
+ readonly kind: "datetime";
73
+ readonly format: ControlDateTimeFormat;
74
+ readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
54
75
  }
55
76
  export type SensorDescriptor = NumericDescriptor | BinaryDescriptor | PresenceDescriptor | StringDescriptor | DateTimeDescriptor;
56
77
  /**
57
- * Binary fallback for the `battery-sensor` role.
58
- *
59
- * HA assigns role `battery-sensor` to BOTH numeric battery entities
60
- * (`sensor.*` device_class=battery → cap `numeric-sensor`) AND binary battery
61
- * entities (`binary_sensor.*` device_class=battery → cap `binary`, e.g. a
62
- * HomeMatic `LOW_BAT` flag). When the numeric slice is absent the binary slice
63
- * is rendered instead, with battery-specific polarity: `on:true` means LOW
64
- * (bad → warning style + "Low"), `on:false` means Normal (neutral).
65
- */
78
+ * Binary fallback for the `battery-sensor` role.
79
+ *
80
+ * HA assigns role `battery-sensor` to BOTH numeric battery entities
81
+ * (`sensor.*` device_class=battery → cap `numeric-sensor`) AND binary battery
82
+ * entities (`binary_sensor.*` device_class=battery → cap `binary`, e.g. a
83
+ * HomeMatic `LOW_BAT` flag). When the numeric slice is absent the binary slice
84
+ * is rendered instead, with battery-specific polarity: `on:true` means LOW
85
+ * (bad → warning style + "Low"), `on:false` means Normal (neutral).
86
+ */
66
87
  export declare const BINARY_BATTERY_DESCRIPTOR: BinaryDescriptor;
67
88
  /** True for the role that can resolve to either a numeric or a binary slice. */
68
89
  export declare function isBatterySensorRole(role: string | null | undefined): boolean;
69
90
  /**
70
- * A numeric slice counts as "present" only when it carries a real numeric value
71
- * at the descriptor field — a cold-start slice (`{ value: 0, lastFetchedAt: 0 }`)
72
- * or a binary slice (no numeric field) does NOT, so the binary fallback wins.
73
- */
91
+ * A numeric slice counts as "present" only when it carries a real numeric value
92
+ * at the descriptor field — a cold-start slice (`{ value: 0, lastFetchedAt: 0 }`)
93
+ * or a binary slice (no numeric field) does NOT, so the binary fallback wins.
94
+ */
74
95
  export declare function hasBatteryNumericValue(slice: unknown, field: string): boolean;
75
96
  /**
76
- * Keyed by DeviceRole string value. Every entry maps a role to the
77
- * exact proxy state accessor + rendering instructions. The accessor
78
- * avoids dynamic string indexing — each one is a concrete property
79
- * access on the typed `DeviceProxy['state']` shape.
80
- *
81
- * Canonical unit rules:
82
- * - Typed roles (temperature/humidity/ambient-light/pressure/power/energy)
83
- * carry a `canonicalUnit` constant. The slice is normalised to one unit
84
- * so no per-device lookup is needed.
85
- * - Generic `numeric-sensor` has no `canonicalUnit`. The unit is read live
86
- * from the slice (`slice.unit`) as populated by the provider from the
87
- * upstream source on every state push.
88
- */
97
+ * Keyed by DeviceRole string value. Every entry maps a role to the
98
+ * exact proxy state accessor + rendering instructions. The accessor
99
+ * avoids dynamic string indexing — each one is a concrete property
100
+ * access on the typed `DeviceProxy['state']` shape.
101
+ *
102
+ * Canonical unit rules:
103
+ * - Typed roles (temperature/humidity/ambient-light/pressure/power/energy)
104
+ * carry a `canonicalUnit` constant. The slice is normalised to one unit
105
+ * so no per-device lookup is needed.
106
+ * - Generic `numeric-sensor` has no `canonicalUnit`. The unit is read live
107
+ * from the slice (`slice.unit`) as populated by the provider from the
108
+ * upstream source on every state push.
109
+ */
89
110
  export declare const ROLE_DESCRIPTOR: Record<string, SensorDescriptor>;
90
111
  export interface StringSliceValue {
91
- readonly value: string;
112
+ readonly value: string;
92
113
  }
93
114
  export declare function isStringSliceValue(v: unknown): v is StringSliceValue;
94
115
  /**
95
- * The enum-sensor slice carries an optional `format` ('date' | 'time' |
96
- * 'datetime') for `DateTimeSensor`-role sensors. Read it off the live slice so
97
- * each sensor renders its true shape; returns `undefined` when absent (older
98
- * adoptions) so the caller falls back to the descriptor default.
99
- */
116
+ * The enum-sensor slice carries an optional `format` ('date' | 'time' |
117
+ * 'datetime') for `DateTimeSensor`-role sensors. Read it off the live slice so
118
+ * each sensor renders its true shape; returns `undefined` when absent (older
119
+ * adoptions) so the caller falls back to the descriptor default.
120
+ */
100
121
  export declare function readSliceDateTimeFormat(slice: unknown): ControlDateTimeFormat | undefined;
101
122
  export interface SensorValueAtomProps {
102
- readonly trpc: UseDeviceProxyTrpc;
103
- readonly device: DeviceItemDevice;
123
+ readonly trpc: UseDeviceProxyTrpc;
124
+ readonly device: DeviceItemDevice;
104
125
  }
105
126
  export declare function SensorValueAtom({ trpc, device }: SensorValueAtomProps): ReactNode;
106
127
  export {};
@@ -1,13 +1,13 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceControlProps } from './control-registry';
1
+ import type { ReactNode } from "react";
2
+ import type { DeviceControlProps } from "./control-registry";
3
3
  /**
4
- * SwitchHeroCard — large tap-toggle hero for Switch / Siren devices.
5
- *
6
- * Renders (Spec §3):
7
- * - A power glyph tinted by on/off state (success when on, muted when off).
8
- * - A large TAP TOGGLE for on/off — a single tap flips state. This is NOT a
9
- * SlideToggle; slide-to-confirm is reserved for safety-gated locks ONLY.
10
- *
11
- * Cap-gated on `switch` — returns null when the device has no switch cap.
12
- */
4
+ * SwitchHeroCard — large tap-toggle hero for Switch / Siren devices.
5
+ *
6
+ * Renders (Spec §3):
7
+ * - A power glyph tinted by on/off state (success when on, muted when off).
8
+ * - A large TAP TOGGLE for on/off — a single tap flips state. This is NOT a
9
+ * SlideToggle; slide-to-confirm is reserved for safety-gated locks ONLY.
10
+ *
11
+ * Cap-gated on `switch` — returns null when the device has no switch cap.
12
+ */
13
13
  export declare function SwitchHeroCard({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
@@ -1,3 +1,3 @@
1
- import { ReactNode } from 'react';
2
- import { ControlPanelProps } from './types';
1
+ import { type ReactNode } from "react";
2
+ import type { ControlPanelProps } from "./types";
3
3
  export declare function SwitchPanel({ trpc, deviceId, optimistic }: ControlPanelProps): ReactNode;
@@ -1,17 +1,17 @@
1
- import { ReactNode } from 'react';
1
+ import type { ReactNode } from "react";
2
2
  /**
3
- * TapToggle — plain tap-to-toggle on/off control.
4
- *
5
- * Spec §3: everyday on/off (switch, light, fan) uses a plain TAP TOGGLE.
6
- * slide-to-confirm is reserved for safety-gated actions (lock) ONLY. This
7
- * component must NEVER be built on `SlideToggle` — a single tap flips state.
8
- *
9
- * Presentational: the caller owns the cap mutation + optimistic update via
10
- * `onToggle`. Mirrors the `SwitchPanel` button treatment at hero scale.
11
- */
3
+ * TapToggle — plain tap-to-toggle on/off control.
4
+ *
5
+ * Spec §3: everyday on/off (switch, light, fan) uses a plain TAP TOGGLE.
6
+ * slide-to-confirm is reserved for safety-gated actions (lock) ONLY. This
7
+ * component must NEVER be built on `SlideToggle` — a single tap flips state.
8
+ *
9
+ * Presentational: the caller owns the cap mutation + optimistic update via
10
+ * `onToggle`. Mirrors the `SwitchPanel` button treatment at hero scale.
11
+ */
12
12
  export interface TapToggleProps {
13
- readonly on: boolean;
14
- readonly busy: boolean;
15
- readonly onToggle: () => void;
13
+ readonly on: boolean;
14
+ readonly busy: boolean;
15
+ readonly onToggle: () => void;
16
16
  }
17
17
  export declare function TapToggle({ on, busy, onToggle }: TapToggleProps): ReactNode;
@@ -1,17 +1,17 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceControlProps } from './control-registry';
1
+ import type { ReactNode } from "react";
2
+ import type { DeviceControlProps } from "./control-registry";
3
3
  /**
4
- * ThermostatHeroCard — circular gauge hero for thermostat / HVAC devices.
5
- *
6
- * Renders:
7
- * - SVG ring gauge: track + fill arc representing the setpoint fraction
8
- * - Centered current temperature (large, prominent)
9
- * - ArcKnob(s) at the setpoint fraction(s) riding the ring
10
- * - Single knob for heat / cool / auto / dry modes
11
- * - Two knobs (low + high) with a band fill for heat_cool mode
12
- * - Stepper (single) or "Low / High" display (range) for the setpoint
13
- * - Mode select
14
- *
15
- * Cap-gated: returns null when the device has no climateControl cap.
16
- */
17
- export declare function ThermostatHeroCard({ trpc, deviceId, features: _features, optimistic, }: DeviceControlProps): ReactNode;
4
+ * ThermostatHeroCard — circular gauge hero for thermostat / HVAC devices.
5
+ *
6
+ * Renders:
7
+ * - SVG ring gauge: track + fill arc representing the setpoint fraction
8
+ * - Centered current temperature (large, prominent)
9
+ * - ArcKnob(s) at the setpoint fraction(s) riding the ring
10
+ * - Single knob for heat / cool / auto / dry modes
11
+ * - Two knobs (low + high) with a band fill for heat_cool mode
12
+ * - Stepper (single) or "Low / High" display (range) for the setpoint
13
+ * - Mode select
14
+ *
15
+ * Cap-gated: returns null when the device has no climateControl cap.
16
+ */
17
+ export declare function ThermostatHeroCard({ trpc, deviceId, features: _features, optimistic }: DeviceControlProps): ReactNode;
@@ -1,17 +1,17 @@
1
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
1
+ import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
2
2
  /** Shared props for every control panel. `layout` selects the compact (row
3
- * popover) vs full (detail tab) presentation. `features` gates sub-controls
4
- * (e.g. cover position/tilt, fan speed/preset). */
3
+ * popover) vs full (detail tab) presentation. `features` gates sub-controls
4
+ * (e.g. cover position/tilt, fan speed/preset). */
5
5
  export interface ControlPanelProps {
6
- readonly trpc: UseDeviceProxyTrpc;
7
- readonly deviceId: number;
8
- readonly features: readonly string[] | undefined;
9
- readonly layout: 'compact' | 'full';
10
- /** Enable optimistic UI mode (default: true). Set to false to disable. */
11
- readonly optimistic?: boolean;
6
+ readonly trpc: UseDeviceProxyTrpc;
7
+ readonly deviceId: number;
8
+ readonly features: readonly string[] | undefined;
9
+ readonly layout: "compact" | "full";
10
+ /** Enable optimistic UI mode (default: true). Set to false to disable. */
11
+ readonly optimistic?: boolean;
12
12
  }
13
13
  /** Cap names whose presence (bound on a device) means it has a control surface.
14
- * Single source of truth shared by the row registry and the detail Controls tab
15
- * so the two never drift. */
14
+ * Single source of truth shared by the row registry and the detail Controls tab
15
+ * so the two never drift. */
16
16
  export declare const CONTROL_CAP_NAMES: readonly ["cover", "lock-control", "switch", "brightness", "fan-control", "climate-control", "media-player", "control", "pet-feeder"];
17
17
  export type ControlCapName = (typeof CONTROL_CAP_NAMES)[number];
@@ -1,11 +1,24 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceControlProps } from './control-registry';
3
1
  /**
4
- * UpdateInlineControl — compact firmware state for a device-list row.
5
- */
2
+ * Firmware/software Update controls for a `DeviceType.Update` device.
3
+ *
4
+ * Reads the `update` cap status slice (currentVersion / availableVersion /
5
+ * updatable / state / inProgress) and renders:
6
+ * - InlineControl (device-list row): a compact state badge — "Update
7
+ * available" (actionable) / "Installing…" / current version (up to date).
8
+ * - HeroCard (device-detail hero): the version transition + an Install button
9
+ * that calls `update.installUpdate()` when an update is available.
10
+ *
11
+ * Mirrors the cover/sensor controls' `useDeviceCapability` pattern so the row
12
+ * and the hero never diverge.
13
+ */
14
+ import type { ReactNode } from "react";
15
+ import type { DeviceControlProps } from "./control-registry";
16
+ /**
17
+ * UpdateInlineControl — compact firmware state for a device-list row.
18
+ */
6
19
  export declare function UpdateInlineControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
7
20
  /**
8
- * UpdateHeroCard — version transition + Install action for the device-detail
9
- * hero area.
10
- */
21
+ * UpdateHeroCard — version transition + Install action for the device-detail
22
+ * hero area.
23
+ */
11
24
  export declare function UpdateHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
@@ -1,36 +1,52 @@
1
- import { ReactNode } from 'react';
2
- import { VacuumState, TankStatus } from '@camstack/types';
3
- import { DeviceControlProps } from './control-registry';
1
+ /**
2
+ * Robot-vacuum controls for a `DeviceType.Vacuum` device.
3
+ *
4
+ * Reads the `vacuum-control` cap status slice (state / batteryLevel /
5
+ * fanSpeed / availableFanSpeeds) and renders:
6
+ * - VacuumInlineControl (device-list row): compact Start / Pause /
7
+ * Return-to-base buttons with state-aware highlight + a battery %
8
+ * badge.
9
+ * - VacuumHeroCard (device-detail hero): a state glyph + label, the
10
+ * full action set (Start / Pause / Stop / Return / Locate), a
11
+ * fan-speed selector built from `availableFanSpeeds`, and the
12
+ * battery readout.
13
+ *
14
+ * Mirrors the cover/update controls' `useDeviceCapability` pattern so the
15
+ * row and hero never diverge. Buttons are gated on `available`.
16
+ */
17
+ import type { ReactNode } from "react";
18
+ import type { VacuumState, TankStatus } from "@camstack/types";
19
+ import type { DeviceControlProps } from "./control-registry";
4
20
  export interface VacuumStateMeta {
5
- readonly label: string;
6
- /** Tailwind text-colour token for the state label. */
7
- readonly tone: string;
21
+ readonly label: string;
22
+ /** Tailwind text-colour token for the state label. */
23
+ readonly tone: string;
8
24
  }
9
25
  /**
10
- * Pure helper — maps a VacuumState (or undefined when no slice yet) to a
11
- * human label + colour tone. Exhaustive switch: a new enum member fails
12
- * the build.
13
- */
26
+ * Pure helper — maps a VacuumState (or undefined when no slice yet) to a
27
+ * human label + colour tone. Exhaustive switch: a new enum member fails
28
+ * the build.
29
+ */
14
30
  export declare function vacuumStateMeta(state: VacuumState | undefined): VacuumStateMeta;
15
31
  /** The four intrinsic tanks a vacuum cap can expose. */
16
- export type TankKind = 'cleanWater' | 'dirtyWater' | 'detergent' | 'dustBin';
17
- export type TankAlert = 'ok' | 'warning';
32
+ export type TankKind = "cleanWater" | "dirtyWater" | "detergent" | "dustBin";
33
+ export type TankAlert = "ok" | "warning";
18
34
  /**
19
- * Pure helper — classifies a tank as `ok` or `warning`.
20
- *
21
- * Clean-water + detergent are "supply" tanks: low is bad. Dirty-water +
22
- * dust-bin are "waste" tanks: full is bad. Prefers the numeric `level`
23
- * (thresholds 15 / 85), falling back to the discrete `status` flag. Both
24
- * unknown → `ok`. Exhaustive over TankKind.
25
- */
35
+ * Pure helper — classifies a tank as `ok` or `warning`.
36
+ *
37
+ * Clean-water + detergent are "supply" tanks: low is bad. Dirty-water +
38
+ * dust-bin are "waste" tanks: full is bad. Prefers the numeric `level`
39
+ * (thresholds 15 / 85), falling back to the discrete `status` flag. Both
40
+ * unknown → `ok`. Exhaustive over TankKind.
41
+ */
26
42
  export declare function tankAlert(kind: TankKind, tank: TankStatus): TankAlert;
27
43
  /**
28
- * VacuumInlineControl — compact, state-aware vacuum controls for a
29
- * device-list row. Start / Pause / Return-to-base + battery badge.
30
- */
44
+ * VacuumInlineControl — compact, state-aware vacuum controls for a
45
+ * device-list row. Start / Pause / Return-to-base + battery badge.
46
+ */
31
47
  export declare function VacuumInlineControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
32
48
  /**
33
- * VacuumHeroCard — full control surface for the device-detail hero area.
34
- * State label + action buttons + fan-speed selector + battery readout.
35
- */
49
+ * VacuumHeroCard — full control surface for the device-detail hero area.
50
+ * State label + action buttons + fan-speed selector + battery readout.
51
+ */
36
52
  export declare function VacuumHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
@@ -1,46 +1,62 @@
1
- import { ReactNode } from 'react';
2
- import { ValveState } from '@camstack/types';
3
- import { DeviceControlProps } from './control-registry';
1
+ /**
2
+ * Valve controls for a `DeviceType.Valve` device.
3
+ *
4
+ * Reads the `valve` cap status slice (state / position) and renders:
5
+ * - ValveInlineControl (device-list row): compact Open / Stop / Close
6
+ * icon-buttons with state-aware highlight + a small position % badge.
7
+ * - ValveHeroCard (device-detail hero): a bespoke state-tinted pipe +
8
+ * gate-valve SVG that doubles as a vertical drag surface when the
9
+ * valve is positionable, the full action set (Open / Stop / Close),
10
+ * and a position slider gated on `ValvePositionable`.
11
+ *
12
+ * Mirrors the cover controls' `useDeviceCapability` + `useOptimisticSlice`
13
+ * pattern so the row and hero never diverge. The button highlight reuses
14
+ * `coverHighlight` — the valve state enum is identical to the cover one.
15
+ * Buttons are gated on `available`.
16
+ */
17
+ import { type ReactNode } from "react";
18
+ import { type ValveState } from "@camstack/types";
19
+ import type { DeviceControlProps } from "./control-registry";
4
20
  export interface ValveStateMeta {
5
- readonly label: string;
6
- /** Tailwind text-colour token for the state label. */
7
- readonly tone: string;
21
+ readonly label: string;
22
+ /** Tailwind text-colour token for the state label. */
23
+ readonly tone: string;
8
24
  }
9
25
  /**
10
- * Pure helper — maps a ValveState (or undefined when no slice yet) to a
11
- * human label + colour tone. Exhaustive switch: a new enum member fails
12
- * the build.
13
- */
26
+ * Pure helper — maps a ValveState (or undefined when no slice yet) to a
27
+ * human label + colour tone. Exhaustive switch: a new enum member fails
28
+ * the build.
29
+ */
14
30
  export declare function valveStateMeta(state: ValveState | undefined): ValveStateMeta;
15
31
  /**
16
- * ValveInlineControl — compact, state-aware valve controls for a
17
- * device-list row. Open ▲ Stop ■ Close ▼ + optional position % badge.
18
- * Mirrors `CoverInlineControl` exactly. Must NOT blow out the row width.
19
- */
32
+ * ValveInlineControl — compact, state-aware valve controls for a
33
+ * device-list row. Open ▲ Stop ■ Close ▼ + optional position % badge.
34
+ * Mirrors `CoverInlineControl` exactly. Must NOT blow out the row width.
35
+ */
20
36
  export declare function ValveInlineControl({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
21
37
  /** Per-state visual tint tokens for the framed valve graphic. */
22
38
  export interface ValveGraphicTint {
23
- /** Tailwind class for the flow-glow wash over the pipe. */
24
- readonly glow: string;
25
- /** Tailwind text token driving the valve body via currentColor. */
26
- readonly accent: string;
27
- /** Whether to render the animated flow dashes (open / opening). */
28
- readonly flowing: boolean;
29
- /** Whether to render the transient-motion activity pulse. */
30
- readonly active: boolean;
39
+ /** Tailwind class for the flow-glow wash over the pipe. */
40
+ readonly glow: string;
41
+ /** Tailwind text token driving the valve body via currentColor. */
42
+ readonly accent: string;
43
+ /** Whether to render the animated flow dashes (open / opening). */
44
+ readonly flowing: boolean;
45
+ /** Whether to render the transient-motion activity pulse. */
46
+ readonly active: boolean;
31
47
  }
32
48
  export declare function valveGraphicTint(state: ValveState | undefined): ValveGraphicTint;
33
49
  /**
34
- * ValveHeroCard — full control surface for the device-detail hero area.
35
- *
36
- * Bespoke pipe + gate-valve graphic (drag surface when positionable) +
37
- * a large position % (or capitalized state when position is null) +
38
- * Open / Stop / Close hero buttons + a position slider gated on
39
- * `ValvePositionable` (additive to drag), and a read-only range when a
40
- * position is reported but not settable.
41
- *
42
- * Position support is detected via `ValveStatus.position !== null`; the
43
- * interactive setPosition surface is gated on `DeviceFeature.ValvePositionable`.
44
- * Only hides when the device truly has no valve cap.
45
- */
46
- export declare function ValveHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
50
+ * ValveHeroCard — full control surface for the device-detail hero area.
51
+ *
52
+ * Bespoke pipe + gate-valve graphic (drag surface when positionable) +
53
+ * a large position % (or capitalized state when position is null) +
54
+ * Open / Stop / Close hero buttons + a position slider gated on
55
+ * `ValvePositionable` (additive to drag), and a read-only range when a
56
+ * position is reported but not settable.
57
+ *
58
+ * Position support is detected via `ValveStatus.position !== null`; the
59
+ * interactive setPosition surface is gated on `DeviceFeature.ValvePositionable`.
60
+ * Only hides when the device truly has no valve cap.
61
+ */
62
+ export declare function ValveHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
@@ -1,41 +1,58 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceControlProps } from './control-registry';
1
+ /**
2
+ * Water-heater controls for a `DeviceType.WaterHeater` device.
3
+ *
4
+ * Reads the `water-heater` cap status slice (current / target temp /
5
+ * operation mode / away / bounds) and renders:
6
+ * - WaterHeaterInlineControl (device-list row): a compact
7
+ * `current°→target°` readout + a tiny mode hint. Row-narrow.
8
+ * - WaterHeaterHeroCard (device-detail hero): a bespoke state-tinted
9
+ * tank / boiler SVG (water fill + heating-element glow when actively
10
+ * heating) in the framed-box language, a target-temp stepper with
11
+ * min/max clamp, an operation-mode `<select>`, an "Away" toggle
12
+ * (only when `away !== null`), and the current-temp readout.
13
+ *
14
+ * Mirrors the climate / valve controls' `useDeviceCapability` +
15
+ * `useOptimisticSlice` pattern. Controls are gated on `available`. The
16
+ * decorative SVG is aria-hidden.
17
+ */
18
+ import { type ReactNode } from "react";
19
+ import type { DeviceControlProps } from "./control-registry";
3
20
  /** Heating phase derived from the slice — drives the tank tint + element glow. */
4
- export type WaterHeaterPhase = 'heating' | 'idle' | 'off';
21
+ export type WaterHeaterPhase = "heating" | "idle" | "off";
5
22
  export interface WaterHeaterTint {
6
- /** Tailwind class for the wash behind the tank. */
7
- readonly glow: string;
8
- /** Tailwind text token driving the tank via currentColor. */
9
- readonly accent: string;
10
- /** Whether to render the heating-element glow. */
11
- readonly heating: boolean;
23
+ /** Tailwind class for the wash behind the tank. */
24
+ readonly glow: string;
25
+ /** Tailwind text token driving the tank via currentColor. */
26
+ readonly accent: string;
27
+ /** Whether to render the heating-element glow. */
28
+ readonly heating: boolean;
12
29
  }
13
30
  /**
14
- * Pure helper — maps a phase to a tint. Exhaustive over WaterHeaterPhase
15
- * (a new member fails the build).
16
- *
17
- * heating → warning (element glow)
18
- * idle → primary (warm but settled)
19
- * off → muted
20
- */
31
+ * Pure helper — maps a phase to a tint. Exhaustive over WaterHeaterPhase
32
+ * (a new member fails the build).
33
+ *
34
+ * heating → warning (element glow)
35
+ * idle → primary (warm but settled)
36
+ * off → muted
37
+ */
21
38
  export declare function waterHeaterTint(phase: WaterHeaterPhase): WaterHeaterTint;
22
39
  /**
23
- * Heuristic heating phase: off when the operation mode is 'off' (or null);
24
- * heating when current < target (actively warming); otherwise idle.
25
- */
40
+ * Heuristic heating phase: off when the operation mode is 'off' (or null);
41
+ * heating when current < target (actively warming); otherwise idle.
42
+ */
26
43
  export declare function waterHeaterPhase(operationMode: string | null, currentTemp: number | null, targetTemp: number | null): WaterHeaterPhase;
27
44
  /**
28
- * WaterHeaterInlineControl — compact current→target readout + mode hint
29
- * for a device-list row. Must NOT blow out the row width.
30
- */
31
- export declare function WaterHeaterInlineControl({ trpc, deviceId, optimistic, }: DeviceControlProps): ReactNode;
45
+ * WaterHeaterInlineControl — compact current→target readout + mode hint
46
+ * for a device-list row. Must NOT blow out the row width.
47
+ */
48
+ export declare function WaterHeaterInlineControl({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
32
49
  /**
33
- * WaterHeaterHeroCard — full control surface for the device-detail hero.
34
- *
35
- * Bespoke tank graphic + a large current-temp readout + a target-temp
36
- * stepper (clamped to min/maxTemp) + an operation-mode `<select>` + an
37
- * "Away" toggle (only when `away !== null`) + the current-temp readout.
38
- * Gated on `available`. Only hides when the device truly has no
39
- * water-heater cap.
40
- */
50
+ * WaterHeaterHeroCard — full control surface for the device-detail hero.
51
+ *
52
+ * Bespoke tank graphic + a large current-temp readout + a target-temp
53
+ * stepper (clamped to min/maxTemp) + an operation-mode `<select>` + an
54
+ * "Away" toggle (only when `away !== null`) + the current-temp readout.
55
+ * Gated on `available`. Only hides when the device truly has no
56
+ * water-heater cap.
57
+ */
41
58
  export declare function WaterHeaterHeroCard({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;