@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,330 +1,330 @@
1
- import { ReactNode } from 'react';
2
- import { CamProfile, WebrtcSessionDebug } from '@camstack/types';
3
- import { ReconnectAction } from './reconnect-schedule';
4
- import { AdaptiveHintsReport, ApplyDownlinkProbe } from './adaptive-downlink';
5
- import { ClientNetworkSample } from './client-network-sample';
6
- import { StreamDebugSample } from './stream-debug/webrtc-debug-stats.js';
7
- type WebkitPresentationMode = 'inline' | 'picture-in-picture' | 'fullscreen';
1
+ import { type JSX, type ReactNode } from "react";
2
+ import type { CamProfile, WebrtcSessionDebug } from "@camstack/types";
3
+ import { type ReconnectAction } from "./reconnect-schedule";
4
+ import { type AdaptiveHintsReport, type ApplyDownlinkProbe } from "./adaptive-downlink";
5
+ import { type ClientNetworkSample } from "./client-network-sample";
6
+ import { type StreamDebugSample } from "./stream-debug/webrtc-debug-stats.js";
7
+ type WebkitPresentationMode = "inline" | "picture-in-picture" | "fullscreen";
8
8
  declare global {
9
- interface HTMLVideoElement {
10
- webkitSetPresentationMode?: (mode: WebkitPresentationMode) => void;
11
- readonly webkitPresentationMode?: WebkitPresentationMode;
12
- }
9
+ interface HTMLVideoElement {
10
+ webkitSetPresentationMode?: (mode: WebkitPresentationMode) => void;
11
+ readonly webkitPresentationMode?: WebkitPresentationMode;
12
+ }
13
13
  }
14
- export type PlayerConnectionState = 'connecting' | 'playing' | 'error' | 'disconnected' | 'idle';
14
+ export type PlayerConnectionState = "connecting" | "playing" | "error" | "disconnected" | "idle";
15
15
  /**
16
- * Discriminated WebRTC target — same shape as `WebrtcStreamTarget` on the
17
- * backend cap; the `profile` tier uses the canonical `CamProfile` enum.
18
- * Carried by `getSessionState`'s `pendingRenegotiation` and handed back to
19
- * `reoffer` verbatim during an adaptive re-offer.
20
- */
16
+ * Discriminated WebRTC target — same shape as `WebrtcStreamTarget` on the
17
+ * backend cap; the `profile` tier uses the canonical `CamProfile` enum.
18
+ * Carried by `getSessionState`'s `pendingRenegotiation` and handed back to
19
+ * `reoffer` verbatim during an adaptive re-offer.
20
+ */
21
21
  export type PlayerWebrtcTarget = {
22
- readonly kind: 'adaptive';
22
+ readonly kind: "adaptive";
23
23
  } | {
24
- readonly kind: 'profile';
25
- readonly profile: CamProfile;
24
+ readonly kind: "profile";
25
+ readonly profile: CamProfile;
26
26
  } | {
27
- readonly kind: 'cam-stream';
28
- readonly camStreamId: string;
27
+ readonly kind: "cam-stream";
28
+ readonly camStreamId: string;
29
29
  };
30
30
  /** Live signaling state polled mid-stream — the adaptive re-offer signal. */
31
31
  export interface SessionSignalingState {
32
- readonly pendingRenegotiation: {
33
- readonly target: PlayerWebrtcTarget;
34
- readonly epoch: number;
35
- } | null;
32
+ readonly pendingRenegotiation: {
33
+ readonly target: PlayerWebrtcTarget;
34
+ readonly epoch: number;
35
+ } | null;
36
36
  }
