@camstack/ui-library 1.2.256 → 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,21 +1,21 @@
1
- export { cn } from './cn';
2
- export { formatLastSeen } from './format-last-seen';
3
- export { formatControlDateTime } from './format-control-datetime';
4
- export type { ControlDateTimeFormat } from './format-control-datetime';
5
- export { formatNumeric } from './format-numeric';
6
- export { resolveSensorDisplay } from './resolve-sensor-display';
7
- export type { SensorDisplayInput, ResolvedSensorDisplay } from './resolve-sensor-display';
8
- export { isAbsentProvider } from './cap-error';
9
- export * from './responsive';
10
- export { mirror } from './pipeline-mirror';
11
- export type { MirrorSource, MirrorInput, MirrorOutcome, MirrorResultEntry, } from './pipeline-mirror';
12
- export { PHASE_CONFIG, getPhaseVisual } from './phase-config';
13
- export type { PhaseVisual } from './phase-config';
14
- export { createSharedContext } from './shared-context';
15
- export { ensureMfHostInit } from './mf-runtime-init';
16
- export { hubOrigin, hubPath, hubUrl, hubWsUrl, mountPath, resetHubMountForTests, routerBasename, } from './hub-mount';
17
- export { serializeRecordedCommand, parseRecordedServerMessage, RECORDED_PLAYBACK_MODES, } from './recorded-control-protocol';
18
- export type { RecordedControlCommand, RecordedPlaybackMode, RecordedServerMessage, } from './recorded-control-protocol';
19
- export { scrubReducer, initialScrubState, shouldEmit, shouldCommit, cursorFractionFor, makeScrubBridge, useScrubController, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS, } from './scrub-controller';
20
- export type { ScrubSource, ScrubState, ScrubAction, ScrubController, PlaybackControlSink, LastCommit, } from './scrub-controller';
21
- export { applyFleetQueryDefaults, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FLEET_LIST_GC_TIME_MS, } from './fleet-query-defaults';
1
+ export { cn } from "./cn";
2
+ export { formatLastSeen } from "./format-last-seen";
3
+ export { formatControlDateTime } from "./format-control-datetime";
4
+ export type { ControlDateTimeFormat } from "./format-control-datetime";
5
+ export { formatNumeric } from "./format-numeric";
6
+ export { resolveSensorDisplay } from "./resolve-sensor-display";
7
+ export type { SensorDisplayInput, ResolvedSensorDisplay } from "./resolve-sensor-display";
8
+ export { isAbsentProvider } from "./cap-error";
9
+ export * from "./responsive";
10
+ export { mirror } from "./pipeline-mirror";
11
+ export type { MirrorSource, MirrorInput, MirrorOutcome, MirrorResultEntry } from "./pipeline-mirror";
12
+ export { PHASE_CONFIG, getPhaseVisual } from "./phase-config";
13
+ export type { PhaseVisual } from "./phase-config";
14
+ export { createSharedContext } from "./shared-context";
15
+ export { ensureMfHostInit } from "./mf-runtime-init";
16
+ export { hubOrigin, hubPath, hubUrl, hubWsUrl, mountPath, resetHubMountForTests, routerBasename } from "./hub-mount";
17
+ export { serializeRecordedCommand, parseRecordedServerMessage, RECORDED_PLAYBACK_MODES } from "./recorded-control-protocol";
18
+ export type { RecordedControlCommand, RecordedPlaybackMode, RecordedServerMessage } from "./recorded-control-protocol";
19
+ export { scrubReducer, initialScrubState, shouldEmit, shouldCommit, cursorFractionFor, makeScrubBridge, useScrubController, COMMIT_DEDUPE_TOLERANCE_MS, COMMIT_DEDUPE_WINDOW_MS } from "./scrub-controller";
20
+ export type { ScrubSource, ScrubState, ScrubAction, ScrubController, PlaybackControlSink, LastCommit } from "./scrub-controller";
21
+ export { applyFleetQueryDefaults, FLEET_LIST_QUERY_KEY, FLEET_LIST_STALE_TIME_MS, FLEET_LIST_GC_TIME_MS } from "./fleet-query-defaults";
@@ -1,15 +1,28 @@
1
- import { CameraPhase } from '@camstack/types';
1
+ /**
2
+ * phase-config — canonical visual config for CameraPhase values.
3
+ *
4
+ * Single source of truth for label, color classes, dot class, and
5
+ * lucide icon name. Every UI surface (PhaseBadge, CameraStatusStrip,
6
+ * CameraAssignmentsTable, DeviceDetail, OverviewTab, NodeLiveTab)
7
+ * imports from here instead of hardcoding phase → style mappings.
8
+ *
9
+ * Icon components are NOT imported here (would pull lucide-react into
10
+ * the config module). Consumers import the icon by name themselves:
11
+ * `import { [cfg.icon] } from 'lucide-react'`
12
+ * or use the provided `PhaseIcon` component from `./phase-icon.tsx`.
13
+ */
14
+ import type { CameraPhase } from "@camstack/types";
2
15
  export interface PhaseVisual {
3
- /** Human-readable label (e.g. "Active", "Load-Shed"). */
4
- readonly label: string;
5
- /** Tailwind text color class (e.g. "text-success"). */
6
- readonly textColor: string;
7
- /** Tailwind border+bg classes for pill/badge containers. */
8
- readonly badgeClass: string;
9
- /** Tailwind class for the status dot (circle indicator). */
10
- readonly dotClass: string;
11
- /** Lucide icon name to use for this phase. */
12
- readonly icon: 'Activity' | 'Eye' | 'AlertTriangle' | 'PauseCircle' | 'PowerOff';
16
+ /** Human-readable label (e.g. "Active", "Load-Shed"). */
17
+ readonly label: string;
18
+ /** Tailwind text color class (e.g. "text-success"). */
19
+ readonly textColor: string;
20
+ /** Tailwind border+bg classes for pill/badge containers. */
21
+ readonly badgeClass: string;
22
+ /** Tailwind class for the status dot (circle indicator). */
23
+ readonly dotClass: string;
24
+ /** Lucide icon name to use for this phase. */
25
+ readonly icon: "Activity" | "Eye" | "AlertTriangle" | "PauseCircle" | "PowerOff";
13
26
  }
