@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,41 +1,59 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceControlProps } from './control-registry';
1
+ /**
2
+ * Weather controls for a `DeviceType.Weather` device.
3
+ *
4
+ * Read-only: the `weather` cap has no setters. Reads the `weather` cap
5
+ * status slice (condition + current temperature / humidity / pressure /
6
+ * wind) and renders:
7
+ * - WeatherInlineControl (device-list row): a compact condition icon +
8
+ * temperature readout. Row-narrow.
9
+ * - WeatherHeroCard (device-detail hero): a bespoke state-tinted sky
10
+ * scene SVG in the framed-box language whose graphic varies by HA
11
+ * `condition`, plus a big temperature readout and humidity / wind /
12
+ * pressure readouts. Pure — no controls. Decorative SVG aria-hidden.
13
+ *
14
+ * Mirrors the climate / humidifier controls' `useDeviceCapability` read
15
+ * pattern so the row and hero never diverge. The condition→glyph map is
16
+ * a small internal switch over the known HA condition set with a neutral
17
+ * default.
18
+ */
19
+ import { type ReactNode } from "react";
20
+ import type { DeviceControlProps } from "./control-registry";
3
21
  /** Which sky glyph a condition maps to. Drives both the inline icon and
4
- * the hero scene's graphic branch. */
5
- export type WeatherGlyph = 'sun' | 'clear-night' | 'partly-cloudy' | 'cloudy' | 'rain' | 'snow' | 'lightning' | 'fog' | 'wind' | 'hail';
22
+ * the hero scene's graphic branch. */
23
+ export type WeatherGlyph = "sun" | "clear-night" | "partly-cloudy" | "cloudy" | "rain" | "snow" | "lightning" | "fog" | "wind" | "hail";
6
24
  export interface WeatherConditionMeta {
7
- /** Human-readable label for the condition. */
8
- readonly label: string;
9
- /** Which glyph to render. */
10
- readonly glyph: WeatherGlyph;
25
+ /** Human-readable label for the condition. */
26
+ readonly label: string;
27
+ /** Which glyph to render. */
28
+ readonly glyph: WeatherGlyph;
11
29
  }
12
30
  export interface WeatherTint {
13
- /** Tailwind class for the wash behind the scene. */
14
- readonly glow: string;
15
- /** Tailwind text token driving the scene glyph via currentColor. */
16
- readonly accent: string;
31
+ /** Tailwind class for the wash behind the scene. */
32
+ readonly glow: string;
33
+ /** Tailwind text token driving the scene glyph via currentColor. */
34
+ readonly accent: string;
17
35
  }
18
36
  /**
19
- * Pure helper — maps a verbatim HA condition string to a label + glyph.
20
- * Covers the known HA `weather.*` condition set; an unknown / null
21
- * condition falls back to a neutral cloud.
22
- */
37
+ * Pure helper — maps a verbatim HA condition string to a label + glyph.
38
+ * Covers the known HA `weather.*` condition set; an unknown / null
39
+ * condition falls back to a neutral cloud.
40
+ */
23
41
  export declare function weatherConditionMeta(condition: string | null): WeatherConditionMeta;
24
42
  /**
25
- * Pure helper — maps a verbatim HA condition string to a tint. Exhaustive
26
- * over the known condition set with a neutral default.
27
- */
43
+ * Pure helper — maps a verbatim HA condition string to a tint. Exhaustive
44
+ * over the known condition set with a neutral default.
45
+ */
28
46
  export declare function weatherTint(condition: string | null): WeatherTint;
29
47
  /**
30
- * WeatherInlineControl — compact condition icon + temperature readout
31
- * for a device-list row. Read-only; must NOT blow out the row width.
32
- */
48
+ * WeatherInlineControl — compact condition icon + temperature readout
49
+ * for a device-list row. Read-only; must NOT blow out the row width.
50
+ */
33
51
  export declare function WeatherInlineControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
