@camstack/ui-library 1.2.257 → 1.2.258

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 +123 -69
  322. package/dist/index.d.ts +31 -27
  323. package/dist/index.js +123 -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,33 +1,39 @@
1
+ /**
2
+ * DeviceActivityPanel — unified Logs / Events / State Values viewer.
3
+ *
4
+ * Three internal tabs:
5
+ * - Logs → LogStream (scoped to deviceId)
6
+ * - Events → EventStream (multiselect of EventCategory + free text)
7
+ * - State Values → StateValuesStream (DeviceStateChanged subscription)
8
+ *
9
+ * Only the active tab is rendered. tRPC subscriptions in the inactive
10
+ * tabs are torn down because the components are unmounted — keeps the
11
+ * websocket lean even when many devices have a panel open.
12
+ *
13
+ * The panel hosts three live buffers (`logs` / `events` / `state`) and
14
+ * passes them to the streams. Subscriptions still only fire while
15
+ * their stream is mounted, but the entries already received persist
16
+ * across tab switches — so reopening the State tab doesn't reset
17
+ * the visible list to empty just because the global event ring
18
+ * buffer evicted the older state-changed entries.
19
+ */
20
+ import { type JSX } from "react";
1
21
  export interface DeviceActivityPanelProps {
2
- readonly deviceId: number;
3
- /** When this device is a Container, its own id — the Logs tab then shows the
4
- * whole subtree (container + every child) by filtering `containerDeviceId`
5
- * instead of `deviceId`. Omit/undefined for a non-container. */
6
- readonly containerDeviceId?: number;
7
- /** Initial event categories the user wants tracked. Defaults to "all". */
8
- readonly defaultEventCategories?: readonly string[];
9
- /** Initial state-cap whitelist. Empty = show every cap that fires. */
10
- readonly defaultStateCaps?: readonly string[];
11
- /** Tab to show first. */
12
- readonly initialTab?: ActivityTabId;
13
- /** CSS class for the panel root. */
14
- readonly className?: string;
15
- /** Max content height (passed to the active stream). */
16
- readonly maxHeight?: string;
22
+ readonly deviceId: number;
23
+ /** When this device is a Container, its own id — the Logs tab then shows the
24
+ * whole subtree (container + every child) by filtering `containerDeviceId`
25
+ * instead of `deviceId`. Omit/undefined for a non-container. */
26
+ readonly containerDeviceId?: number;
27
+ /** Initial event categories the user wants tracked. Defaults to "all". */
28
+ readonly defaultEventCategories?: readonly string[];
29
+ /** Initial state-cap whitelist. Empty = show every cap that fires. */
30
+ readonly defaultStateCaps?: readonly string[];
31
+ /** Tab to show first. */
32
+ readonly initialTab?: ActivityTabId;
33
+ /** CSS class for the panel root. */
34
+ readonly className?: string;
35
+ /** Max content height (passed to the active stream). */
36
+ readonly maxHeight?: string;
17
37
  }
18
- declare const TABS: readonly [{
19
- readonly id: "logs";
20
- readonly label: "Logs";
21
- readonly icon: import('react').ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & import('react').RefAttributes<SVGSVGElement>>;
22
- }, {
23
- readonly id: "events";
24
- readonly label: "Events";
25
- readonly icon: import('react').ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & import('react').RefAttributes<SVGSVGElement>>;
26
- }, {
27
- readonly id: "state";
28
- readonly label: "State";
29
- readonly icon: import('react').ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & import('react').RefAttributes<SVGSVGElement>>;
30
- }];
31
- export type ActivityTabId = (typeof TABS)[number]['id'];
32
- export declare function DeviceActivityPanel({ deviceId, containerDeviceId, defaultEventCategories, defaultStateCaps, initialTab, className, maxHeight, }: DeviceActivityPanelProps): import("react").JSX.Element;
33
- export {};
38
+ export type ActivityTabId = "logs" | "events" | "state";
39
+ export declare function DeviceActivityPanel({ deviceId, containerDeviceId, defaultEventCategories, defaultStateCaps, initialTab, className, maxHeight }: DeviceActivityPanelProps): JSX.Element;
@@ -1,38 +1,38 @@
1
- import { ReactNode } from 'react';
1
+ import { type ReactNode, type JSX } from "react";
2
2
  export interface DeviceCardBadge {
3
- /** Badge label text */
4
- label: string;
5
- /** Optional icon rendered before the label */
6
- icon?: ReactNode;
7
- /** Click handler — makes the badge interactive */
8
- onClick?: () => void;
3
+ /** Badge label text */
4
+ label: string;
5
+ /** Optional icon rendered before the label */
6
+ icon?: ReactNode;
7
+ /** Click handler — makes the badge interactive */
8
+ onClick?: () => void;
9
9
  }