14
27
  export declare const PHASE_CONFIG: Record<CameraPhase, PhaseVisual>;
15
28
  /** Look up phase config with a safe fallback to `watching` for unknown values. */
@@ -1,23 +1,23 @@
1
- import { AgentAddonConfig, CameraStepOverridePatch, PipelineSchema } from '@camstack/types';
1
+ import type { AgentAddonConfig, CameraStepOverridePatch, PipelineSchema } from "@camstack/types";
2
2
  export interface MirrorSource {
3
- readonly nodeId: string;
4
- readonly engine: {
5
- readonly format: string;
6
- };
7
- readonly defaults: Readonly<Record<string, AgentAddonConfig>>;
3
+ readonly nodeId: string;
4
+ readonly engine: {
5
+ readonly format: string;
6
+ };
7
+ readonly defaults: Readonly<Record<string, AgentAddonConfig>>;
8
8
  }
9
9
  export interface MirrorInput {
10
- readonly source: MirrorSource;
11
- readonly target: MirrorSource;
12
- readonly catalog: PipelineSchema;
13
- readonly addonIds: readonly string[];
10
+ readonly source: MirrorSource;
11
+ readonly target: MirrorSource;
12
+ readonly catalog: PipelineSchema;
13
+ readonly addonIds: readonly string[];
14
14
  }
15
- export type MirrorOutcome = 'exact' | 'mapped' | 'skip';
15
+ export type MirrorOutcome = "exact" | "mapped" | "skip";
16
16
  export interface MirrorResultEntry {
17
- readonly addonId: string;
18
- readonly outcome: MirrorOutcome;
19
- readonly modelId: string | null;
20
- readonly reason?: string;
21
- readonly patch: CameraStepOverridePatch | null;
17
+ readonly addonId: string;
18
+ readonly outcome: MirrorOutcome;
19
+ readonly modelId: string | null;
20
+ readonly reason?: string;
21
+ readonly patch: CameraStepOverridePatch | null;
22
22
  }
23
23
  export declare function mirror(input: MirrorInput): readonly MirrorResultEntry[];