34
52
  /**
35
- * WeatherHeroCard — read-only weather panel for the device-detail hero.
36
- *
37
- * Bespoke state-tinted sky scene + a large temperature readout +
38
- * humidity / wind-speed (with a bearing arrow) / pressure readouts.
39
- * Pure — no controls (the cap is read-only).
40
- */
53
+ * WeatherHeroCard — read-only weather panel for the device-detail hero.
54
+ *
55
+ * Bespoke state-tinted sky scene + a large temperature readout +
56
+ * humidity / wind-speed (with a bearing arrow) / pressure readouts.
57
+ * Pure — no controls (the cap is read-only).
58
+ */
41
59
  export declare function WeatherHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
@@ -1,42 +1,42 @@
1
- import { ReactElement } from 'react';
1
+ import { type ReactElement } from "react";
2
2
  /** Where the viewer's "rows per page" choice for this table is remembered. */
3
3
  export declare const DEVICE_EXPORT_PAGE_SIZE_KEY = "camstack.device-export.pageSize";
4
4
  export interface DeviceExportPanelProps {
5
- /**
6
- * Addon id of the export addon whose surface is rendered. Used for
7
- * labelling and to scope cache invalidation; the underlying cap
8
- * router resolves the (hub-resident) provider by `nodeId`.
9
- */
10
- readonly addonId: string;
11
- /**
12
- * Optional callback to open a device-details page.
13
- *
14
- * There is no `trpc` prop. It existed to feed the device-mode list's per-row
15
- * capability atoms (snapshot, switch, live control); this surface renders
16
- * type + name + export and asks a device nothing, so the prop was removed
17
- * rather than left as a parameter every caller still threads and nothing
18
- * reads.
19
- */
20
- readonly onOpenDevice?: (deviceId: string) => void;
21
- /**
22
- * Render the exporter's error and Setup block (pairing QR, copyable fields)
23
- * inside the panel. Default true. A page that places the devices table at
24
- * the bottom renders `<DeviceExportSetup>` near the top instead and passes
25
- * false, so the pairing code is not buried under settings and logs.
26
- */
27
- readonly showSetup?: boolean;
5
+ /**
6
+ * Addon id of the export addon whose surface is rendered. Used for
7
+ * labelling and to scope cache invalidation; the underlying cap
8
+ * router resolves the (hub-resident) provider by `nodeId`.
9
+ */
10
+ readonly addonId: string;
11
+ /**
12
+ * Optional callback to open a device-details page.
13
+ *
14
+ * There is no `trpc` prop. It existed to feed the device-mode list's per-row
15
+ * capability atoms (snapshot, switch, live control); this surface renders
16
+ * type + name + export and asks a device nothing, so the prop was removed
17
+ * rather than left as a parameter every caller still threads and nothing
18
+ * reads.
19
+ */
20
+ readonly onOpenDevice?: (deviceId: string) => void;
21
+ /**
22
+ * Render the exporter's error and Setup block (pairing QR, copyable fields)
23
+ * inside the panel. Default true. A page that places the devices table at
24
+ * the bottom renders `<DeviceExportSetup>` near the top instead and passes
25
+ * false, so the pairing code is not buried under settings and logs.
26
+ */
27
+ readonly showSetup?: boolean;
28
28
  }
29
29
  /**
30
- * The exporter's error and Setup block on their own — for a page that shows
31
- * them above its settings while the devices table sits at the bottom. Renders
32
- * nothing when the exporter reports neither. Shares `getStatus`'s query key
33
- * with the panel, so mounting both costs one request.
34
- */
30
+ * The exporter's error and Setup block on their own — for a page that shows
31
+ * them above its settings while the devices table sits at the bottom. Renders
32
+ * nothing when the exporter reports neither. Shares `getStatus`'s query key
33
+ * with the panel, so mounting both costs one request.
34
+ */
35
35
  export declare function DeviceExportSetup({ addonId }: {
36
- readonly addonId: string;
36
+ readonly addonId: string;
37
37
  }): ReactElement | null;