10
10
  export interface DeviceCardAction {
11
- /** Icon to render */
12
- icon: ReactNode;
13
- /** Tooltip / aria-label */
14
- label: string;
15
- /** Click handler */
16
- onClick: () => void;
11
+ /** Icon to render */
12
+ icon: ReactNode;
13
+ /** Tooltip / aria-label */
14
+ label: string;
15
+ /** Click handler */
16
+ onClick: () => void;
17
17
  }
18
18
  export interface DeviceCardProps {
19
- /** Primary title (e.g., device name) */
20
- title: string;
21
- /** Secondary text (e.g., model, IP) */
22
- subtitle?: string;
23
- /** Status: determines the color of the status dot */
24
- status?: 'online' | 'offline' | 'warning' | 'unknown';
25
- /** Whether this card is currently selected */
26
- selected?: boolean;
27
- /** Click handler for the card body */
28
- onClick?: () => void;
29
- /** Clickable badges (e.g., stream profiles) */
30
- badges?: DeviceCardBadge[];
31
- /** Action icons shown at the bottom (e.g., PTZ, events) */
32
- actions?: DeviceCardAction[];
33
- /** Content rendered at the bottom when status is offline (e.g., Connect button) */
34
- offlineAction?: ReactNode;
35
- /** Additional CSS classes */
36
- className?: string;
19
+ /** Primary title (e.g., device name) */
20
+ title: string;
21
+ /** Secondary text (e.g., model, IP) */
22
+ subtitle?: string;
23
+ /** Status: determines the color of the status dot */
24
+ status?: "online" | "offline" | "warning" | "unknown";
25
+ /** Whether this card is currently selected */
26
+ selected?: boolean;
27
+ /** Click handler for the card body */
28
+ onClick?: () => void;
29
+ /** Clickable badges (e.g., stream profiles) */
30
+ badges?: DeviceCardBadge[];
31
+ /** Action icons shown at the bottom (e.g., PTZ, events) */
32
+ actions?: DeviceCardAction[];
33
+ /** Content rendered at the bottom when status is offline (e.g., Connect button) */
34
+ offlineAction?: ReactNode;
35
+ /** Additional CSS classes */
36
+ className?: string;
37
37
  }
38
- export declare function DeviceCard({ title, subtitle, status, selected, onClick, badges, actions, offlineAction, className, }: DeviceCardProps): import("react").JSX.Element;
38
+ export declare function DeviceCard({ title, subtitle, status, selected, onClick, badges, actions, offlineAction, className }: DeviceCardProps): JSX.Element;
@@ -1,3 +1,3 @@
1
- import { ReactNode } from 'react';
2
- import { ControlPanelProps } from './types.js';
1
+ import type { ReactNode } from "react";
2
+ import type { ControlPanelProps } from "./types.js";
3
3
  export declare function AcPanel({ trpc, deviceId, layout, optimistic }: ControlPanelProps): ReactNode;