@@ -1,61 +1,59 @@
1
1
  /**
2
- * Client-side wire codec for the `camstack-control` RTCDataChannel (R9).
3
- *
4
- * Mirrors the broker's `control-protocol.ts`
5
- * (packages/addon-pipeline/src/stream-broker/recorded/control-protocol.ts):
6
- * client→server commands drive the per-viewer `TimelineSession` /
7
- * `RecordedFeeder` (frame-push recorded playback on the SAME WebRTC session
8
- * as live video); server→client messages report playback state + a ~1 Hz
9
- * position. Shapes are re-declared here (not imported) because ui-library
10
- * cannot depend on an addon package — the embed SPA does the same.
11
- *
12
- * Parsing is defensive: a malformed frame returns `null`, never throws, so a
13
- * bad datachannel message can't take down the player.
14
- */
2
+ * Client-side wire codec for the `camstack-control` RTCDataChannel (R9).
3
+ *
4
+ * Mirrors the broker's `control-protocol.ts`
5
+ * (packages/addon-pipeline/src/stream-broker/recorded/control-protocol.ts):
6
+ * client→server commands drive the per-viewer `TimelineSession` /
7
+ * `RecordedFeeder` (frame-push recorded playback on the SAME WebRTC session
8
+ * as live video); server→client messages report playback state + a ~1 Hz
9
+ * position. Shapes are re-declared here (not imported) because ui-library
10
+ * cannot depend on an addon package — the embed SPA does the same.
11
+ *
12
+ * Parsing is defensive: a malformed frame returns `null`, never throws, so a
13
+ * bad datachannel message can't take down the player.
14
+ */
15
15
  export type RecordedControlCommand = {
16
- readonly t: 'playRecorded';
17
- readonly deviceId: number;
18
- readonly epoch: number;
19
- readonly profile: string;
16
+ readonly t: "playRecorded";
17
+ readonly deviceId: number;
18
+ readonly epoch: number;
19
+ readonly profile: string;
20
20
  } | {
21
- readonly t: 'seek';
22
- readonly epoch: number;
21
+ readonly t: "seek";
22
+ readonly epoch: number;
23
23
  } | {
24
- readonly t: 'scrubCommit';
25
- readonly epoch: number;
24
+ readonly t: "scrubCommit";
25
+ readonly epoch: number;
26
26
  } | {
27
- readonly t: 'setRate';
28
- readonly rate: 0 | 1;
27
+ readonly t: "setRate";
28
+ readonly rate: 0 | 1;
29
29
  } | {
30
- readonly t: 'goLive';
30
+ readonly t: "goLive";
31
31
  } | {
32
- readonly t: 'setProfile';
33
- readonly profile: string;
32
+ readonly t: "setProfile";
33
+ readonly profile: string;
34
34
  };
35
35
  /** Serialize a command for `RTCDataChannel.send` (matches the server schema). */
36
36
  export declare function serializeRecordedCommand(cmd: RecordedControlCommand): string;
37
37
  /**
38
- * Playback mode reported by the server session. `live` = the shared live feed
39
- * owns the track; every other value describes the recorded feeder.
40
- */
38
+ * Playback mode reported by the server session. `live` = the shared live feed
39
+ * owns the track; every other value describes the recorded feeder.
40
+ */
41
41
  export declare const RECORDED_PLAYBACK_MODES: readonly ["live", "loading", "playing", "paused", "gap", "ended", "error"];
42
42
  export type RecordedPlaybackMode = (typeof RECORDED_PLAYBACK_MODES)[number];
43
- export type RecordedServedProfile = 'high' | 'mid' | 'low';
43
+ export type RecordedServedProfile = "high" | "mid" | "low";
44
44
  export type RecordedServerMessage = {
45
- readonly kind: 'state';
46
- readonly state: RecordedPlaybackMode;
45
+ readonly kind: "state";
46
+ readonly state: RecordedPlaybackMode;
47
47
  } | {
48
- readonly kind: 'position';
49
- readonly epochMs: number;
50
- }
51
- /** The tier actually playing, next to the one the client asked for. */
52
- | {
53
- readonly kind: 'servedProfile';
54
- readonly profile: RecordedServedProfile;
55
- readonly requested: string;
48
+ readonly kind: "position";
49
+ readonly epochMs: number;
50
+ } | {
51
+ readonly kind: "servedProfile";
52
+ readonly profile: RecordedServedProfile;
53
+ readonly requested: string;
56
54
  };
57
55
  /**
58
- * Parse a raw server→client control frame. Returns `null` on any malformed
59
- * payload (bad JSON, unknown discriminator, wrong field types).
60
- */
56
+ * Parse a raw server→client control frame. Returns `null` on any malformed
57
+ * payload (bad JSON, unknown discriminator, wrong field types).
58
+ */
61
59
  export declare function parseRecordedServerMessage(raw: string): RecordedServerMessage | null;