38
38
  /**
39
- * Generic device-export panel. Addon-agnostic — only the `device-export`
40
- * cap drives it.
41
- */
42
- export declare function DeviceExportPanel({ addonId, onOpenDevice, showSetup, }: DeviceExportPanelProps): ReactElement;
39
+ * Generic device-export panel. Addon-agnostic — only the `device-export`
40
+ * cap drives it.
41
+ */
42
+ export declare function DeviceExportPanel({ addonId, onOpenDevice, showSetup }: DeviceExportPanelProps): ReactElement;
@@ -1,12 +1,12 @@
1
- import { ReactNode } from 'react';
1
+ import { type ReactNode, type JSX } from "react";
2
2
  export interface DeviceGridProps {
3
- /** Grid items */
4
- children: ReactNode;
5
- /** Minimum card width in pixels (default 220) */
6
- minCardWidth?: number;
7
- /** Gap between cards in Tailwind spacing units (default 3) */
8
- gap?: number;
9
- /** Additional CSS classes */
10
- className?: string;
3
+ /** Grid items */
4
+ children: ReactNode;
5
+ /** Minimum card width in pixels (default 220) */
6
+ minCardWidth?: number;
7
+ /** Gap between cards in Tailwind spacing units (default 3) */
8
+ gap?: number;
9
+ /** Additional CSS classes */
10
+ className?: string;
11
11
  }
12
- export declare function DeviceGrid({ children, minCardWidth, gap, className }: DeviceGridProps): import("react").JSX.Element;
12
+ export declare function DeviceGrid({ children, minCardWidth, gap, className }: DeviceGridProps): JSX.Element;
@@ -1,20 +1,42 @@
1
- import { ReactNode } from 'react';
2
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
3
- import { ControlPlacement } from '../device-controls/control-registry';
4
- import { DeviceItemDevice, VariantDefaults } from './helpers';
1
+ /**
2
+ * <DeviceItemActions> — type-aware dispatcher for inline quick actions.
3
+ *
4
+ * Two layers compose the row's trailing affordances:
5
+ * 1. Type-specific InlineControl: rendered directly from the
6
+ * `DEVICE_TYPE_CONTROL` registry (cover → ↑■↓ + %; all other
7
+ * non-sensor types → DummyInline which renders nothing visible).
8
+ * Sensor / Presence device rows display their live value via
9
+ * `SensorValueAtom` instead (needs device.role + sourceInfo which
10
+ * DeviceControlProps does not carry).
11
+ * 2. Cross-cutting feature-gated extras (motion-trigger, PTZ, reboot)
12
+ * stay here — they gate on `device.features`, are device-type
13
+ * agnostic, and so are NOT in the per-type registry.
14
+ *
15
+ * High-frequency toggles stay inline. Reboot is a dedicated row-level
16
+ * action button (`RebootQuickAction`) — destructive, so clicking it opens
17
+ * a confirm modal rather than rebooting on the first click.
18
+ *
19
+ * Each atom self-gates via `useDeviceCapability` / the panel's own cap
20
+ * lookup — the dispatcher is a coarse pre-flight only. An atom that
21
+ * finds its cap unbound returns `null` so the row stays compact.
22
+ */
23
+ import { type ReactNode } from "react";
24
+ import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
25
+ import { type ControlPlacement } from "../device-controls/control-registry";
26
+ import type { DeviceItemDevice, VariantDefaults } from "./helpers";
5
27
  export interface DeviceItemActionsProps {
6
- readonly trpc: UseDeviceProxyTrpc;
7
- readonly device: DeviceItemDevice;
8
- readonly flags: VariantDefaults;
9
- /**
10
- * Where the control sits and whether the column carries the fixed `w-[140px]`
11
- * box. `'right'` (default) → flush right in the fixed column, for card /
12
- * minimal views. `'center'` → centered in the fixed column. `'table'` → the
13
- * column sizes to its content (no fixed width) so a wide control lays out in
14
- * sequence with the trailing trash + status dot without overflowing/colliding
15
- * — used by the main devices table. FILL controls stretch to the fixed column
16
- * width under `'right'`/`'center'`; under `'table'` they take natural width.
17
- */
18
- readonly controlPlacement?: ControlPlacement;
28
+ readonly trpc: UseDeviceProxyTrpc;
29
+ readonly device: DeviceItemDevice;
30
+ readonly flags: VariantDefaults;
31
+ /**
32
+ * Where the control sits and whether the column carries the fixed `w-[140px]`
33
+ * box. `'right'` (default) → flush right in the fixed column, for card /
34
+ * minimal views. `'center'` → centered in the fixed column. `'table'` → the
35
+ * column sizes to its content (no fixed width) so a wide control lays out in
36
+ * sequence with the trailing trash + status dot without overflowing/colliding
37
+ * — used by the main devices table. FILL controls stretch to the fixed column
38
+ * width under `'right'`/`'center'`; under `'table'` they take natural width.
39
+ */
40
+ readonly controlPlacement?: ControlPlacement;
19
41
  }