@@ -1,47 +1,47 @@
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
- * Row-sized alarm control: the shared Disarm + arm-mode segment strip only —
5
- * no glyph, no state label, no card padding. Cap-gated on `alarm-panel`.
6
- * Drops into a 200 px control column without towering over sibling rows.
7
- */
4
+ * Row-sized alarm control: the shared Disarm + arm-mode segment strip only —
5
+ * no glyph, no state label, no card padding. Cap-gated on `alarm-panel`.
6
+ * Drops into a 200 px control column without towering over sibling rows.
7
+ */
8
8
  /**
9
- * The row/card-sized alarm control — ONE LINE, always.
10
- *
11
- * Two earlier attempts were wrong in instructive ways. The first rendered only
12
- * the segment strip, so the sole sign a panel was armed was which of four
13
- * buttons happened to be highlighted — and in a grid card the strip overflowed
14
- * and cut that button off. The second let the strip WRAP, which stopped the
15
- * overflow by making the row two and three lines tall.
16
- *
17
- * A state badge plus four buttons does not fit a phone-width row, and no amount
18
- * of sizing makes it. So the row shows what a row is for — **the state** — and
19
- * offers the modes through a select, which is one line at any width. The four
20
- * segments live in the hero, where there is room for them.
21
- *
22
- * A refusal (D630) still has to be visible here, one line or not — it is a
23
- * small danger badge (icon only, `title` carries the full message, same
24
- * pattern as `OfflineBadge`) appended after the select. It never grows the
25
- * row past one line.
26
- */
9
+ * The row/card-sized alarm control — ONE LINE, always.
10
+ *
11
+ * Two earlier attempts were wrong in instructive ways. The first rendered only
12
+ * the segment strip, so the sole sign a panel was armed was which of four
13
+ * buttons happened to be highlighted — and in a grid card the strip overflowed
14
+ * and cut that button off. The second let the strip WRAP, which stopped the
15
+ * overflow by making the row two and three lines tall.
16
+ *
17
+ * A state badge plus four buttons does not fit a phone-width row, and no amount
18
+ * of sizing makes it. So the row shows what a row is for — **the state** — and
19
+ * offers the modes through a select, which is one line at any width. The four
20
+ * segments live in the hero, where there is room for them.
21
+ *
22
+ * A refusal (D630) still has to be visible here, one line or not — it is a
23
+ * small danger badge (icon only, `title` carries the full message, same
24
+ * pattern as `OfflineBadge`) appended after the select. It never grows the
25
+ * row past one line.
26
+ */
27
27
  export declare function AlarmInlineControl({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
28
28
  /**
29
- * AlarmHeroCard — segmented arm/disarm hero for AlarmPanel devices.
30
- *
31
- * Renders (Spec §3):
32
- * - A shield glyph + state label tinted by lifecycle state (disarmed=muted,
33
- * armed=green, arming/pending=amber, triggered=red).
34
- * - The shared `AlarmSegments` strip: a Disarm button plus one arm button per
35
- * `availableModes` entry (Home / Away / Night / …). The currently-active
36
- * segment is highlighted; transitioning states highlight none.
37
- *
38
- * Cap-gated on `alarm-panel` — returns null when the device lacks the cap.
39
- * PIN entry (when `requiresCode`) is deferred to a later task; the segments
40
- * call arm/disarm without a code, and the provider rejects when a code is
41
- * required — surfaced upstream.
42
- *
43
- * A refusal (D630: an open device, a required code, …) is never a swallowed
44
- * promise — `useAlarmControl` rolls the optimistic state back and hands the
45
- * rejection's message back as `error`, rendered below the segments.
46
- */
29
+ * AlarmHeroCard — segmented arm/disarm hero for AlarmPanel devices.
30
+ *
31
+ * Renders (Spec §3):
32
+ * - A shield glyph + state label tinted by lifecycle state (disarmed=muted,
33
+ * armed=green, arming/pending=amber, triggered=red).
34
+ * - The shared `AlarmSegments` strip: a Disarm button plus one arm button per
35
+ * `availableModes` entry (Home / Away / Night / …). The currently-active
36
+ * segment is highlighted; transitioning states highlight none.
37
+ *
38
+ * Cap-gated on `alarm-panel` — returns null when the device lacks the cap.
39
+ * PIN entry (when `requiresCode`) is deferred to a later task; the segments
40
+ * call arm/disarm without a code, and the provider rejects when a code is
41
+ * required — surfaced upstream.
42
+ *
43
+ * A refusal (D630: an open device, a required code, …) is never a swallowed
44
+ * promise — `useAlarmControl` rolls the optimistic state back and hands the
45
+ * rejection's message back as `error`, rendered below the segments.
46
+ */
47
47
  export declare function AlarmHeroCard({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
@@ -1,81 +1,81 @@
1
- import { ComponentPropsWithoutRef, ReactNode } from 'react';
1
+ import type { ComponentPropsWithoutRef, ReactNode } from "react";
2
2
  export declare const FILL: "fill";
3
3
  export declare const RIGHT: "right";
4
4
  export declare const CENTER: "center";
5
5
  export declare const FIT: "fit";
6
6
  export type ControlAlign = typeof FILL | typeof RIGHT | typeof CENTER | typeof FIT;
7
- interface ControlColumnProps extends ComponentPropsWithoutRef<'div'> {
8
- readonly align: ControlAlign;
9
- readonly children: ReactNode;
7
+ interface ControlColumnProps extends ComponentPropsWithoutRef<"div"> {
8
+ readonly align: ControlAlign;
9
+ readonly children: ReactNode;
10
10
  }
11
11
  /** The one control column every device-row/hero control sits in.
12
- * FILL → the child stretches to the full fixed column width (steppers, selects, buttons, cover triad).
13
- * RIGHT → the child keeps its natural width, flush to the right edge of the fixed column (readouts, toggles — card view).
14
- * CENTER → the child keeps its natural width, centered in the fixed column (readouts, toggles).
15
- * FIT → the column DROPS its fixed width and sizes to its content (table view). The control takes
16
- * its natural width and lays out in sequence with the trailing trash + status dot, so a wide
17
- * control (climate stepper + mode select, cover triad + %) never overflows a fixed box and
18
- * collides with the neighbours. FILL has no effect under FIT — a stretchy child in a
19
- * content-width wrapper simply takes its natural width.
20
- * FILL, RIGHT and CENTER share the fixed `w-[140px]` box (card / minimal / hero views). */
12
+ * FILL → the child stretches to the full fixed column width (steppers, selects, buttons, cover triad).
13
+ * RIGHT → the child keeps its natural width, flush to the right edge of the fixed column (readouts, toggles — card view).
14
+ * CENTER → the child keeps its natural width, centered in the fixed column (readouts, toggles).
15
+ * FIT → the column DROPS its fixed width and sizes to its content (table view). The control takes
16
+ * its natural width and lays out in sequence with the trailing trash + status dot, so a wide
17
+ * control (climate stepper + mode select, cover triad + %) never overflows a fixed box and
18
+ * collides with the neighbours. FILL has no effect under FIT — a stretchy child in a
19
+ * content-width wrapper simply takes its natural width.
20
+ * FILL, RIGHT and CENTER share the fixed `w-[140px]` box (card / minimal / hero views). */
21
21
  export declare function ControlColumn({ align, children, className, ...rest }: ControlColumnProps): ReactNode;
22
22
  interface ValueReadoutProps {
23
- readonly value: string;
24
- readonly unit?: string;
23
+ readonly value: string;
24
+ readonly unit?: string;
25
25
  }
26
26
  /** A value + inline unit suffix (no separator). E.g. `60s`, `22%`. */
27
27
  export declare function ValueReadout({ value, unit }: ValueReadoutProps): ReactNode;
28
28
  interface StepperProps {
29
- readonly value: number | string;
30
- readonly unit?: string;
31
- readonly onDelta: (d: 1 | -1) => void;
29
+ readonly value: number | string;
30
+ readonly unit?: string;
31
+ readonly onDelta: (d: 1 | -1) => void;
32
32
  }
33
33
  /** Increment/decrement control with value + unit display. */
34
34
  export declare function Stepper({ value, unit, onDelta }: StepperProps): ReactNode;
35
35
  interface SlideToggleProps {
36
- readonly on: boolean;
37
- readonly targetLabel: string;
38
- readonly onConfirm: () => void;
36
+ readonly on: boolean;
37
+ readonly targetLabel: string;
38
+ readonly onConfirm: () => void;
39
39
  }
40
40
  /** Safety slide: onConfirm fires only after the thumb is dragged past threshold, never on a plain tap. */
41
41
  export declare function SlideToggle({ on, targetLabel, onConfirm }: SlideToggleProps): ReactNode;
42
42
  interface ArcKnobProps {
43
- readonly fraction: number;
44
- readonly color: string;
45
- /**
46
- * Distance in px from the rotating container's top edge to the knob's top
47
- * edge. The knob is 20px tall, so its CENTER sits at `knobTopPx + 10` px
48
- * from the top. For the knob center to ride the ring's centre radius the
49
- * caller passes `(containerCenter − ringRadius) − 10`. Defaults to the
50
- * thermostat gauge value (176px container, radius 76 → 88 − 76 − 10 = 2).
51
- */
52
- readonly knobTopPx?: number;
53
- /**
54
- * When provided, the knob becomes interactive: dragging it reports the new
55
- * arc fraction (0..1) to the parent, which owns the value and re-renders the
56
- * knob at the new `fraction`. When omitted the knob is a display-only
57
- * indicator (no grab cursor, no pointer handlers).
58
- */
59
- readonly onDragFraction?: (fraction: number) => void;
43
+ readonly fraction: number;
44
+ readonly color: string;
45
+ /**
46
+ * Distance in px from the rotating container's top edge to the knob's top
47
+ * edge. The knob is 20px tall, so its CENTER sits at `knobTopPx + 10` px
48
+ * from the top. For the knob center to ride the ring's centre radius the
49
+ * caller passes `(containerCenter − ringRadius) − 10`. Defaults to the
50
+ * thermostat gauge value (176px container, radius 76 → 88 − 76 − 10 = 2).
51
+ */
52
+ readonly knobTopPx?: number;
53
+ /**
54
+ * When provided, the knob becomes interactive: dragging it reports the new
55
+ * arc fraction (0..1) to the parent, which owns the value and re-renders the
56
+ * knob at the new `fraction`. When omitted the knob is a display-only
57
+ * indicator (no grab cursor, no pointer handlers).
58
+ */
59
+ readonly onDragFraction?: (fraction: number) => void;
60
60
  }
61
61
  /** Half the ArcKnob's 20px (h-5) height. Callers seat the knob centre on a
62
- * ring by computing `(containerCentre − ringRadius) − KNOB_HALF_PX`. */
62
+ * ring by computing `(containerCentre − ringRadius) − KNOB_HALF_PX`. */
63
63
  export declare const KNOB_HALF_PX = 10;
64
64
  /**
65
- * White knob riding a circular arc at `fraction` (0..1). For thermostat/light/fan.
66
- *
67
- * Display-only by default. Pass `onDragFraction` to make the knob draggable:
68
- * pointer capture is taken on the knob, and pointer moves are mapped to a new
69
- * arc fraction reported back to the parent (the parent owns the value).
70
- */
65
+ * White knob riding a circular arc at `fraction` (0..1). For thermostat/light/fan.
66
+ *
67
+ * Display-only by default. Pass `onDragFraction` to make the knob draggable:
68
+ * pointer capture is taken on the knob, and pointer moves are mapped to a new
69
+ * arc fraction reported back to the parent (the parent owns the value).
70
+ */
71
71
  export declare function ArcKnob({ fraction, color, knobTopPx, onDragFraction }: ArcKnobProps): ReactNode;
72
72
  interface GripTrackProps {
73
- readonly fraction: number;
74
- readonly color?: string;
73
+ readonly fraction: number;
74
+ readonly color?: string;
75
75
  }
76
76
  /**
77
- * Horizontal track with a white grip thumb at `fraction` (0..1). For seek/volume/brightness.
78
- * @remarks display-only indicator; interactive drag is deferred to a later task.
79
- */
77
+ * Horizontal track with a white grip thumb at `fraction` (0..1). For seek/volume/brightness.
78
+ * @remarks display-only indicator; interactive drag is deferred to a later task.
79
+ */
80
80
  export declare function GripTrack({ fraction, color }: GripTrackProps): ReactNode;
81
81
  export {};
@@ -1,3 +1,3 @@
1
- import { ReactNode } from 'react';
2
- import { ControlPanelProps } from './types';
3
- export declare function BrightnessPanel({ trpc, deviceId, layout, optimistic, }: ControlPanelProps): ReactNode;
1
+ import type { ReactNode } from "react";
2
+ import type { ControlPanelProps } from "./types";
3
+ export declare function BrightnessPanel({ trpc, deviceId, layout, optimistic }: ControlPanelProps): ReactNode;
@@ -1,18 +1,18 @@
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
- * ButtonControl (inline) — compact "Press" trigger for a device-list row.
5
- *
6
- * The `button` cap is fire-only (no status / runtimeState), so we bypass
7
- * `useDeviceCapability` (which requires a slice) and resolve the cap
8
- * handle directly from the device proxy. We guard on `cap === undefined`
9
- * (device has no button cap) and render nothing in that case.
10
- */
4
+ * ButtonControl (inline) — compact "Press" trigger for a device-list row.
5
+ *
6
+ * The `button` cap is fire-only (no status / runtimeState), so we bypass
7
+ * `useDeviceCapability` (which requires a slice) and resolve the cap
8
+ * handle directly from the device proxy. We guard on `cap === undefined`
9
+ * (device has no button cap) and render nothing in that case.
10
+ */
11
11
  export declare function ButtonControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
12
12
  /**
13
- * ButtonHeroCard — large press-actuator card for the device-detail hero area.
14
- *
15
- * Renders a centred "Press" button with real design-token classes. The cap is
16
- * fire-only so no state display is needed — the affordance IS the control.
17
- */
13
+ * ButtonHeroCard — large press-actuator card for the device-detail hero area.
14
+ *
15
+ * Renders a centred "Press" button with real design-token classes. The cap is
16
+ * fire-only so no state display is needed — the affordance IS the control.
17
+ */
18
18
  export declare function ButtonHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
@@ -1,18 +1,18 @@
1
- import { ReactNode } from 'react';
2
- import { ControlPanelProps } from './types.js';
3
- import { HvacMode } from '@camstack/types';
1
+ import type { ReactNode } from "react";
2
+ import type { ControlPanelProps } from "./types.js";
3
+ import type { HvacMode } from "@camstack/types";
4
4
  /**
5
- * Exhaustive colour map — one entry per HvacMode. Build will fail if a
6
- * mode is added to the enum and not reflected here (Record<HvacMode, ...>
7
- * + `satisfies` means TypeScript enforces full coverage).
8
- */
5
+ * Exhaustive colour map — one entry per HvacMode. Build will fail if a
6
+ * mode is added to the enum and not reflected here (Record<HvacMode, ...>
7
+ * + `satisfies` means TypeScript enforces full coverage).
8
+ */
9
9
  export declare const MODE_COLOR: Record<HvacMode, string>;
10
10
  /**
11
- * Mode text-accent colour — applied to the compact (inline) temperature value
12
- * as a subtle cue, replacing the old bordered/filled mode box so the control
13
- * matches the borderless cover/lock inline visual language.
14
- */
11
+ * Mode text-accent colour — applied to the compact (inline) temperature value
12
+ * as a subtle cue, replacing the old bordered/filled mode box so the control
13
+ * matches the borderless cover/lock inline visual language.
14
+ */
15
15
  export declare const MODE_TEXT_COLOR: Record<HvacMode, string>;
16
16
  /** Active-mode button accent colour (applied to the pressed mode chip). */
17
17
  export declare const MODE_CHIP_ACTIVE: Record<HvacMode, string>;
18
- export declare function ClimatePanel({ trpc, deviceId, features: _features, layout, optimistic, }: ControlPanelProps): ReactNode;
18
+ export declare function ClimatePanel({ trpc, deviceId, features: _features, layout, optimistic }: ControlPanelProps): ReactNode;
@@ -1,21 +1,38 @@
1
- import { ReactNode } from 'react';
2
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
3
- import { ContainerChild } from './container-primary';
1
+ /**
2
+ * <ContainerPrimaryHero> — renders a CONTAINER device's detail hero AS its
3
+ * primary child.
4
+ *
5
+ * The container has no surface of its own: it resolves a primary child
6
+ * (priority default, or the operator's durable primary-child pick) and renders
7
+ * THAT child's `HeroCard` from the shared control registry, bound to the child's
8
+ * numeric id — identical to opening the child device directly.
9
+ *
10
+ * The override is persisted as the chosen child's re-sync/rename-stable
11
+ * `entityId` (`primaryChildEntityId`); resolution matches on it directly — see
12
+ * `container-primary.ts`. A legacy numeric `linkDeviceId` is still honored as a
13
+ * fallback. Other children remain as detail tabs (owned by the device-detail
14
+ * page); this component only owns the hero surface. The "primary child" picker
15
+ * that overrides the resolution lives in the device's primary config block (see
16
+ * admin-ui `PrimaryChildRow`), wired to `deviceManager.setPrimaryChildEntityId`.
17
+ */
18
+ import type { ReactNode } from "react";
19
+ import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
20
+ import { type ContainerChild } from "./container-primary";
4
21
  /** A child row the hero can render. */
5
22
  export interface ContainerHeroChild extends ContainerChild {
6
- readonly name: string;
7
- readonly features?: readonly string[];
23
+ readonly name: string;
24
+ readonly features?: readonly string[];
8
25
  }
9
26
  export interface ContainerPrimaryHeroProps {
10
- readonly trpc: UseDeviceProxyTrpc;
11
- /** The container's entity-children (from `deviceManager.getChildren`). */
12
- readonly children: readonly ContainerHeroChild[];
13
- /** Container's LEGACY persisted primary-child override (numeric child id) —
14
- * consulted only when no durable `primaryChildEntityId` is set. */
15
- readonly linkDeviceId: number | null | undefined;
16
- /** Container's DURABLE primary-child override (chosen child's entityId) —
17
- * null/undefined ⇒ no durable override (falls back to linkDeviceId, then
18
- * priority default). */
19
- readonly primaryChildEntityId?: string | null | undefined;
27
+ readonly trpc: UseDeviceProxyTrpc;
28
+ /** The container's entity-children (from `deviceManager.getChildren`). */
29
+ readonly children: readonly ContainerHeroChild[];
30
+ /** Container's LEGACY persisted primary-child override (numeric child id) —
31
+ * consulted only when no durable `primaryChildEntityId` is set. */
32
+ readonly linkDeviceId: number | null | undefined;
33
+ /** Container's DURABLE primary-child override (chosen child's entityId) —
34
+ * null/undefined ⇒ no durable override (falls back to linkDeviceId, then
35
+ * priority default). */
36
+ readonly primaryChildEntityId?: string | null | undefined;
20
37
  }
21
- export declare function ContainerPrimaryHero({ trpc, children, linkDeviceId, primaryChildEntityId, }: ContainerPrimaryHeroProps): ReactNode;
38
+ export declare function ContainerPrimaryHero({ trpc, children, linkDeviceId, primaryChildEntityId }: ContainerPrimaryHeroProps): ReactNode;
@@ -1,50 +1,79 @@
1
- import { ChildRef } from './primary-child';
2
1
  /**
3
- * Minimal shape this module needs from a child device row. Structurally
4
- * compatible with `DeviceItemDevice` / `DeviceInfo` — callers pass the raw
5
- * `getChildren` rows through.
6
- */
2
+ * Container → primary-child resolution glue.
3
+ *
4
+ * A CONTAINER device hosts N entity-children and renders AS its primary child
5
+ * (same row InlineControl, same detail HeroCard). The choice of primary child:
6
+ *
7
+ * - DEFAULT: the highest-priority child by type (lock > climate > light > …),
8
+ * via the pure {@link resolvePrimaryChild} resolver (Task 4.1).
9
+ * - OVERRIDE: an operator picks a child via the discreet primary-child picker.
10
+ * The override is persisted on the container's `linkDeviceId` field (the
11
+ * real, kernel-backed soft-link — see `device-manager.cap.ts` `setLinkDeviceId`).
12
+ *
13
+ * The source of truth for the override is the child's re-sync-stable `entityId`
14
+ * (its `sourceInfo.id`, falling back to `stableId`).
15
+ *
16
+ * DURABLE (preferred): the container persists the chosen child's `entityId`
17
+ * directly on its `primaryChildEntityId` meta field (see
18
+ * `device-manager.setPrimaryChildEntityId`). This survives a re-sync/rename
19
+ * that reallocates the child's numeric id — the resolver matches on entityId.
20
+ *
21
+ * LEGACY (fallback): older picks persist the numeric child id on `linkDeviceId`.
22
+ * At RENDER we re-derive the entityId from the live child set so a re-sync that
23
+ * KEEPS the numeric id still resolves; when the linked numeric id no longer
24
+ * matches any live child (stale link), we pass `undefined` to the resolver → it
25
+ * falls back to the priority default.
26
+ *
27
+ * Resolution prefers `primaryChildEntityId` and only consults `linkDeviceId`
28
+ * when no durable override is present, so existing persisted links keep working.
29
+ */
30
+ import type { ChildRef } from "./primary-child";
31
+ /**
32
+ * Minimal shape this module needs from a child device row. Structurally
33
+ * compatible with `DeviceItemDevice` / `DeviceInfo` — callers pass the raw
34
+ * `getChildren` rows through.
35
+ */
7
36
  export interface ContainerChild {
8
- readonly id: number;
9
- readonly stableId: string;
10
- readonly type: string;
11
- readonly sourceInfo?: {
12
- readonly id: string;
13
- } | undefined;
14
- /** `DeviceRole`, ranked above `type` when picking a container's primary. */
15
- readonly role?: string | null | undefined;
16
- /** Operator-facing name — used for the namesake tiebreak. */
17
- readonly name?: string | undefined;
37
+ readonly id: number;
38
+ readonly stableId: string;
39
+ readonly type: string;
40
+ readonly sourceInfo?: {
41
+ readonly id: string;
42
+ } | undefined;
43
+ /** `DeviceRole`, ranked above `type` when picking a container's primary. */
44
+ readonly role?: string | null | undefined;
45
+ /** Operator-facing name — used for the namesake tiebreak. */
46
+ readonly name?: string | undefined;
18
47
  }
19
48
  /**
20
- * Re-sync-stable identity of a child. Prefers the upstream-system dispatch key
21
- * (`sourceInfo.id` — e.g. HA `entity_id`); falls back to `stableId` for
22
- * providers that never populated SourceInfo. Both survive a re-sync that may
23
- * reallocate the numeric `id`.
24
- */
49
+ * Re-sync-stable identity of a child. Prefers the upstream-system dispatch key
50
+ * (`sourceInfo.id` — e.g. HA `entity_id`); falls back to `stableId` for
51
+ * providers that never populated SourceInfo. Both survive a re-sync that may
52
+ * reallocate the numeric `id`.
53
+ */
25
54
  export declare function childEntityId(child: ContainerChild): string;
26
55
  /** Project a raw child row onto the pure resolver's {@link ChildRef} shape. */
27
56
  export declare function containerChildToRef(child: ContainerChild): ChildRef;
28
57
  /**
29
- * Resolve the entityId override from the container's persisted `linkDeviceId`.
30
- * Returns the linked child's stable entityId, or `undefined` when there is no
31
- * link or the link is stale (points to a numeric id no longer present) — in
32
- * which case the resolver falls back to the priority default.
33
- */
58
+ * Resolve the entityId override from the container's persisted `linkDeviceId`.
59
+ * Returns the linked child's stable entityId, or `undefined` when there is no
60
+ * link or the link is stale (points to a numeric id no longer present) — in
61
+ * which case the resolver falls back to the priority default.
62
+ */
34
63
  export declare function overrideEntityIdFromLink(children: readonly ContainerChild[], linkDeviceId: number | null | undefined): string | undefined;
35
64
  /**
36
- * Full container → primary-child resolution: project children to refs, resolve
37
- * the override entityId, and delegate to the pure resolver. Returns `null` for a
38
- * container with no children (caller degrades gracefully).
39
- *
40
- * Override precedence:
41
- * 1. `primaryChildEntityId` — the DURABLE override (re-sync/rename-stable),
42
- * passed straight to the resolver which matches on `entityId`. Wins when a
43
- * non-empty string is supplied.
44
- * 2. `linkDeviceId` — LEGACY numeric override, re-derived to an entityId from
45
- * the live child set. Consulted only when there is no durable override.
46
- *
47
- * When neither resolves to a live child, the resolver falls back to the
48
- * priority default.
49
- */
65
+ * Full container → primary-child resolution: project children to refs, resolve
66
+ * the override entityId, and delegate to the pure resolver. Returns `null` for a
67
+ * container with no children (caller degrades gracefully).
68
+ *
69
+ * Override precedence:
70
+ * 1. `primaryChildEntityId` — the DURABLE override (re-sync/rename-stable),
71
+ * passed straight to the resolver which matches on `entityId`. Wins when a
72
+ * non-empty string is supplied.
73
+ * 2. `linkDeviceId` — LEGACY numeric override, re-derived to an entityId from
74
+ * the live child set. Consulted only when there is no durable override.
75
+ *
76
+ * When neither resolves to a live child, the resolver falls back to the
77
+ * priority default.
78
+ */
50
79
  export declare function resolveContainerPrimary(children: readonly ContainerChild[], linkDeviceId: number | null | undefined, primaryChildEntityId?: string | null | undefined): ChildRef | null;