@@ -1,25 +1,41 @@
1
- import { DeviceDisplayOverride, RoleDisplayDefault } from '@camstack/types';
1
+ /**
2
+ * Shared, pure resolution of a sensor's DISPLAY unit + precision + value
3
+ * transform. One function so the two renderers (`SensorValueAtom`,
4
+ * `SensorHeroCard`) can never diverge — they duplicated this precedence before.
5
+ *
6
+ * Resolution order (device override → role default → live slice →
7
+ * ROLE_DESCRIPTOR canonicalUnit). `??` everywhere, never `||`: `precision: 0`
8
+ * is a legal override and must win over a slice `precision: 2`.
9
+ *
10
+ * Conversion happens at RENDER only — storage stays in source units. An
11
+ * override unit converts the raw slice value ONLY when it shares a dimension
12
+ * with the source unit (`canConvertUnit`); on refusal the display falls back to
13
+ * identity + the SOURCE unit so a unit label and its value math can never
14
+ * disagree. Precision applies AFTER conversion (by construction — the caller
15
+ * runs `formatNumeric(toDisplayValue(raw), precision)`).
16
+ */
17
+ import type { DeviceDisplayOverride, RoleDisplayDefault } from "@camstack/types";
2
18
  export interface SensorDisplayInput {
3
- /** Per-device override from the row (`DeviceInfo.display`). */
4
- readonly display?: DeviceDisplayOverride;
5
- /** Cap name for `perCap` refinement (e.g. 'numeric-sensor'); undefined skips it. */
6
- readonly capName?: string;
7
- /** Role default (`roleDisplayDefaults[device.role]`). */
8
- readonly roleDefault?: RoleDisplayDefault;
9
- /** Live slice unit (the unit the raw VALUE is actually in, for generic sensors). */
10
- readonly sliceUnit?: string;
11
- /** Live slice precision. */
12
- readonly slicePrecision?: number;
13
- /** ROLE_DESCRIPTOR canonical unit fallback (typed roles). */
14
- readonly canonicalUnit?: string;
19
+ /** Per-device override from the row (`DeviceInfo.display`). */
20
+ readonly display?: DeviceDisplayOverride;
21
+ /** Cap name for `perCap` refinement (e.g. 'numeric-sensor'); undefined skips it. */
22
+ readonly capName?: string;
23
+ /** Role default (`roleDisplayDefaults[device.role]`). */
24
+ readonly roleDefault?: RoleDisplayDefault;
25
+ /** Live slice unit (the unit the raw VALUE is actually in, for generic sensors). */
26
+ readonly sliceUnit?: string;
27
+ /** Live slice precision. */
28
+ readonly slicePrecision?: number;
29
+ /** ROLE_DESCRIPTOR canonical unit fallback (typed roles). */
30
+ readonly canonicalUnit?: string;
15
31
  }
16
32
  export interface ResolvedSensorDisplay {
17
- /** Display unit — `''` when none resolves anywhere. */
18
- readonly unit: string;
19
- /** Display precision (int 0-10) or undefined for auto-format. */
20
- readonly precision: number | undefined;
21
- /** Convert a raw slice value into the display unit. Identity unless an
22
- * override unit differs from the source unit AND both share a dimension. */
23
- readonly toDisplayValue: (raw: number) => number;
33
+ /** Display unit — `''` when none resolves anywhere. */
34
+ readonly unit: string;
35
+ /** Display precision (int 0-10) or undefined for auto-format. */
36
+ readonly precision: number | undefined;
37
+ /** Convert a raw slice value into the display unit. Identity unless an
38
+ * override unit differs from the source unit AND both share a dimension. */
39
+ readonly toDisplayValue: (raw: number) => number;
24
40
  }
25
41
  export declare function resolveSensorDisplay(input: SensorDisplayInput): ResolvedSensorDisplay;