20
- export declare function DeviceItemActions({ trpc, device, controlPlacement, }: DeviceItemActionsProps): ReactNode;
42
+ export declare function DeviceItemActions({ trpc, device, controlPlacement }: DeviceItemActionsProps): ReactNode;
@@ -1,30 +1,70 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceAdminLink } from '@camstack/types';
3
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
1
+ /**
2
+ * <AdminLinkQuickAction> — the row-level "open this device's own config page"
3
+ * affordance.
4
+ *
5
+ * ## Discreet, in this row's vocabulary
6
+ *
7
+ * The trailing run of a device row already carries a type-specific inline
8
+ * control (a switch, a cover triad, a climate stepper, a sensor value), an
9
+ * on-motion toggle, a PTZ button, a reboot button, whatever the caller injects
10
+ * through `renderRowAction`, a delete button in table view and a status dot.
11
+ * Anything added there competes with a control the operator uses daily, and
12
+ * this one he uses roughly never.
13
+ *
14
+ * So it is the quietest thing the row can hold: a bare 12px glyph in
15
+ * `text-foreground-subtle`, no chrome, no label, no colour until hover — a
16
+ * step below `RebootQuickAction`, which at least has a hover surface, and it
17
+ * sits LAST among the actions so it never displaces one. It renders as an `<a>`
18
+ * rather than a button so the browser's own middle-click / copy-link /
19
+ * open-in-new-tab all work, which is most of what an operator wants from it.
20
+ *
21
+ * ## It draws nothing rather than something dead
22
+ *
23
+ * Four gates, all of which draw nothing:
24
+ *
25
+ * - the device proxy has not resolved, or the cap is not bound (the provider
26
+ * cannot answer for this device at all — a cloud-only vacuum, a Wyze cam);
27
+ * - the query has not answered yet, or failed (a non-admin session loses it,
28
+ * which is the intended outcome — no button beats a button that 403s);
29
+ * - the provider answered `null` (this device HAS no page);
30
+ * - the link is the DEVICE's own page and the device is offline — a web server
31
+ * on a camera that is not answering will not answer a browser either.
32
+ *
33
+ * That last gate is why `target` exists on the payload: an `integration` link
34
+ * (the Home Assistant device page, the UniFi controller) stays put when the
35
+ * device is offline, because the page is served by something else entirely and
36
+ * is very often exactly where the operator wants to go when a device drops.
37
+ *
38
+ * D62's rule holds from the other side: nothing here renders a DISABLED button.
39
+ * A greyed-out link would say "broken", and none of these four states is.
40
+ */
41
+ import { type ReactNode } from "react";
42
+ import type { DeviceAdminLink } from "@camstack/types";
43
+ import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
4
44
  export interface AdminLinkQuickActionProps {
5
- readonly trpc: UseDeviceProxyTrpc;
6
- readonly deviceId: number;
7
- /** Extra classes for the anchor — the detail header uses a larger glyph. */
8
- readonly className?: string;
9
- /** Glyph size. The row wants 12px; the header wants 14px. */
10
- readonly iconClassName?: string;
45
+ readonly trpc: UseDeviceProxyTrpc;
46
+ readonly deviceId: number;
47
+ /** Extra classes for the anchor — the detail header uses a larger glyph. */
48
+ readonly className?: string;
49
+ /** Glyph size. The row wants 12px; the header wants 14px. */
50
+ readonly iconClassName?: string;
11
51
  }