37
37
  /**
38
- * Signaling function for WebRTC connection.
39
- * Called by the player to establish the WebRTC session.
40
- * Must return an RTCSessionDescription (the server's offer or answer depending on mode).
41
- *
42
- * Server-offer mode (default):
43
- * 1. signalingFn is called with streamId → returns { sessionId, sdpOffer }
44
- * 2. Player sets remote description (server offer), creates answer
45
- * 3. Player calls answerFn(sessionId, sdpAnswer) to complete
46
- *
47
- * WHEP mode (legacy):
48
- * 1. Player creates offer, gathers ICE
49
- * 2. signalingFn is called with the client SDP offer → returns sdpAnswer
50
- * 3. Player sets remote description (answer)
51
- */
38
+ * Signaling function for WebRTC connection.
39
+ * Called by the player to establish the WebRTC session.
40
+ * Must return an RTCSessionDescription (the server's offer or answer depending on mode).
41
+ *
42
+ * Server-offer mode (default):
43
+ * 1. signalingFn is called with streamId → returns { sessionId, sdpOffer }
44
+ * 2. Player sets remote description (server offer), creates answer
45
+ * 3. Player calls answerFn(sessionId, sdpAnswer) to complete
46
+ *
47
+ * WHEP mode (legacy):
48
+ * 1. Player creates offer, gathers ICE
49
+ * 2. signalingFn is called with the client SDP offer → returns sdpAnswer
50
+ * 3. Player sets remote description (answer)
51
+ */
52
52
  export interface SignalingResult {
53
- /** Server-offer mode: session ID + SDP offer from server */
54
- sessionId: string;
55
- sdpOffer: string;
56
- /**
57
- * ICE servers (STUN/TURN) the BROWSER should use, supplied by the server
58
- * from its `turn-provider` cap. Critical for remote viewing: behind CGNAT
59
- * (e.g. mobile data) the browser needs a TURN relay candidate or it has no
60
- * reachable address and the stream stays black. Falls back to public STUN.
61
- */
62
- iceServers?: readonly RTCIceServer[];
53
+ /** Server-offer mode: session ID + SDP offer from server */
54
+ sessionId: string;
55
+ sdpOffer: string;
56
+ /**
57
+ * ICE servers (STUN/TURN) the BROWSER should use, supplied by the server
58
+ * from its `turn-provider` cap. Critical for remote viewing: behind CGNAT
59
+ * (e.g. mobile data) the browser needs a TURN relay candidate or it has no
60
+ * reachable address and the stream stays black. Falls back to public STUN.
61
+ */
62
+ iceServers?: readonly RTCIceServer[];
63
63
  }
64
64
  /**
65
- * Client-offer mode result: the server's SDP answer to a browser-built
66
- * offer. The browser creates the offer advertising its FULL decode caps
67
- * (incl. H.264 High on iOS 18), the server answers by echoing the matching
68
- * codec, and the camera's native bytes pass through untouched — no
69
- * transcode. This is the dual of `SignalingResult`'s server-offer flow.
70
- */
65
+ * Client-offer mode result: the server's SDP answer to a browser-built
66
+ * offer. The browser creates the offer advertising its FULL decode caps
67
+ * (incl. H.264 High on iOS 18), the server answers by echoing the matching
68
+ * codec, and the camera's native bytes pass through untouched — no
69
+ * transcode. This is the dual of `SignalingResult`'s server-offer flow.
70
+ */
71
71
  export interface ClientOfferResult {
72
- sessionId: string;
73
- sdpAnswer: string;
72
+ sessionId: string;
73
+ sdpAnswer: string;
74
74
  }
75
75
  /**
76
- * Client-side capabilities sent to the server at session creation.
77
- * The server uses these to pick the best native source for adaptive
78
- * streams (e.g. a 320×180 thumbnail player on a slow link gets the
79
- * camera's low stream rather than ffmpeg-transcoded 4K).
80
- *
81
- * All fields are optional — when omitted the server defaults to its
82
- * highest-quality registered source.
83
- */
76
+ * Client-side capabilities sent to the server at session creation.
77
+ * The server uses these to pick the best native source for adaptive
78
+ * streams (e.g. a 320×180 thumbnail player on a slow link gets the
79
+ * camera's low stream rather than ffmpeg-transcoded 4K).
80
+ *
81
+ * All fields are optional — when omitted the server defaults to its
82
+ * highest-quality registered source.
83
+ */
84
84
  export interface ClientStreamHints {
85
- viewportWidth?: number;
86
- viewportHeight?: number;
87
- devicePixelRatio?: number;
88
- downlinkMbps?: number;
89
- prefersTier?: string;
85
+ viewportWidth?: number;
86
+ viewportHeight?: number;
87
+ devicePixelRatio?: number;
88
+ downlinkMbps?: number;
89
+ prefersTier?: string;
90
90
  }
91
- export type { ClientNetworkSample } from './client-network-sample';
91
+ export type { ClientNetworkSample } from "./client-network-sample";
92
92
  export interface CameraStreamPlayerProps {
93
- /** Server base URL (e.g. window.location.origin) */
94
- serverUrl: string;
95
- /**
96
- * Stable key used for React reconciliation (the player remounts when
97
- * this changes), the snapshot filename, and WHEP fallback URL. The
98
- * value is opaque to the player — no parsing, no semantic meaning.
99
- * Typical values: a `StreamChoice.id` (`'profile:high'`, `'stream:native:main'`).
100
- */
101
- streamKey: string;
102
- /** Human-readable label shown in overlay */
103
- label?: string;
104
- /** Auto-play on mount (default: true) */
105
- autoPlay?: boolean;
106
- /** Start muted (default: true) */
107
- muted?: boolean;
108
- /** Show toolbar controls (default: true) */
109
- showControls?: boolean;
110
- /** Show a live client-side WebRTC stats overlay (bitrate/fps/res/RTT),
111
- * computed from the PeerConnection's getStats(). Default: false. */
112
- showStats?: boolean;
113
- /**
114
- * Report the same measurements to a HOST instead of (or as well as) drawing
115
- * them.
116
- *
117
- * The overlay is a DOM layer, and in the native app the player lives inside a
118
- * WebView whose touches the RN gesture layer owns — so the panel that opens
119
- * on a tap can never be opened there. The numbers still have to reach the
120
- * operator, so they travel out to whoever mounted the player and are rendered
121
- * in its own UI, next to the battery and link details.
122
- *
123
- * Wiring this turns the two 1 Hz polls on by itself: a host that asked for
124
- * samples wants them whether or not the in-picture overlay is drawn.
125
- */
126
- onDebugStats?: (sample: StreamDebugSample) => void;
127
- /** When provided, polls inbound-video getStats() every 5 s during playback
128
- * and reports per-window health metrics (frames received/decoded/dropped,
129
- * freezes, jitter, playback-clock advance). The embed forwards these over the
130
- * existing host log bridge (`{type:'log', scope:'playback'}`), which always
131
- * ships — this is the client half of the recorded stutter census. */
132
- onPlaybackStats?: (data: Record<string, unknown>) => void;
133
- /**
134
- * When provided, samples the inbound-video getStats() ~every 2s and reports
135
- * the CLIENT's live network conditions (packet-loss %, jitter, downlink
136
- * bitrate, RTT) so the caller can push them to the server's
137
- * `networkQuality.reportClientStats`. This is what lets the broker's ADAPTIVE
138
- * ladder actually downgrade "auto" under a poor link: without a client
139
- * signal the server sees only coarse RTCP RR and tends to stay on the top
140
- * tier. Inert (zero behaviour change) unless a callback is passed; wire it
141
- * only for adaptive sessions. */
142
- onClientNetworkSample?: (sample: ClientNetworkSample) => void;
143
- /**
144
- * Bearer for `/adaptive-probe`, which requires a session (D635). A page the
145
- * hub serves carries the session cookie and needs none; a host whose page
146
- * cannot (the native app's `file://` embed) passes its token here. Absent
147
- * and cookieless, the probe reads unknown and the broker's own ladder
148
- * decides (try-climb on a clean path).
149
- */
150
- probeAuthToken?: string | null;
151
- /**
152
- * Cold-start phase breakdown, fired ONCE per connect when ICE reaches
153
- * connected (the same object the `[WebRTC timing]` console line prints:
154
- * iceServersMs/offerCreatedMs/localSetMs/signalingRttMs/answerSetMs/
155
- * iceConnectedMs/firstTrackMs — plus firstFrameMs when the first frame
156
- * DECODES, reported separately as a patch call). Lets an embedding host
157
- * (the RN app's WebView) ship the numbers to its own logs instead of them
158
- * dying in the in-WebView console. Inert unless wired. */
159
- onConnectTiming?: (timing: Record<string, number>) => void;
160
- /** Additional CSS classes for the root container */
161
- className?: string;
162
- /** Called on connection state change */
163
- onStateChange?: (state: PlayerConnectionState) => void;
164
- /** Called on error */
165
- onError?: (error: string) => void;
166
- /**
167
- * Observer of the auto-retry loop: called with every scheduled attempt and
168
- * with the exhaustion edge. Hosts wire it to their log pipeline (tagged with
169
- * the camera) — a retry loop nobody can see is how a camera stays dark
170
- * while looking busy.
171
- */
172
- onReconnectAttempt?: (action: ReconnectAction) => void;
173
- /** Custom overlay rendered on top of the video */
174
- overlay?: ReactNode;
175
- /**
176
- * Create a WebRTC session (server-offer signaling). When provided,
177
- * uses server-offer mode instead of WHEP. The caller closes over the
178
- * target (profile / cam-stream / adaptive) and any device context;
179
- * the player just hands it the auto-derived `hints` (viewport,
180
- * downlink) so the server can score adaptive selections.
181
- */
182
- createSession?: (hints?: ClientStreamHints) => Promise<SignalingResult>;
183
- /**
184
- * Send the client's SDP answer (server-offer signaling).
185
- * Required when createSession is provided.
186
- */
187
- sendAnswer?: (sessionId: string, sdpAnswer: string) => Promise<void>;
188
- /**
189
- * Client-offer signaling — PREFERRED over `createSession` when supplied.
190
- * The player builds the SDP offer (advertising the browser's full native
191
- * decode caps, incl. H.264 High on iOS 18) and this posts it to the
192
- * server, which answers by echoing the matching codec. That lets a
193
- * Main/High (incl. 4K) source pass through with NO transcode — the only
194
- * path that lets iOS decode High. The caller closes over the target.
195
- */
196
- handleOffer?: (sdpOffer: string, sessionId?: string, hints?: ClientStreamHints) => Promise<ClientOfferResult>;
197
- /**
198
- * Fetch the browser-side ICE servers (STUN + TURN) for client-offer mode.
199
- * Called BEFORE the offer is built so a remote/CGNAT viewer can gather a
200
- * relay candidate. Best-effort — resolve `undefined` to use public STUN.
201
- */
202
- getIceServers?: () => Promise<readonly RTCIceServer[] | undefined>;
203
- /** Trickle ICE — push a client-gathered candidate to the server. */
204
- addIceCandidate?: (sessionId: string, candidate: RTCIceCandidateInit) => Promise<void>;
205
- /** Trickle ICE — poll the server's gathered candidates for a session. */
206
- getIceCandidates?: (sessionId: string) => Promise<{
207
- candidates: RTCIceCandidateInit[];
208
- done: boolean;
209
- }>;
210
- /** Explicitly close the WebRTC session on server (cleanup on unmount). */
211
- closeSession?: (sessionId: string) => Promise<void>;
212
- /**
213
- * Poll the live signaling state of a session (client-offer mode only).
214
- * After the server swaps the broker source to a different tier (adaptive
215
- * downgrade), this returns a non-null `pendingRenegotiation` with the new
216
- * target + a monotonic `epoch`. The player then transparently re-offers
217
- * on the SAME sessionId — building a fresh PeerConnection in the
218
- * background and only swapping the live `<video>` to the new stream once
219
- * it delivers media, so the last decoded frame stays on screen with no
220
- * loader. Best-effort: omit it to disable adaptive re-offer entirely.
221
- */
222
- getSessionState?: (sessionId: string) => Promise<SessionSignalingState>;
223
- /**
224
- * Poll the SERVER's account of this session for the stream-debug overlay —
225
- * the rung `auto` actually resolved to, whether that rung is the camera's
226
- * own encode or one this hub built, which node ingests it, whether the
227
- * egress leg copies or re-encodes, and the cause + numbers of the ladder's
228
- * last move (`webrtcSession.getSessionDebug`).
229
- *
230
- * The client can measure its own transport; it cannot see any of that, and
231
- * "quality is stuck on low" is unanswerable without it. Called at ~1 Hz
232
- * ONLY while `showStats` is true, and never when it is false. Omit it and
233
- * the overlay shows its client half alone, saying so.
234
- */
235
- getSessionDebug?: (sessionId: string) => Promise<WebrtcSessionDebug>;
236
- /**
237
- * Hand the downlink probe to the session it was measured on
238
- * (`webrtcSession.applyDownlinkProbe`, D733). The hub then moves THAT
239
- * session to the probed rung — in place when it can — so a live open stays
240
- * one session. Omit it (or talk to a hub that does not know the method) and
241
- * the player keeps its legacy climb: a second, make-before-break session.
242
- */
243
- applyDownlinkProbe?: ApplyDownlinkProbe;
244
- /**
245
- * Re-offer signaling for an adaptive tier switch (client-offer mode).
246
- * Posts a fresh browser-built offer for an EXISTING `sessionId` against
247
- * the new `target` (from `getSessionState`'s `pendingRenegotiation`). The
248
- * server closes the stale session and creates a fresh one under the same
249
- * id, bound to the new tier's source. Distinct from `handleOffer`, whose
250
- * target is fixed at the player's selected stream — a re-offer must carry
251
- * the server-chosen downgrade target instead. Required (alongside
252
- * `getSessionState`) for adaptive re-offer to run.
253
- */
254
- reoffer?: (sessionId: string, sdpOffer: string, target: PlayerWebrtcTarget, hints?: ClientStreamHints) => Promise<ClientOfferResult>;
255
- /**
256
- * Optional poster image (snapshot data-URL) shown by the <video> before
257
- * the FIRST-EVER frame is decoded. Only a cold-start fallback — once a
258
- * frame is showing, the player keeps the last decoded frame across
259
- * renegotiations and never falls back to the poster. Caller-supplied.
260
- */
261
- posterUrl?: string;
262
- /**
263
- * Override client hints sent to the server at session creation.
264
- * Values provided here replace the auto-computed browser values.
265
- * Use for network simulation (benchmark) or manual tier forcing.
266
- */
267
- hintsOverride?: Partial<ClientStreamHints>;
268
- /**
269
- * Observer of the ADAPTIVE decision this client just made — fired once per
270
- * decision CHANGE (see `adaptiveHintsKey`), never per tick.
271
- *
272
- * Deliberately the client's half only: the viewport it measured, the pixel
273
- * ratio, the downlink it managed to measure (and the origin it probed, null
274
- * when none was reachable), and the phase of the offer that carried them.
275
- * The hub logs its own pick from the same inputs; duplicating that here
276
- * would be a second opinion on someone else's decision. Hosts join the two
277
- * halves — the RN viewer forwards this over the embed log bridge so a
278
- * "quality is stuck on low" report carries what the app actually SENT.
279
- *
280
- * Inert unless wired.
281
- */
282
- onAdaptiveHints?: (report: AdaptiveHintsReport) => void;
283
- /**
284
- * Host-driven fast reconnect. Bump this number (monotonic) to force a
285
- * full reconnect WITHOUT remounting the player — used by the embed when
286
- * the native shell detects a network change (Wi-Fi↔cellular) or returns
287
- * from background. Because `cleanup()` no longer clears `srcObject`, the
288
- * LAST DECODED FRAME stays on screen across the reconnect (no black
289
- * flash, no covering loader). The initial value is ignored — only
290
- * changes trigger a reconnect. Distinct from remounting via `streamKey`,
291
- * which blanks the element.
292
- */
293
- reconnectSignal?: number;
294
- /**
295
- * Optional control data-channel hook (client-offer mode only). When
296
- * provided, the player opens a `camstack-control` `RTCDataChannel` on the
297
- * PeerConnection BEFORE building the offer (so it is negotiated into the
298
- * m=application section) and hands the channel to this callback for each new
299
- * connection. Used by the recorded-playback timeline embed to drive the
300
- * broker's `TimelineSession` (seek / scrub-commit / play-rate / go-live) and
301
- * receive server state/position over the SAME WebRTC session that carries the
302
- * unified live-or-recorded `<video>` track. Omit it (the default) for a plain
303
- * live player — no data channel is created and behaviour is unchanged.
304
- */
305
- onControlChannel?: (channel: RTCDataChannel) => void;
306
- /**
307
- * Optional handle to the player's `<video>` element, delivered once on mount
308
- * (and `null` on unmount). Consumers that pace server-pushed frames by what
309
- * the viewer actually RENDERED (`requestVideoFrameCallback`) need the
310
- * element itself — the recorded-scrub receiver-credit acks are the use case.
311
- */
312
- onVideoElement?: (el: HTMLVideoElement | null) => void;
313
- /**
314
- * DIAGNOSTICS ONLY — the browser's ICE transport policy for every peer
315
- * connection this player builds. Absent (always, in production) the policy
316
- * is not set and the browser gathers host/srflx/relay as before. The WebRTC
317
- * diagnostics set `'relay'` to prove whether a TURN-only path reaches the
318
- * hub; see `peer-connection-config.ts` for why the player never does.
319
- */
320
- iceTransportPolicy?: RTCIceTransportPolicy;
321
- /**
322
- * Observer of every peer connection this player creates (first connect,
323
- * reconnects, re-offers), handed over right after construction and before
324
- * any signaling. For listeners only — the diagnostics read ICE / DTLS
325
- * transitions and local candidates through `addEventListener`; a caller
326
- * must never assign the `on*` handlers the player owns.
327
- */
328
- onPeerConnection?: (pc: RTCPeerConnection) => void;
93
+ /** Server base URL (e.g. window.location.origin) */
94
+ serverUrl: string;
95
+ /**
96
+ * Stable key used for React reconciliation (the player remounts when
97
+ * this changes), the snapshot filename, and WHEP fallback URL. The
98
+ * value is opaque to the player — no parsing, no semantic meaning.
99
+ * Typical values: a `StreamChoice.id` (`'profile:high'`, `'stream:native:main'`).
100
+ */
101
+ streamKey: string;
102
+ /** Human-readable label shown in overlay */
103
+ label?: string;
104
+ /** Auto-play on mount (default: true) */
105
+ autoPlay?: boolean;
106
+ /** Start muted (default: true) */
107
+ muted?: boolean;
108
+ /** Show toolbar controls (default: true) */
109
+ showControls?: boolean;
110
+ /** Show a live client-side WebRTC stats overlay (bitrate/fps/res/RTT),
111
+ * computed from the PeerConnection's getStats(). Default: false. */
112
+ showStats?: boolean;
113
+ /**
114
+ * Report the same measurements to a HOST instead of (or as well as) drawing
115
+ * them.
116
+ *
117
+ * The overlay is a DOM layer, and in the native app the player lives inside a
118
+ * WebView whose touches the RN gesture layer owns — so the panel that opens
119
+ * on a tap can never be opened there. The numbers still have to reach the
120
+ * operator, so they travel out to whoever mounted the player and are rendered
121
+ * in its own UI, next to the battery and link details.
122
+ *
123
+ * Wiring this turns the two 1 Hz polls on by itself: a host that asked for
124
+ * samples wants them whether or not the in-picture overlay is drawn.
125
+ */
126
+ onDebugStats?: (sample: StreamDebugSample) => void;
127
+ /** When provided, polls inbound-video getStats() every 5 s during playback
128
+ * and reports per-window health metrics (frames received/decoded/dropped,
129
+ * freezes, jitter, playback-clock advance). The embed forwards these over the
130
+ * existing host log bridge (`{type:'log', scope:'playback'}`), which always
131
+ * ships — this is the client half of the recorded stutter census. */
132
+ onPlaybackStats?: (data: Record<string, unknown>) => void;
133
+ /**
134
+ * When provided, samples the inbound-video getStats() ~every 2s and reports
135
+ * the CLIENT's live network conditions (packet-loss %, jitter, downlink
136
+ * bitrate, RTT) so the caller can push them to the server's
137
+ * `networkQuality.reportClientStats`. This is what lets the broker's ADAPTIVE
138
+ * ladder actually downgrade "auto" under a poor link: without a client
139
+ * signal the server sees only coarse RTCP RR and tends to stay on the top
140
+ * tier. Inert (zero behaviour change) unless a callback is passed; wire it
141
+ * only for adaptive sessions. */
142
+ onClientNetworkSample?: (sample: ClientNetworkSample) => void;
143
+ /**
144
+ * Bearer for `/adaptive-probe`, which requires a session (D635). A page the
145
+ * hub serves carries the session cookie and needs none; a host whose page
146
+ * cannot (the native app's `file://` embed) passes its token here. Absent
147
+ * and cookieless, the probe reads unknown and the broker's own ladder
148
+ * decides (try-climb on a clean path).
149
+ */
150
+ probeAuthToken?: string | null;
151
+ /**
152
+ * Cold-start phase breakdown, fired ONCE per connect when ICE reaches
153
+ * connected (the same object the `[WebRTC timing]` console line prints:
154
+ * iceServersMs/offerCreatedMs/localSetMs/signalingRttMs/answerSetMs/
155
+ * iceConnectedMs/firstTrackMs — plus firstFrameMs when the first frame
156
+ * DECODES, reported separately as a patch call). Lets an embedding host
157
+ * (the RN app's WebView) ship the numbers to its own logs instead of them
158
+ * dying in the in-WebView console. Inert unless wired. */
159
+ onConnectTiming?: (timing: Record<string, number>) => void;
160
+ /** Additional CSS classes for the root container */
161
+ className?: string;
162
+ /** Called on connection state change */
163
+ onStateChange?: (state: PlayerConnectionState) => void;
164
+ /** Called on error */
165
+ onError?: (error: string) => void;
166
+ /**
167
+ * Observer of the auto-retry loop: called with every scheduled attempt and
168
+ * with the exhaustion edge. Hosts wire it to their log pipeline (tagged with
169
+ * the camera) — a retry loop nobody can see is how a camera stays dark
170
+ * while looking busy.
171
+ */
172
+ onReconnectAttempt?: (action: ReconnectAction) => void;
173
+ /** Custom overlay rendered on top of the video */
174
+ overlay?: ReactNode;
175
+ /**
176
+ * Create a WebRTC session (server-offer signaling). When provided,
177
+ * uses server-offer mode instead of WHEP. The caller closes over the
178
+ * target (profile / cam-stream / adaptive) and any device context;
179
+ * the player just hands it the auto-derived `hints` (viewport,
180
+ * downlink) so the server can score adaptive selections.
181
+ */
182
+ createSession?: (hints?: ClientStreamHints) => Promise<SignalingResult>;
183
+ /**
184
+ * Send the client's SDP answer (server-offer signaling).
185
+ * Required when createSession is provided.
186
+ */
187
+ sendAnswer?: (sessionId: string, sdpAnswer: string) => Promise<void>;
188
+ /**
189
+ * Client-offer signaling — PREFERRED over `createSession` when supplied.
190
+ * The player builds the SDP offer (advertising the browser's full native
191
+ * decode caps, incl. H.264 High on iOS 18) and this posts it to the
192
+ * server, which answers by echoing the matching codec. That lets a
193
+ * Main/High (incl. 4K) source pass through with NO transcode — the only
194
+ * path that lets iOS decode High. The caller closes over the target.
195
+ */
196
+ handleOffer?: (sdpOffer: string, sessionId?: string, hints?: ClientStreamHints) => Promise<ClientOfferResult>;
197
+ /**
198
+ * Fetch the browser-side ICE servers (STUN + TURN) for client-offer mode.
199
+ * Called BEFORE the offer is built so a remote/CGNAT viewer can gather a
200
+ * relay candidate. Best-effort — resolve `undefined` to use public STUN.
201
+ */
202
+ getIceServers?: () => Promise<readonly RTCIceServer[] | undefined>;
203
+ /** Trickle ICE — push a client-gathered candidate to the server. */
204
+ addIceCandidate?: (sessionId: string, candidate: RTCIceCandidateInit) => Promise<void>;
205
+ /** Trickle ICE — poll the server's gathered candidates for a session. */
206
+ getIceCandidates?: (sessionId: string) => Promise<{
207
+ candidates: RTCIceCandidateInit[];
208
+ done: boolean;
209
+ }>;
210
+ /** Explicitly close the WebRTC session on server (cleanup on unmount). */
211
+ closeSession?: (sessionId: string) => Promise<void>;
212
+ /**
213
+ * Poll the live signaling state of a session (client-offer mode only).
214
+ * After the server swaps the broker source to a different tier (adaptive
215
+ * downgrade), this returns a non-null `pendingRenegotiation` with the new
216
+ * target + a monotonic `epoch`. The player then transparently re-offers
217
+ * on the SAME sessionId — building a fresh PeerConnection in the
218
+ * background and only swapping the live `<video>` to the new stream once
219
+ * it delivers media, so the last decoded frame stays on screen with no
220
+ * loader. Best-effort: omit it to disable adaptive re-offer entirely.
221
+ */
222
+ getSessionState?: (sessionId: string) => Promise<SessionSignalingState>;
223
+ /**
224
+ * Poll the SERVER's account of this session for the stream-debug overlay —
225
+ * the rung `auto` actually resolved to, whether that rung is the camera's
226
+ * own encode or one this hub built, which node ingests it, whether the
227
+ * egress leg copies or re-encodes, and the cause + numbers of the ladder's
228
+ * last move (`webrtcSession.getSessionDebug`).
229
+ *
230
+ * The client can measure its own transport; it cannot see any of that, and
231
+ * "quality is stuck on low" is unanswerable without it. Called at ~1 Hz
232
+ * ONLY while `showStats` is true, and never when it is false. Omit it and
233
+ * the overlay shows its client half alone, saying so.
234
+ */
235
+ getSessionDebug?: (sessionId: string) => Promise<WebrtcSessionDebug>;
236
+ /**
237
+ * Hand the downlink probe to the session it was measured on
238
+ * (`webrtcSession.applyDownlinkProbe`, D733). The hub then moves THAT
239
+ * session to the probed rung — in place when it can — so a live open stays
240
+ * one session. Omit it (or talk to a hub that does not know the method) and
241
+ * the player keeps its legacy climb: a second, make-before-break session.
242
+ */
243
+ applyDownlinkProbe?: ApplyDownlinkProbe;
244
+ /**
245
+ * Re-offer signaling for an adaptive tier switch (client-offer mode).
246
+ * Posts a fresh browser-built offer for an EXISTING `sessionId` against
247
+ * the new `target` (from `getSessionState`'s `pendingRenegotiation`). The
248
+ * server closes the stale session and creates a fresh one under the same
249
+ * id, bound to the new tier's source. Distinct from `handleOffer`, whose
250
+ * target is fixed at the player's selected stream — a re-offer must carry
251
+ * the server-chosen downgrade target instead. Required (alongside
252
+ * `getSessionState`) for adaptive re-offer to run.
253
+ */
254
+ reoffer?: (sessionId: string, sdpOffer: string, target: PlayerWebrtcTarget, hints?: ClientStreamHints) => Promise<ClientOfferResult>;
255
+ /**
256
+ * Optional poster image (snapshot data-URL) shown by the <video> before
257
+ * the FIRST-EVER frame is decoded. Only a cold-start fallback — once a
258
+ * frame is showing, the player keeps the last decoded frame across
259
+ * renegotiations and never falls back to the poster. Caller-supplied.
260
+ */
261
+ posterUrl?: string;
262
+ /**
263
+ * Override client hints sent to the server at session creation.
264
+ * Values provided here replace the auto-computed browser values.
265
+ * Use for network simulation (benchmark) or manual tier forcing.
266
+ */
267
+ hintsOverride?: Partial<ClientStreamHints>;
268
+ /**
269
+ * Observer of the ADAPTIVE decision this client just made — fired once per
270
+ * decision CHANGE (see `adaptiveHintsKey`), never per tick.
271
+ *
272
+ * Deliberately the client's half only: the viewport it measured, the pixel
273
+ * ratio, the downlink it managed to measure (and the origin it probed, null
274
+ * when none was reachable), and the phase of the offer that carried them.
275
+ * The hub logs its own pick from the same inputs; duplicating that here
276
+ * would be a second opinion on someone else's decision. Hosts join the two
277
+ * halves — the RN viewer forwards this over the embed log bridge so a
278
+ * "quality is stuck on low" report carries what the app actually SENT.
279
+ *
280
+ * Inert unless wired.
281
+ */
282
+ onAdaptiveHints?: (report: AdaptiveHintsReport) => void;
283
+ /**
284
+ * Host-driven fast reconnect. Bump this number (monotonic) to force a
285
+ * full reconnect WITHOUT remounting the player — used by the embed when
286
+ * the native shell detects a network change (Wi-Fi↔cellular) or returns
287
+ * from background. Because `cleanup()` no longer clears `srcObject`, the
288
+ * LAST DECODED FRAME stays on screen across the reconnect (no black
289
+ * flash, no covering loader). The initial value is ignored — only
290
+ * changes trigger a reconnect. Distinct from remounting via `streamKey`,
291
+ * which blanks the element.
292
+ */
293
+ reconnectSignal?: number;
294
+ /**
295
+ * Optional control data-channel hook (client-offer mode only). When
296
+ * provided, the player opens a `camstack-control` `RTCDataChannel` on the
297
+ * PeerConnection BEFORE building the offer (so it is negotiated into the
298
+ * m=application section) and hands the channel to this callback for each new
299
+ * connection. Used by the recorded-playback timeline embed to drive the
300
+ * broker's `TimelineSession` (seek / scrub-commit / play-rate / go-live) and
301
+ * receive server state/position over the SAME WebRTC session that carries the
302
+ * unified live-or-recorded `<video>` track. Omit it (the default) for a plain
303
+ * live player — no data channel is created and behaviour is unchanged.
304
+ */
305
+ onControlChannel?: (channel: RTCDataChannel) => void;
306
+ /**
307
+ * Optional handle to the player's `<video>` element, delivered once on mount
308
+ * (and `null` on unmount). Consumers that pace server-pushed frames by what
309
+ * the viewer actually RENDERED (`requestVideoFrameCallback`) need the
310
+ * element itself — the recorded-scrub receiver-credit acks are the use case.
311
+ */
312
+ onVideoElement?: (el: HTMLVideoElement | null) => void;
313
+ /**
314
+ * DIAGNOSTICS ONLY — the browser's ICE transport policy for every peer
315
+ * connection this player builds. Absent (always, in production) the policy
316
+ * is not set and the browser gathers host/srflx/relay as before. The WebRTC
317
+ * diagnostics set `'relay'` to prove whether a TURN-only path reaches the
318
+ * hub; see `peer-connection-config.ts` for why the player never does.
319
+ */
320
+ iceTransportPolicy?: RTCIceTransportPolicy;
321
+ /**
322
+ * Observer of every peer connection this player creates (first connect,
323
+ * reconnects, re-offers), handed over right after construction and before
324
+ * any signaling. For listeners only — the diagnostics read ICE / DTLS
325
+ * transitions and local candidates through `addEventListener`; a caller
326
+ * must never assign the `on*` handlers the player owns.
327
+ */
328
+ onPeerConnection?: (pc: RTCPeerConnection) => void;
329
329
  }
330
- export declare function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay, muted: initialMuted, showControls, showStats, onDebugStats, onPlaybackStats, onClientNetworkSample, probeAuthToken, onConnectTiming, className, onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, applyDownlinkProbe, reoffer, posterUrl, hintsOverride, onAdaptiveHints, reconnectSignal, onControlChannel, onVideoElement, iceTransportPolicy, onPeerConnection, }: CameraStreamPlayerProps): import("react").JSX.Element;
330
+ export declare function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay, muted: initialMuted, showControls, showStats, onDebugStats, onPlaybackStats, onClientNetworkSample, probeAuthToken, onConnectTiming, className, onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, applyDownlinkProbe, reoffer, posterUrl, hintsOverride, onAdaptiveHints, reconnectSignal, onControlChannel, onVideoElement, iceTransportPolicy, onPeerConnection }: CameraStreamPlayerProps): JSX.Element;