@@ -1,40 +1,40 @@
1
1
  /**
2
- * Responsive design tokens — three-tier system.
3
- *
4
- * The admin-ui targets three width tiers; every component should pick
5
- * the right token from this file instead of hand-coding breakpoints.
6
- * Adopting the tokens uniformly is what makes the app feel consistent
7
- * across operator devices (mobile / tablet / desktop) and what unlocks
8
- * targeted tuning (e.g. shrink every label by 1px in one place).
9
- *
10
- * Tier definitions (Tailwind breakpoints):
11
- *
12
- * • **L1 — Compact** (`< 640px`, default = mobile portrait)
13
- * Single column, tight padding, smallest text, icon-only buttons
14
- * where labels can be inferred. The operator can still see every
15
- * stat / action — no horizontal scroll, no clipped text. The user
16
- * directive: "molta informazione in poco spazio quando la width è
17
- * bassa." [a lot of information in little space when the width is low.]
18
- *
19
- * • **L2 — Standard** (`sm` — `640–1023px`, tablet + small laptop)
20
- * 2-column grids, side panels become visible, button labels return.
21
- * Targets ~768px–1024px viewports — the most common operator sizes.
22
- *
23
- * • **L3 — Spacious** (`lg+` — `≥ 1024px`, desktop)
24
- * 4-column grids, generous padding, full-width header text,
25
- * side-by-side composite layouts. The operator has elbow room.
26
- *
27
- * Conventions:
28
- * - **Always start from L1** — the bare class is always the compact
29
- * variant, then `sm:` adds room at 640px, `lg:` at 1024px. No
30
- * desktop-first breakpoints; no max-width queries.
31
- * - **Token strings are static** — kept as `as const` so callers can
32
- * compose them via `cn()` / template literals without running a
33
- * class generator at runtime.
34
- * - **Pair the token with a comment** — the comment in the file
35
- * names every breakpoint it crosses, so a reader can predict the
36
- * layout without going to Tailwind docs.
37
- */
2
+ * Responsive design tokens — three-tier system.
3
+ *
4
+ * The admin-ui targets three width tiers; every component should pick
5
+ * the right token from this file instead of hand-coding breakpoints.
6
+ * Adopting the tokens uniformly is what makes the app feel consistent
7
+ * across operator devices (mobile / tablet / desktop) and what unlocks
8
+ * targeted tuning (e.g. shrink every label by 1px in one place).
9
+ *
10
+ * Tier definitions (Tailwind breakpoints):
11
+ *
12
+ * • **L1 — Compact** (`< 640px`, default = mobile portrait)
13
+ * Single column, tight padding, smallest text, icon-only buttons
14
+ * where labels can be inferred. The operator can still see every
15
+ * stat / action — no horizontal scroll, no clipped text. The user
16
+ * directive: "molta informazione in poco spazio quando la width è
17
+ * bassa." [a lot of information in little space when the width is low.]
18
+ *
19
+ * • **L2 — Standard** (`sm` — `640–1023px`, tablet + small laptop)
20
+ * 2-column grids, side panels become visible, button labels return.
21
+ * Targets ~768px–1024px viewports — the most common operator sizes.
22
+ *
23
+ * • **L3 — Spacious** (`lg+` — `≥ 1024px`, desktop)
24
+ * 4-column grids, generous padding, full-width header text,
25
+ * side-by-side composite layouts. The operator has elbow room.
26
+ *
27
+ * Conventions:
28
+ * - **Always start from L1** — the bare class is always the compact
29
+ * variant, then `sm:` adds room at 640px, `lg:` at 1024px. No
30
+ * desktop-first breakpoints; no max-width queries.
31
+ * - **Token strings are static** — kept as `as const` so callers can
32
+ * compose them via `cn()` / template literals without running a
33
+ * class generator at runtime.
34
+ * - **Pair the token with a comment** — the comment in the file
35
+ * names every breakpoint it crosses, so a reader can predict the
36
+ * layout without going to Tailwind docs.
37
+ */
38
38
  /** Container padding for a card-style section (header + body). */
39
39
  export declare const SECTION_CARD: "rounded-lg border border-border bg-surface overflow-hidden";
40
40
  /** Header strip inside a card (between border-b lines). */
@@ -56,32 +56,32 @@ export declare const SPLIT_PANEL_OUTER: "flex flex-col-reverse md:flex-row";
56
56
  /** Sidebar narrow lane in a SPLIT_PANEL_OUTER layout. */
57
57
  export declare const SPLIT_PANEL_SIDE: "w-full md:w-44 lg:w-52 md:flex-shrink-0 border-b md:border-b-0 md:border-l border-border";