12
52
  /**
13
- * Resolve the link, or null, applying every gate. Split out so the row button
14
- * and the detail-header button share ONE decision — two copies of a four-state
15
- * gate is how the two surfaces end up disagreeing about the same device.
16
- *
17
- * Asked through the DEVICE PROXY (`cap.getAdminLink`), not through the
18
- * generated tRPC hook. The generated hook reads ui-library's own tRPC react
19
- * context, which the device row does not have and must not require: the row
20
- * takes its `trpc` as a PROP precisely so a caller can render it against a
21
- * different client. Wiring the generated hook in here turned 120 existing
22
- * device-item tests red with "Unable to find tRPC Context" — and would have
23
- * done the same to any embedding that does not sit under ui-library's provider.
24
- *
25
- * One read per (device, binding). The answer is a configured address: it
26
- * changes when an operator edits a connection, which respawns the runner and
27
- * re-resolves the proxy anyway.
28
- */
53
+ * Resolve the link, or null, applying every gate. Split out so the row button
54
+ * and the detail-header button share ONE decision — two copies of a four-state
55
+ * gate is how the two surfaces end up disagreeing about the same device.
56
+ *
57
+ * Asked through the DEVICE PROXY (`cap.getAdminLink`), not through the
58
+ * generated tRPC hook. The generated hook reads ui-library's own tRPC react
59
+ * context, which the device row does not have and must not require: the row
60
+ * takes its `trpc` as a PROP precisely so a caller can render it against a
61
+ * different client. Wiring the generated hook in here turned 120 existing
62
+ * device-item tests red with "Unable to find tRPC Context" — and would have
63
+ * done the same to any embedding that does not sit under ui-library's provider.
64
+ *
65
+ * One read per (device, binding). The answer is a configured address: it
66
+ * changes when an operator edits a connection, which respawns the runner and
67
+ * re-resolves the proxy anyway.
68
+ */
29
69
  export declare function useDeviceAdminLink(trpc: UseDeviceProxyTrpc, deviceId: number): DeviceAdminLink | null;
30
- export declare function AdminLinkQuickAction({ trpc, deviceId, className, iconClassName, }: AdminLinkQuickActionProps): ReactNode;
70
+ export declare function AdminLinkQuickAction({ trpc, deviceId, className, iconClassName }: AdminLinkQuickActionProps): ReactNode;
@@ -1,32 +1,49 @@
1
- import { ChildLayout } from '@camstack/types';
2
- import { DeviceItemDevice } from './helpers';
1
+ /**
2
+ * Pure grouping helper for a container's `childLayout`.
3
+ *
4
+ * A CONTAINER device may carry a `childLayout` directive (see
5
+ * `ChildLayoutEntry` in `@camstack/types`) that assigns specific accessory
6
+ * children to named accordion SECTIONS. This module partitions a parent's
7
+ * children into the provider-declared sections plus the remaining
8
+ * (ungrouped) children, which keep their current plain rendering.
9
+ *
10
+ * A child matches an entry when its `stableId` equals
11
+ * `${parentStableId}-${entry.childKey}` — `childKey` is the child's
12
+ * re-sync-stable accessory `stableIdSuffix`.
13
+ *
14
+ * Pure — no I/O, no React. Both the device-detail children list and the
15
+ * DevicesList table-row expansion consume this single helper so the two
16
+ * surfaces share the exact same grouping semantics.
17
+ */
18
+ import type { ChildLayout } from "@camstack/types";
19
+ import type { DeviceItemDevice } from "./helpers";
3
20
  export interface ChildLayoutSection {
4
- readonly title: string;
5
- readonly children: readonly DeviceItemDevice[];
6
- /** Whether the section renders open by default. `false` when any matched
7
- * layout entry for this section declared `collapsed: true`. */
8
- readonly defaultOpen: boolean;
9
- /** When `true`, the section's children render visually de-emphasized
10
- * (muted). Set only on the synthetic "Disabled" section. */
11
- readonly muted?: boolean;
21
+ readonly title: string;
22
+ readonly children: readonly DeviceItemDevice[];
23
+ /** Whether the section renders open by default. `false` when any matched
24
+ * layout entry for this section declared `collapsed: true`. */
25
+ readonly defaultOpen: boolean;
26
+ /** When `true`, the section's children render visually de-emphasized
27
+ * (muted). Set only on the synthetic "Disabled" section. */
28
+ readonly muted?: boolean;
12
29
  }
13
30
  export interface GroupedChildren {
14
- /** Sections ordered by first appearance in `childLayout`. */
15
- readonly sections: readonly ChildLayoutSection[];
16
- /** Children not referenced by any layout entry — render plainly, as today. */
17
- readonly ungrouped: readonly DeviceItemDevice[];
18
- /** Trailing synthetic section gathering every child whose CamStack-side
19
- * `disabled` flag is set. Kept SEPARATE from `sections`/`ungrouped` so
20
- * consumers render it LAST (after provider sections + ungrouped) and
21
- * muted. Undefined when no child is disabled. Generic — driven purely by
22
- * `child.disabled`, no provider/HA-specific input. */
23
- readonly disabledSection?: ChildLayoutSection;
31
+ /** Sections ordered by first appearance in `childLayout`. */
32
+ readonly sections: readonly ChildLayoutSection[];
33
+ /** Children not referenced by any layout entry — render plainly, as today. */
34
+ readonly ungrouped: readonly DeviceItemDevice[];
35
+ /** Trailing synthetic section gathering every child whose CamStack-side
36
+ * `disabled` flag is set. Kept SEPARATE from `sections`/`ungrouped` so
37
+ * consumers render it LAST (after provider sections + ungrouped) and
38
+ * muted. Undefined when no child is disabled. Generic — driven purely by
39
+ * `child.disabled`, no provider/HA-specific input. */
40
+ readonly disabledSection?: ChildLayoutSection;
24
41
  }
25
42
  /**
26
- * Partition a parent's children into provider-declared accordion sections +
27
- * the remaining (ungrouped) children. A child matches an entry when
28
- * `child.stableId === ${parentStableId}-${entry.childKey}`. Within a section,
29
- * children sort by `order ?? Number.MAX_SAFE_INTEGER` then by name. Sections
30
- * appear in first-seen order across `childLayout`. Pure — no I/O.
31
- */
43
+ * Partition a parent's children into provider-declared accordion sections +
44
+ * the remaining (ungrouped) children. A child matches an entry when
45
+ * `child.stableId === ${parentStableId}-${entry.childKey}`. Within a section,
46
+ * children sort by `order ?? Number.MAX_SAFE_INTEGER` then by name. Sections
47
+ * appear in first-seen order across `childLayout`. Pure — no I/O.
48
+ */
32
49
  export declare function groupChildrenByLayout(parentStableId: string, children: readonly DeviceItemDevice[], childLayout: ChildLayout | undefined): GroupedChildren;
@@ -1,9 +1,23 @@
1
- import { ReactNode } from 'react';
1
+ /**
2
+ * <ChildSectionAccordion> — a reusable collapsible section for the CARD/LIST
3
+ * context (device-detail children list). Renders a header button (chevron +
4
+ * title + count badge) that toggles a local open state, and the body (the
5
+ * section's children) when open.
6
+ *
7
+ * Open by default. Styling mirrors `children-accordion.tsx` (uppercase
8
+ * text-[10px] section headers, `hover:bg-surface-hover`, subtle dividers) so
9
+ * the device-detail accordions read consistently with the rest of the list.
10
+ *
11
+ * The TABLE context can't reuse this component (rows must be `<tr>`/`<td>`),
12
+ * so it shares the `groupChildrenByLayout` helper + its own section-header
13
+ * `<tr>` instead — see `device-list/table-layout.tsx`.
14
+ */
15
+ import { type ReactNode } from "react";
2
16
  interface ChildSectionAccordionProps {
3
- readonly title: string;
4
- readonly count: number;
5
- readonly children: ReactNode;
6
- readonly defaultOpen?: boolean;
17
+ readonly title: string;
18
+ readonly count: number;
19
+ readonly children: ReactNode;
20
+ readonly defaultOpen?: boolean;
7
21
  }
8
- export declare function ChildSectionAccordion({ title, count, children, defaultOpen, }: ChildSectionAccordionProps): ReactNode;
22
+ export declare function ChildSectionAccordion({ title, count, children, defaultOpen }: ChildSectionAccordionProps): ReactNode;
9
23
  export {};