58
58
  /**
59
- * The tier boundary at which a settings label/value row stops stacking.
60
- *
61
- * Below it (L1 — compact) the row is ONE column: label on its own line, value
62
- * on the next at full width. Above it the row is label-left / value-right as
63
- * before. The two-column form needs `SETTING_ROW_LABEL`'s lane plus a readable
64
- * value beside it; a phone has neither, and the failure mode is not "cramped"
65
- * but "the value is the part that gets cut" — the one thing the operator
66
- * opened the page to read.
67
- */
59
+ * The tier boundary at which a settings label/value row stops stacking.
60
+ *
61
+ * Below it (L1 — compact) the row is ONE column: label on its own line, value
62
+ * on the next at full width. Above it the row is label-left / value-right as
63
+ * before. The two-column form needs `SETTING_ROW_LABEL`'s lane plus a readable
64
+ * value beside it; a phone has neither, and the failure mode is not "cramped"
65
+ * but "the value is the part that gets cut" — the one thing the operator
66
+ * opened the page to read.
67
+ */
68
68
  export declare const SETTING_ROW_STACK_BREAKPOINT: "sm";
69
69
  /** Outer row: single column at L1, label/value columns from `sm` up. */
70
70
  export declare const SETTING_ROW: "flex min-w-0 flex-col gap-0.5 py-1.5 sm:flex-row sm:items-center";
71
71
  /** Label lane. Full width (and free to wrap) at L1; a fixed lane from `sm` up. */
72
72
  export declare const SETTING_ROW_LABEL: "min-w-0 text-[11px] leading-tight text-foreground-subtle sm:w-32 sm:shrink-0 sm:pr-2";
73
73
  /**
74
- * Value lane — the value text plus its trailing affordances (copy / reveal).
75
- * `w-full` at L1 so the value owns the whole row once the label is above it;
76
- * `sm:flex-1` makes it share the row again from `sm` up.
77
- */
74
+ * Value lane — the value text plus its trailing affordances (copy / reveal).
75
+ * `w-full` at L1 so the value owns the whole row once the label is above it;
76
+ * `sm:flex-1` makes it share the row again from `sm` up.
77
+ */
78
78
  export declare const SETTING_ROW_VALUE: "flex w-full min-w-0 items-center gap-1 sm:flex-1";
79
79
  /**
80
- * The value text itself. `break-all` lets an opaque token (a key, a URL) wrap
81
- * at L1 instead of being cut mid-word; `sm:truncate` restores the single-line
82
- * desktop form, where the row is wide enough for truncation to be a choice
83
- * rather than data loss.
84
- */
80
+ * The value text itself. `break-all` lets an opaque token (a key, a URL) wrap
81
+ * at L1 instead of being cut mid-word; `sm:truncate` restores the single-line
82
+ * desktop form, where the row is wide enough for truncation to be a choice
83
+ * rather than data loss.
84
+ */
85
85
  export declare const SETTING_ROW_VALUE_TEXT: "min-w-0 break-all text-xs text-foreground sm:truncate";
86
86
  /** Section header label (uppercase tracking-wider). */
87
87
  export declare const TEXT_SECTION_LABEL: "text-[10px] sm:text-[11px] font-semibold text-foreground uppercase tracking-wider";
@@ -1,115 +1,112 @@
1
- export type ScrubSource = 'timeline' | 'heatmap';
1
+ export type ScrubSource = "timeline" | "heatmap";
2
2
  export interface ScrubState {
3
- readonly scrubbing: boolean;
4
- readonly scrubEpoch: number | null;
5
- readonly playheadEpoch: number | null;
6
- readonly lastSource: ScrubSource | null;
3
+ readonly scrubbing: boolean;
4
+ readonly scrubEpoch: number | null;
5
+ readonly playheadEpoch: number | null;
6
+ readonly lastSource: ScrubSource | null;
7
7
  }
8
8
  export declare const initialScrubState: ScrubState;