@@ -1,14 +1,14 @@
1
- import { ReactNode } from 'react';
2
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
3
- import { DeviceItemDevice } from './helpers';
1
+ import { type ReactNode } from "react";
2
+ import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
3
+ import type { DeviceItemDevice } from "./helpers";
4
4
  interface ChildrenAccordionProps {
5
- readonly trpc: UseDeviceProxyTrpc;
6
- readonly accessoryChildren: readonly DeviceItemDevice[];
7
- readonly adoptedChildren: readonly DeviceItemDevice[];
8
- readonly onNavigate: (id: number) => void;
9
- /** Parent row's name — used to strip the redundant baked-in prefix from each
10
- * child's DISPLAY name (the underlying `child.name` is untouched). */
11
- readonly parentName: string;
5
+ readonly trpc: UseDeviceProxyTrpc;
6
+ readonly accessoryChildren: readonly DeviceItemDevice[];
7
+ readonly adoptedChildren: readonly DeviceItemDevice[];
8
+ readonly onNavigate: (id: number) => void;
9
+ /** Parent row's name — used to strip the redundant baked-in prefix from each
10
+ * child's DISPLAY name (the underlying `child.name` is untouched). */
11
+ readonly parentName: string;
12
12
  }
13
- export declare function ChildrenAccordion({ trpc, accessoryChildren, adoptedChildren, onNavigate, parentName, }: ChildrenAccordionProps): ReactNode;
13
+ export declare function ChildrenAccordion({ trpc, accessoryChildren, adoptedChildren, onNavigate, parentName }: ChildrenAccordionProps): ReactNode;
14
14
  export {};
@@ -1,15 +1,32 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceItemDevice } from './helpers';
1
+ /**
2
+ * Container-children context — a per-list lookup of `parentId → children`
3
+ * so a row's sub-components (`DeviceItemHeader`, `DeviceItemActions`, the
4
+ * table-row's `effectiveType`) can resolve a Container's children THEMSELVES
5
+ * instead of having the array threaded down as a `containerChildren` prop.
6
+ *
7
+ * A Container row renders AS its primary child (icon + inline control + the
8
+ * effective type badge), which needs the container's children. Previously the
9
+ * owning list passed those children into `<DeviceItem>`, which re-threaded them
10
+ * into every sub-component. The list now publishes the whole `parentId → []`
11
+ * map once via `ContainerChildrenProvider`, and each sub-component reads its
12
+ * own slice with `useContainerChildren(deviceId)`.
13
+ *
14
+ * Outside a provider (e.g. the minimal child list on the device-detail page,
15
+ * or a standalone test) the hook returns a stable empty array — the same
16
+ * graceful default the old optional prop had.
17
+ */
18
+ import { type ReactNode } from "react";
19
+ import type { DeviceItemDevice } from "./helpers";
3
20
  export interface ContainerChildrenProviderProps {
4
- /** `parentDeviceId → that parent's children`. Built once by the list. */
5
- readonly value: ReadonlyMap<number, readonly DeviceItemDevice[]>;
6
- readonly children: ReactNode;
21
+ /** `parentDeviceId → that parent's children`. Built once by the list. */
22
+ readonly value: ReadonlyMap<number, readonly DeviceItemDevice[]>;
23
+ readonly children: ReactNode;
7
24
  }
8
- export declare function ContainerChildrenProvider({ value, children, }: ContainerChildrenProviderProps): ReactNode;
25
+ export declare function ContainerChildrenProvider({ value, children }: ContainerChildrenProviderProps): ReactNode;
9
26
  /**
10
- * The children of `deviceId` as published by the nearest
11
- * `ContainerChildrenProvider`. Returns a stable empty array when there is no
12
- * provider or the device has no children — so a non-container row, or a row
13
- * rendered outside a list, degrades exactly like the old optional prop.
14
- */
27
+ * The children of `deviceId` as published by the nearest
28
+ * `ContainerChildrenProvider`. Returns a stable empty array when there is no
29
+ * provider or the device has no children — so a non-container row, or a row
30
+ * rendered outside a list, degrades exactly like the old optional prop.
31
+ */
15
32
  export declare function useContainerChildren(deviceId: number): readonly DeviceItemDevice[];