9
9
  export type ScrubAction = {
10
- readonly type: 'begin';
11
- readonly source: ScrubSource;
10
+ readonly type: "begin";
11
+ readonly source: ScrubSource;
12
12
  } | {
13
- readonly type: 'update';
14
- readonly epoch: number;
15
- readonly source: ScrubSource;
13
+ readonly type: "update";
14
+ readonly epoch: number;
15
+ readonly source: ScrubSource;
16
16
  } | {
17
- readonly type: 'end';
18
- readonly epoch: number;
19
- readonly source: ScrubSource;
17
+ readonly type: "end";
18
+ readonly epoch: number;
19
+ readonly source: ScrubSource;
20
20
  } | {
21
- readonly type: 'seek';
22
- readonly epoch: number;
23
- readonly source: ScrubSource;
21
+ readonly type: "seek";
22
+ readonly epoch: number;
23
+ readonly source: ScrubSource;
24
24
  } | {
25
- readonly type: 'playhead';
26
- readonly epoch: number;
25
+ readonly type: "playhead";
26
+ readonly epoch: number;
27
27
  } | {
28
- readonly type: 'reset';
28
+ readonly type: "reset";
29
29
  };
30
30
  export declare function scrubReducer(state: ScrubState, action: ScrubAction): ScrubState;
31
31
  /**
32
- * Throttle decision for continuous `update` emits (default ~70 ms).
33
- * Returns true when enough time has elapsed since the last emit.
34
- */
32
+ * Throttle decision for continuous `update` emits (default ~70 ms).
33
+ * Returns true when enough time has elapsed since the last emit.
34
+ */
35
35
  export declare function shouldEmit(lastEmitMs: number, now: number, throttleMs?: number): boolean;
36
36
  /** The last committed target (epoch + wall-clock of the commit). */
37
37
  export interface LastCommit {
38
- readonly epoch: number;
39
- readonly at: number;
38
+ readonly epoch: number;
39
+ readonly at: number;
40
40
  }
41
41
  /** Epochs within this many ms of the last commit count as the SAME target. */
42
42
  export declare const COMMIT_DEDUPE_TOLERANCE_MS = 750;
43
43
  /** Only dedupe against a commit made within this recent window. */
44
- export declare const COMMIT_DEDUPE_WINDOW_MS = 2000;
44
+ export declare const COMMIT_DEDUPE_WINDOW_MS = 2e3;
45
45
  /**
46
- * Decide whether a `seek`/`scrubCommit` should actually hit the playback sink.
47
- * Each commit reloads the server feeder (loading→playing) and visibly stutters
48
- * playback; firing the same (or a near-identical) target twice in quick
49
- * succession produces a redundant reload. Drop a commit only when it targets
50
- * essentially the SAME epoch as the last commit AND that commit was recent — a
51
- * genuinely different target, or a re-seek to the same spot after the window,
52
- * always commits.
53
- */
46
+ * Decide whether a `seek`/`scrubCommit` should actually hit the playback sink.
47
+ * Each commit reloads the server feeder (loading→playing) and visibly stutters
48
+ * playback; firing the same (or a near-identical) target twice in quick
49
+ * succession produces a redundant reload. Drop a commit only when it targets
50
+ * essentially the SAME epoch as the last commit AND that commit was recent — a
51
+ * genuinely different target, or a re-seek to the same spot after the window,
52
+ * always commits.
53
+ */
54
54
  export declare function shouldCommit(last: LastCommit | null, epoch: number, now: number, toleranceMs?: number, windowMs?: number): boolean;
55
55
  /**
56
- * The active cursor position (scrub target while scrubbing, else playhead)
57
- * expressed as a 0..1 fraction across the day window.
58
- * Returns null when no position is known or the day window is degenerate.
59
- */
56
+ * The active cursor position (scrub target while scrubbing, else playhead)
57
+ * expressed as a 0..1 fraction across the day window.
58
+ * Returns null when no position is known or the day window is degenerate.
59
+ */
60
60
  export declare function cursorFractionFor(state: ScrubState, day: {
61
- readonly from: number;
62
- readonly to: number;
61
+ readonly from: number;
62
+ readonly to: number;
63
63
  }): number | null;
64
64
  /**
65
- * Generic, always-active playback control surface the scrub controller
66
- * drives. `scrubStart`/`scrubTo` are CLIENT-SIDE hooks (the wire protocol has
67
- * no per-move scrub message — a future WebCodecs preview consumes them);
68
- * `scrubCommit`/`seek` reach the server feeder.
69
- */
65
+ * Generic, always-active playback control surface the scrub controller
66
+ * drives. `scrubStart`/`scrubTo` are CLIENT-SIDE hooks (the wire protocol has
67
+ * no per-move scrub message — a future WebCodecs preview consumes them);
68
+ * `scrubCommit`/`seek` reach the server feeder.
69
+ */
70
70
  export interface PlaybackControlSink {
71
- scrubStart(): void;
72
- scrubTo(epochMs: number): void;
73
- scrubCommit(epochMs: number): void;
74
- seek(epochMs: number): void;
71
+ scrubStart(): void;
72
+ scrubTo(epochMs: number): void;
73
+ scrubCommit(epochMs: number): void;
74
+ seek(epochMs: number): void;
75
75
  }