@@ -1,8 +1,26 @@
1
- import { ReactNode } from 'react';
2
- import { DeviceItemDevice } from './helpers';
1
+ /**
2
+ * DeviceDeleteAction — built-in confirmed per-row delete trash button.
3
+ *
4
+ * The unified device table owns delete as a first-class action: when a
5
+ * consumer passes `onDelete` to `<DeviceList>`/`<DeviceItem>`, this red trash
6
+ * button renders in the merged previewActions cell. Delete is destructive, so
7
+ * it MUST ask first — clicking the trash opens the shared centered confirm
8
+ * dialog (`useConfirm`, provider mounted app-wide) and only calls `onDelete`
9
+ * once the operator confirms.
10
+ *
11
+ * Cap/feature-agnostic by design: delete is generic and never branches on the
12
+ * device's capabilities. Context gating lives entirely at the call site — a
13
+ * consumer that doesn't pass `onDelete` gets no trash.
14
+ *
15
+ * Encapsulating `useConfirm` here (rather than inline in the row) keeps the
16
+ * presentational `DeviceItemTableRow` free of side-effecting hooks and lets
17
+ * the trash + confirm contract be tested in isolation.
18
+ */
19
+ import { type ReactNode } from "react";
20
+ import type { DeviceItemDevice } from "./helpers";
3
21
  export interface DeviceDeleteActionProps {
4
- readonly device: DeviceItemDevice;
5
- /** Called only after the operator confirms the destructive delete. */
6
- readonly onDelete: (device: DeviceItemDevice) => void;
22
+ readonly device: DeviceItemDevice;
23
+ /** Called only after the operator confirms the destructive delete. */
24
+ readonly onDelete: (device: DeviceItemDevice) => void;
7
25
  }
8
26
  export declare function DeviceDeleteAction({ device, onDelete }: DeviceDeleteActionProps): ReactNode;
@@ -1,17 +1,35 @@
1
- import { ReactNode } from 'react';
2
- import { UseDeviceProxyTrpc } from '../../hooks/use-device-proxy';
3
- import { DeviceItemDevice, VariantDefaults } from './helpers';
1
+ /**
2
+ * <DeviceItemFeatures> — children-count badge + optional feature-icon
3
+ * row with hover popover.
4
+ *
5
+ * Battery / charging / sleeping pills moved to <DeviceItemPreview> in
6
+ * Phase 2 (status pills belong with the preview/snapshot, not features).
7
+ *
8
+ * What this renders is now driven by `useDeviceFeatures` — the row
9
+ * shows ONLY features whose corresponding cap is actually registered
10
+ * on the device (or pure informational markers like `battery-operated`
11
+ * / `doorbell-button` that have no cap to interrogate). The popover
12
+ * labels each row `native` / `enhanced` / `marker` based on the live
13
+ * `getBindings` entry's `kind` field. The previous conservative
14
+ * advertised/no-slice/bound trio is gone — it under-reported wired
15
+ * features (only 2 of 8 had a slice mapping) and gave operators
16
+ * misleading "advertised" gray pills on Reolink cameras that fully
17
+ * implement snapshot/reboot/ptz/intercom natively.
18
+ */
19
+ import { type ReactNode } from "react";
20
+ import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
21
+ import { type DeviceItemDevice, type VariantDefaults } from "./helpers";
4
22
  export interface DeviceItemFeaturesProps {
5
- readonly trpc: UseDeviceProxyTrpc;
6
- readonly device: DeviceItemDevice;
7
- readonly flags: VariantDefaults;
8
- readonly accessoryCount: number;
9
- readonly adoptedCount: number;
10
- /**
11
- * When true, render the feature-icon row + popover (table view's
12
- * "Features" column). Off in card view — only battery + +N badge
13
- * to save horizontal space.
14
- */
15
- readonly showFeatureRow?: boolean;
23
+ readonly trpc: UseDeviceProxyTrpc;
24
+ readonly device: DeviceItemDevice;
25
+ readonly flags: VariantDefaults;
26
+ readonly accessoryCount: number;
27
+ readonly adoptedCount: number;
28
+ /**
29
+ * When true, render the feature-icon row + popover (table view's
30
+ * "Features" column). Off in card view — only battery + +N badge
31
+ * to save horizontal space.
32
+ */
33
+ readonly showFeatureRow?: boolean;
16
34
  }
17
- export declare function DeviceItemFeatures({ trpc, device, flags, accessoryCount, adoptedCount, showFeatureRow, }: DeviceItemFeaturesProps): ReactNode;
35
+ export declare function DeviceItemFeatures({ trpc, device, flags, accessoryCount, adoptedCount, showFeatureRow }: DeviceItemFeaturesProps): ReactNode;