76
76
  /** A mutable holder, structurally compatible with React's `MutableRefObject`. */
77
77
  export interface MutableRef<T> {
78
- current: T;
78
+ current: T;
79
79
  }
80
80
  /** The gesture callbacks the hook exposes (everything except `state`). */
81
- type ScrubBridge = Omit<ScrubController, 'state'>;
81
+ type ScrubBridge = Omit<ScrubController, "state">;
82
82
  /**
83
- * Builds the always-active bridge callbacks from a sink, a dispatch, and the
84
- * throttle ref. Pure (no React) so it can be unit-tested directly: the hook
85
- * just wraps the result in `useMemo`.
86
- *
87
- * Every gesture drives the sink immediately — there is no VOD-active gate.
88
- */
89
- export declare function makeScrubBridge(sink: PlaybackControlSink, dispatch: (action: ScrubAction) => void, lastEmitRef: MutableRef<number>, lastCommitRef?: MutableRef<LastCommit | null>,
90
- /** Reports whether the PLAYER is currently on the live edge (not in recorded
91
- * mode). Used to bypass commit-dedupe on the live→recorded transition. */
92
- isPlayerLive?: () => boolean): ScrubBridge;
83
+ * Builds the always-active bridge callbacks from a sink, a dispatch, and the
84
+ * throttle ref. Pure (no React) so it can be unit-tested directly: the hook
85
+ * just wraps the result in `useMemo`.
86
+ *
87
+ * Every gesture drives the sink immediately — there is no VOD-active gate.
88
+ */
89
+ export declare function makeScrubBridge(sink: PlaybackControlSink, dispatch: (action: ScrubAction) => void, lastEmitRef: MutableRef<number>, lastCommitRef?: MutableRef<LastCommit | null>, isPlayerLive?: () => boolean): ScrubBridge;
93
90
  export interface ScrubController {
94
- readonly state: ScrubState;
95
- readonly beginScrub: (source: ScrubSource) => void;
96
- readonly updateScrub: (epoch: number, source: ScrubSource) => void;
97
- readonly endScrub: (epoch: number, source: ScrubSource) => void;
98
- readonly seek: (epoch: number, source: ScrubSource) => void;
99
- readonly setPlayhead: (epoch: number) => void;
100
- readonly reset: () => void;
91
+ readonly state: ScrubState;
92
+ readonly beginScrub: (source: ScrubSource) => void;
93
+ readonly updateScrub: (epoch: number, source: ScrubSource) => void;
94
+ readonly endScrub: (epoch: number, source: ScrubSource) => void;
95
+ readonly seek: (epoch: number, source: ScrubSource) => void;
96
+ readonly setPlayhead: (epoch: number) => void;
97
+ readonly reset: () => void;
101
98
  }
102
99
  /**
103
- * Owns the shared scrub position and bridges it to a playback control sink.
104
- *
105
- * The bridge is always active: any gesture (drag or tap) drives the sink
106
- * immediately. There is no VOD-active gate — the timeline always drives
107
- * playback while frame-push mode is on.
108
- *
109
- * @param sink Always-active playback control surface (e.g. the datachannel)
110
- * @param isPlayerLive Synchronous getter for "is the player on the live
111
- * edge?" — lets a live→recorded commit bypass dedupe so the seek always
112
- * reaches the server.
113
- */
100
+ * Owns the shared scrub position and bridges it to a playback control sink.
101
+ *
102
+ * The bridge is always active: any gesture (drag or tap) drives the sink
103
+ * immediately. There is no VOD-active gate — the timeline always drives
104
+ * playback while frame-push mode is on.
105
+ *
106
+ * @param sink Always-active playback control surface (e.g. the datachannel)
107
+ * @param isPlayerLive Synchronous getter for "is the player on the live
108
+ * edge?" — lets a live→recorded commit bypass dedupe so the seek always
109
+ * reaches the server.
110
+ */
114
111
  export declare function useScrubController(sink: PlaybackControlSink, isPlayerLive?: () => boolean): ScrubController;
115
112
  export {};