@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,125 +1,138 @@
1
- import { WebrtcSessionDebug } from '@camstack/types';
2
- import { StreamDebugSample, WebrtcDebugStats } from '../stream-debug/webrtc-debug-stats';
3
- import { HubCandidateSummary, IceCandidateType, ParsedIceCandidate } from './ice-candidates';
4
- import { DiagnosticIcePolicy, SessionVerdict } from './session-verdict';
1
+ /**
2
+ * One hub session run, as an immutable event log folded into a report.
3
+ *
4
+ * The run drives the real `CameraStreamPlayer`; this module never touches a
5
+ * peer connection. The host feeds it what it observed — the hub's answer SDP
6
+ * and trickled candidates (from the wrapped signaling callbacks), the
7
+ * browser's own candidates and ICE / DTLS / peer transitions (from the
8
+ * player's peer connection), the first decoded frame, and the player's 1 Hz
9
+ * `StreamDebugSample` (the `webrtc-debug-stats` collector plus the server's
10
+ * `getSessionDebug` answer). `at` is milliseconds since the run started.
11
+ *
12
+ * Every number in the report is `null` until something measured it (D393).
13
+ */
14
+ import type { WebrtcSessionDebug } from "@camstack/types";
15
+ import type { StreamDebugSample, WebrtcDebugStats } from "../stream-debug/webrtc-debug-stats";
16
+ import { type HubCandidateSummary, type IceCandidateType, type ParsedIceCandidate } from "./ice-candidates";
17
+ import { type DiagnosticIcePolicy, type SessionVerdict } from "./session-verdict";
5
18
  export type SessionRunEvent = {
6
- readonly kind: 'offer-answered';
7
- readonly at: number;
8
- readonly sessionId: string;
9
- readonly sdpAnswer: string;
19
+ readonly kind: "offer-answered";
20
+ readonly at: number;
21
+ readonly sessionId: string;
22
+ readonly sdpAnswer: string;
10
23
  } | {
11
- readonly kind: 'hub-candidates';
12
- readonly at: number;
13
- readonly candidates: readonly string[];
14
- readonly done: boolean;
24
+ readonly kind: "hub-candidates";
25
+ readonly at: number;
26
+ readonly candidates: readonly string[];
27
+ readonly done: boolean;
15
28
  } | {
16
- readonly kind: 'local-candidate';
17
- readonly at: number;
18
- readonly candidate: string;
19
- readonly url: string | null;
20
- readonly relayProtocol: string | null;
29
+ readonly kind: "local-candidate";
30
+ readonly at: number;
31
+ readonly candidate: string;
32
+ readonly url: string | null;
33
+ readonly relayProtocol: string | null;
21
34
  } | {
22
- readonly kind: 'ice-state';
23
- readonly at: number;
24
- readonly state: string;
35
+ readonly kind: "ice-state";
36
+ readonly at: number;
37
+ readonly state: string;
25
38
  } | {
26
- readonly kind: 'dtls-state';
27
- readonly at: number;
28
- readonly state: string;
39
+ readonly kind: "dtls-state";
40
+ readonly at: number;
41
+ readonly state: string;
29
42
  } | {
30
- readonly kind: 'peer-state';
31
- readonly at: number;
32
- readonly state: string;
43
+ readonly kind: "peer-state";
44
+ readonly at: number;
45
+ readonly state: string;
33
46
  } | {
34
- readonly kind: 'first-frame';
35
- readonly at: number;
47
+ readonly kind: "first-frame";
48
+ readonly at: number;
36
49
  } | {
37
- readonly kind: 'sample';
38
- readonly at: number;
39
- readonly sample: StreamDebugSample;
50
+ readonly kind: "sample";
51
+ readonly at: number;
52
+ readonly sample: StreamDebugSample;
40
53
  } | {
41
- readonly kind: 'reconnect';
42
- readonly at: number;
54
+ readonly kind: "reconnect";
55
+ readonly at: number;
43
56
  } | {
44
- readonly kind: 'error';
45
- readonly at: number;
46
- readonly message: string;
57
+ readonly kind: "error";
58
+ readonly at: number;
59
+ readonly message: string;
47
60
  };
48
61
  export interface StateMark {
49
- readonly state: string;
50
- readonly at: number;
62
+ readonly state: string;
63
+ readonly at: number;
51
64
  }
52
65
  export interface LocalCandidateRecord {
53
- readonly candidate: ParsedIceCandidate;
54
- readonly url: string | null;
55
- readonly relayProtocol: string | null;
66
+ readonly candidate: ParsedIceCandidate;
67
+ readonly url: string | null;
68
+ readonly relayProtocol: string | null;
56
69
  }
57
70
  export interface SessionRunState {
58
- readonly policy: DiagnosticIcePolicy;
59
- readonly sessionIds: readonly string[];
60
- readonly sdpAnswer: string | null;
61
- readonly trickled: readonly string[];
62
- readonly trickleDone: boolean | null;
63
- readonly local: readonly LocalCandidateRecord[];
64
- readonly ice: readonly StateMark[];
65
- readonly dtls: readonly StateMark[];
66
- readonly peer: readonly StateMark[];
67
- readonly firstFrameAt: number | null;
68
- /** The last sample that carried client stats — a later failed poll keeps it. */
69
- readonly lastStats: WebrtcDebugStats | null;
70
- readonly lastServer: WebrtcSessionDebug | null;
71
- readonly maxServerPacketsSent: number | null;
72
- readonly lastServerError: string | null;
73
- readonly samples: number;
74
- readonly reconnects: number;
75
- readonly errors: readonly string[];
71
+ readonly policy: DiagnosticIcePolicy;
72
+ readonly sessionIds: readonly string[];
73
+ readonly sdpAnswer: string | null;
74
+ readonly trickled: readonly string[];
75
+ readonly trickleDone: boolean | null;
76
+ readonly local: readonly LocalCandidateRecord[];
77
+ readonly ice: readonly StateMark[];
78
+ readonly dtls: readonly StateMark[];
79
+ readonly peer: readonly StateMark[];
80
+ readonly firstFrameAt: number | null;
81
+ /** The last sample that carried client stats — a later failed poll keeps it. */
82
+ readonly lastStats: WebrtcDebugStats | null;
83
+ readonly lastServer: WebrtcSessionDebug | null;
84
+ readonly maxServerPacketsSent: number | null;
85
+ readonly lastServerError: string | null;
86
+ readonly samples: number;
87
+ readonly reconnects: number;
88
+ readonly errors: readonly string[];
76
89
  }
77
90
  export declare function emptySessionRun(policy: DiagnosticIcePolicy): SessionRunState;
78
91
  export declare function reduceSessionRun(state: SessionRunState, event: SessionRunEvent): SessionRunState;
79
92
  export interface SessionTimeline {
80
- readonly iceConnectedMs: number | null;
81
- readonly dtlsConnectedMs: number | null;
82
- readonly firstFrameMs: number | null;
83
- readonly iceFinalState: string | null;
84
- readonly dtlsFinalState: string | null;
93
+ readonly iceConnectedMs: number | null;
94
+ readonly dtlsConnectedMs: number | null;
95
+ readonly firstFrameMs: number | null;
96
+ readonly iceFinalState: string | null;
97
+ readonly dtlsFinalState: string | null;
85
98
  }
86
99
  export interface SessionPath {
87
- /** `local/remote` candidate types of the selected pair, e.g. `relay/host`. */
88
- readonly pairType: string | null;
89
- readonly protocol: string | null;
90
- readonly rttMs: number | null;
100
+ /** `local/remote` candidate types of the selected pair, e.g. `relay/host`. */
101
+ readonly pairType: string | null;
102
+ readonly protocol: string | null;
103
+ readonly rttMs: number | null;
91
104
  }
92
105
  export interface SessionMedia {
93
- readonly clientBytesReceived: number | null;
94
- readonly clientPacketsReceived: number | null;
95
- readonly framesDecoded: number | null;
96
- readonly serverPacketsSent: number | null;
97
- readonly serverAlive: boolean | null;
98
- readonly servedTier: string | null;
99
- readonly egressLeg: string | null;
100
- readonly lossPercent: number | null;
101
- readonly freezeCount: number | null;
102
- readonly totalFreezeMs: number | null;
103
- readonly pliCount: number | null;
104
- readonly nackCount: number | null;
106
+ readonly clientBytesReceived: number | null;
107
+ readonly clientPacketsReceived: number | null;
108
+ readonly framesDecoded: number | null;
109
+ readonly serverPacketsSent: number | null;
110
+ readonly serverAlive: boolean | null;
111
+ readonly servedTier: string | null;
112
+ readonly egressLeg: string | null;
113
+ readonly lossPercent: number | null;
114
+ readonly freezeCount: number | null;
115
+ readonly totalFreezeMs: number | null;
116
+ readonly pliCount: number | null;
117
+ readonly nackCount: number | null;
105
118
  }
106
119
  export interface SessionLocalCandidates {
107
- readonly countByType: Readonly<Record<IceCandidateType, number>>;
108
- readonly relayProtocols: readonly string[];
109
- readonly urls: readonly string[];
120
+ readonly countByType: Readonly<Record<IceCandidateType, number>>;
121
+ readonly relayProtocols: readonly string[];
122
+ readonly urls: readonly string[];
110
123
  }
111
124
  export interface HubSessionRunReport {
112
- readonly policy: DiagnosticIcePolicy;
113
- readonly durationMs: number;
114
- readonly sessionIds: readonly string[];
115
- readonly hub: HubCandidateSummary;
116
- readonly local: SessionLocalCandidates;
117
- readonly timeline: SessionTimeline;
118
- readonly path: SessionPath;
119
- readonly media: SessionMedia;
120
- readonly reconnects: number;
121
- readonly errors: readonly string[];
122
- readonly serverError: string | null;
123
- readonly verdict: SessionVerdict;
125
+ readonly policy: DiagnosticIcePolicy;
126
+ readonly durationMs: number;
127
+ readonly sessionIds: readonly string[];
128
+ readonly hub: HubCandidateSummary;
129
+ readonly local: SessionLocalCandidates;
130
+ readonly timeline: SessionTimeline;
131
+ readonly path: SessionPath;
132
+ readonly media: SessionMedia;
133
+ readonly reconnects: number;
134
+ readonly errors: readonly string[];
135
+ readonly serverError: string | null;
136
+ readonly verdict: SessionVerdict;
124
137
  }
125
138
  export declare function finalizeSessionRun(state: SessionRunState, durationMs: number): HubSessionRunReport;
@@ -1,28 +1,37 @@
1
- import { HubReachabilityFlag } from './ice-candidates';
2
- export type SessionVerdictLayer = 'transport' | 'hub-dtls' | 'media-black-hole' | 'hub-not-sending' | 'loss-keyframe' | 'healthy' | 'unknown';
1
+ /**
2
+ * Per-layer verdict for one hub session run.
3
+ *
4
+ * The layers are checked in the order media actually climbs them, and the
5
+ * first one that did not hold is the verdict:
6
+ * ICE (a candidate pair) → DTLS (the keys) → RTP (bytes arrive) → decode.
7
+ * A layer whose deciding number was not measured makes the verdict `unknown`
8
+ * — a guessed verdict is the thing an operator trusts and stops measuring.
9
+ */
10
+ import type { HubReachabilityFlag } from "./ice-candidates";
11
+ export type SessionVerdictLayer = "transport" | "hub-dtls" | "media-black-hole" | "hub-not-sending" | "loss-keyframe" | "healthy" | "unknown";
3
12
  export interface SessionVerdict {
4
- readonly layer: SessionVerdictLayer;
5
- readonly title: string;
6
- readonly detail: string;
13
+ readonly layer: SessionVerdictLayer;
14
+ readonly title: string;
15
+ readonly detail: string;
7
16
  }
8
- export type DiagnosticIcePolicy = 'all' | 'relay';
17
+ export type DiagnosticIcePolicy = "all" | "relay";
9
18
  export interface VerdictInput {
10
- readonly policy: DiagnosticIcePolicy;
11
- readonly durationMs: number;
12
- readonly iceConnected: boolean;
13
- readonly iceFinalState: string | null;
14
- readonly dtlsConnected: boolean;
15
- readonly dtlsFinalState: string | null;
16
- readonly hubFlag: HubReachabilityFlag;
17
- readonly clientPacketsReceived: number | null;
18
- readonly framesDecoded: number | null;
19
- readonly serverPacketsSent: number | null;
20
- readonly pliCount: number | null;
21
- readonly freezeCount: number | null;
22
- readonly lossPercent: number | null;
19
+ readonly policy: DiagnosticIcePolicy;
20
+ readonly durationMs: number;
21
+ readonly iceConnected: boolean;
22
+ readonly iceFinalState: string | null;
23
+ readonly dtlsConnected: boolean;
24
+ readonly dtlsFinalState: string | null;
25
+ readonly hubFlag: HubReachabilityFlag;
26
+ readonly clientPacketsReceived: number | null;
27
+ readonly framesDecoded: number | null;
28
+ readonly serverPacketsSent: number | null;
29
+ readonly pliCount: number | null;
30
+ readonly freezeCount: number | null;
31
+ readonly lossPercent: number | null;
23
32
  }
24
33
  /** PLIs the browser may send in one run before it counts as a storm: one at
25
- * start-up plus one recovery is normal; three means keyframes keep breaking. */
34
+ * start-up plus one recovery is normal; three means keyframes keep breaking. */
26
35
  export declare const PLI_STORM_COUNT = 3;
27
36
  /** Packet loss over the run above which a freeze is attributed to loss. */
28
37
  export declare const LOSS_PERCENT_HIGH = 2;
@@ -1,28 +1,28 @@
1
- import { ReactNode } from 'react';
1
+ import { type ReactNode, type JSX } from "react";
2
2
  interface WidgetPanelProps {
3
- /** Header title — rendered uppercase, letter-spaced, foreground. */
4
- readonly title: string;
5
- /** Optional leading icon node (size it `h-3.5 w-3.5` for alignment). */
6
- readonly icon?: ReactNode;
7
- /** Optional right-aligned header slot (timestamp, live badge, …). Ignored
8
- * when `collapsible` is set — the chevron takes that slot. */
9
- readonly headerRight?: ReactNode;
10
- /** Render the header as a toggle that shows/hides the body. */
11
- readonly collapsible?: boolean;
12
- /** Initial open state for a collapsible panel (default open). */
13
- readonly defaultOpen?: boolean;
14
- /** Body padding/utility override (default `p-3`). */
15
- readonly bodyClassName?: string;
16
- readonly children: ReactNode;
3
+ /** Header title — rendered uppercase, letter-spaced, foreground. */
4
+ readonly title: string;
5
+ /** Optional leading icon node (size it `h-3.5 w-3.5` for alignment). */
6
+ readonly icon?: ReactNode;
7
+ /** Optional right-aligned header slot (timestamp, live badge, …). Ignored
8
+ * when `collapsible` is set — the chevron takes that slot. */
9
+ readonly headerRight?: ReactNode;
10
+ /** Render the header as a toggle that shows/hides the body. */
11
+ readonly collapsible?: boolean;
12
+ /** Initial open state for a collapsible panel (default open). */
13
+ readonly defaultOpen?: boolean;
14
+ /** Body padding/utility override (default `p-3`). */
15
+ readonly bodyClassName?: string;
16
+ readonly children: ReactNode;
17
17
  }
18
- export declare function WidgetPanel({ title, icon, headerRight, collapsible, defaultOpen, bodyClassName, children, }: WidgetPanelProps): import("react").JSX.Element;
18
+ export declare function WidgetPanel({ title, icon, headerRight, collapsible, defaultOpen, bodyClassName, children }: WidgetPanelProps): JSX.Element;
19
19
  interface WidgetMetricCardProps {
20
- readonly label: string;
21
- readonly icon?: ReactNode;
22
- /** The metric value (text or node). */
23
- readonly children: ReactNode;
24
- /** Optional sub-line under the value (e.g. "3 segment ranges"). */
25
- readonly footer?: ReactNode;
20
+ readonly label: string;
21
+ readonly icon?: ReactNode;
22
+ /** The metric value (text or node). */
23
+ readonly children: ReactNode;
24
+ /** Optional sub-line under the value (e.g. "3 segment ranges"). */
25
+ readonly footer?: ReactNode;
26
26
  }
27
- export declare function WidgetMetricCard({ label, icon, children, footer }: WidgetMetricCardProps): import("react").JSX.Element;
27
+ export declare function WidgetMetricCard({ label, icon, children, footer }: WidgetMetricCardProps): JSX.Element;
28
28
  export {};
@@ -1,20 +1,38 @@
1
- import { ReactNode } from 'react';
2
- import { WidgetProps } from '../contexts/widget-registry.js';
1
+ /**
2
+ * <WidgetSlot> — single host-side mount point for any addon-contributed
3
+ * widget. Consumers reference a widget by its public id
4
+ * (`<addonId>/<stableId>`), the slot looks the widget's metadata up in
5
+ * the shared `WidgetRegistry`, resolves the component through the
6
+ * unified `useRemoteComponent` Module-Federation loader (the SAME path
7
+ * `ContributionRenderer`'s `kind:'remote'` branch uses), validates host
8
+ * context against the widget's `requires` metadata, and renders one of:
9
+ * - skeleton placeholder while the bundle is still loading,
10
+ * - inline error fallback when the widget id is unknown OR the host
11
+ * didn't supply a required context (`deviceContext` /
12
+ * `integrationContext`),
13
+ * - the resolved component otherwise.
14
+ *
15
+ * The slot is intentionally STUPID — no styling beyond the skeleton/
16
+ * error fallback. Layout (card vs inline, sizing) is the host's
17
+ * responsibility.
18
+ */
19
+ import { type ReactNode } from "react";
20
+ import { type WidgetProps } from "../contexts/widget-registry.js";
3
21
  export interface WidgetSlotProps {
4
- /** `<addonId>/<stableId>` — the public widget identifier. */
5
- readonly widgetId: string;
6
- /** Host context — picked up by metadata `requires` validation. Defaults to `'device-tab'`. */
7
- readonly host?: WidgetProps['host'];
8
- /** Forwarded to widget. */
9
- readonly config?: Readonly<Record<string, unknown>>;
10
- /** Forwarded to widget. */
11
- readonly deviceId?: number;
12
- readonly integrationId?: string;
13
- /** Stable instance id — defaults to `widgetId` for non-dashboard hosts (single mount per page). */
14
- readonly instanceId?: string;
15
- /** Dashboard sizing — placeholder for v1. */
16
- readonly size?: WidgetProps['size'];
17
- readonly columns?: number;
18
- readonly rows?: number;
22
+ /** `<addonId>/<stableId>` — the public widget identifier. */
23
+ readonly widgetId: string;
24
+ /** Host context — picked up by metadata `requires` validation. Defaults to `'device-tab'`. */
25
+ readonly host?: WidgetProps["host"];
26
+ /** Forwarded to widget. */
27
+ readonly config?: Readonly<Record<string, unknown>>;
28
+ /** Forwarded to widget. */
29
+ readonly deviceId?: number;
30
+ readonly integrationId?: string;
31
+ /** Stable instance id — defaults to `widgetId` for non-dashboard hosts (single mount per page). */
32
+ readonly instanceId?: string;
33
+ /** Dashboard sizing — placeholder for v1. */
34
+ readonly size?: WidgetProps["size"];
35
+ readonly columns?: number;
36
+ readonly rows?: number;
19
37
  }
20
38
  export declare function WidgetSlot(props: WidgetSlotProps): ReactNode;
@@ -1,26 +1,62 @@
1
- import { ComponentType, ReactNode } from 'react';
2
- import { ConfigField } from '@camstack/types';
3
1
  /**
4
- * Props shape every custom renderer receives. Keep it congruent with
5
- * the built-in `case` branches so the dispatcher in `config-form-field`
6
- * can pass arguments uniformly.
7
- */
2
+ * Custom field renderer registry.
3
+ *
4
+ * The ui-library's `config-form-field.tsx` switch handles built-in field
5
+ * types (text, number, select, …). Field types declared in
6
+ * `@camstack/types/interfaces/config-ui` that need heavy host-app
7
+ * components (e.g. `zone-editor` → polygon canvas via konva) are
8
+ * dispatched through this registry: a host app (admin-ui) wraps the
9
+ * device-detail tree with `CustomFieldRenderersProvider`, supplying a
10
+ * map of `field.type → React component`. The form renderer looks up
11
+ * the type at the `default:` branch and renders the registered
12
+ * component instead of returning `null`.
13
+ *
14
+ * Why a registry instead of static imports:
15
+ * 1. ui-library stays free of heavy deps (konva, etc.) — host apps
16
+ * that don't render the device page never pay the cost.
17
+ * 2. New custom field types can be added by addon code without
18
+ * modifying ui-library.
19
+ * 3. The renderer can read host-only context (e.g. tRPC client,
20
+ * device id) directly, instead of threading props through the
21
+ * form's recursion.
22
+ *
23
+ * Usage (host app, e.g. admin-ui App.tsx):
24
+ *
25
+ * <CustomFieldRenderersProvider renderers={{
26
+ * 'zone-editor': (props) => <DeviceZonesPanel field={props.field} />,
27
+ * }}>
28
+ * <Routes>...</Routes>
29
+ * </CustomFieldRenderersProvider>
30
+ *
31
+ * The renderer receives the same props shape as built-in cases:
32
+ * - `field`: the discriminated-union ConfigField (already narrowed by
33
+ * the renderer's contract — but TypeScript can't see through the
34
+ * dynamic dispatch, so the implementation must validate / cast).
35
+ * - `value`, `onChange`, `disabled` — same as built-in fields.
36
+ */
37
+ import { type ComponentType, type ReactNode, type JSX } from "react";
38
+ import type { ConfigField } from "@camstack/types";
39
+ /**
40
+ * Props shape every custom renderer receives. Keep it congruent with
41
+ * the built-in `case` branches so the dispatcher in `config-form-field`
42
+ * can pass arguments uniformly.
43
+ */
8
44
  export interface CustomFieldRendererProps {
9
- readonly field: ConfigField;
10
- readonly value: unknown;
11
- readonly onChange: (value: unknown) => void;
12
- readonly disabled?: boolean;
45
+ readonly field: ConfigField;
46
+ readonly value: unknown;
47
+ readonly onChange: (value: unknown) => void;
48
+ readonly disabled?: boolean;
13
49
  }
14
50
  export type CustomFieldRenderer = ComponentType<CustomFieldRendererProps>;
15
51
  export type CustomFieldRendererMap = Readonly<Record<string, CustomFieldRenderer>>;
16
52
  export interface CustomFieldRenderersProviderProps {
17
- readonly renderers: CustomFieldRendererMap;
18
- readonly children: ReactNode;
53
+ readonly renderers: CustomFieldRendererMap;
54
+ readonly children: ReactNode;
19
55
  }
20
- export declare function CustomFieldRenderersProvider({ renderers, children, }: CustomFieldRenderersProviderProps): import("react").JSX.Element;
56
+ export declare function CustomFieldRenderersProvider({ renderers, children }: CustomFieldRenderersProviderProps): JSX.Element;
21
57
  /**
22
- * Look up a registered renderer by `field.type`. Returns null when no
23
- * renderer is registered — caller falls back to its built-in handling
24
- * (or renders nothing).
25
- */
58
+ * Look up a registered renderer by `field.type`. Returns null when no
59
+ * renderer is registered — caller falls back to its built-in handling
60
+ * (or renders nothing).
61
+ */
26
62
  export declare function useCustomFieldRenderer(type: string): CustomFieldRenderer | null;
@@ -1,19 +1,39 @@
1
- import { ReactNode } from 'react';
2
1
  /**
3
- * Cached device snapshot. Loose-typed (`Record<string, unknown>`) at
4
- * the boundary because the wire shape lives in different places
5
- * depending on the caller — DeviceDetail reads from
6
- * `deviceManager.list`, `addon-admin-ui` from a hand-loaded subset.
7
- * Renderers narrow the fields they actually need.
8
- */
2
+ * DeviceContext — current device id (and optional cached device
3
+ * snapshot) for the page subtree.
4
+ *
5
+ * Provided by host pages (admin-ui DeviceDetail, addon device pages)
6
+ * so that deeply-nested form/field renderers can resolve the device
7
+ * they're acting on without prop drilling. Used by custom field
8
+ * renderers (`zone-editor` → polygon canvas, `device-info` /
9
+ * `live-stream-viewer` / `pipeline-stats` / `doorbell-recent` /
10
+ * `stream-network-stats` → overview blocks) that need to call
11
+ * device-scoped caps or read the device's static metadata.
12
+ *
13
+ * The `device` snapshot is optional — when the host has already
14
+ * fetched the device (DeviceDetail loads it on mount) the renderer
15
+ * can read static fields (name, type, addonId, features, stableId)
16
+ * directly from context instead of round-tripping `deviceManager.get`.
17
+ * Adapters that need it MUST also tolerate `null` so they can be
18
+ * mounted in subtrees that don't carry the snapshot — they fall back
19
+ * to their own query in that case.
20
+ */
21
+ import { type ReactNode, type JSX } from "react";
22
+ /**
23
+ * Cached device snapshot. Loose-typed (`Record<string, unknown>`) at
24
+ * the boundary because the wire shape lives in different places
25
+ * depending on the caller — DeviceDetail reads from
26
+ * `deviceManager.list`, `addon-admin-ui` from a hand-loaded subset.
27
+ * Renderers narrow the fields they actually need.
28
+ */
9
29
  export type DeviceSnapshot = Readonly<Record<string, unknown>>;
10
30
  export interface DeviceContextProviderProps {
11
- readonly deviceId: number;
12
- /** Optional cached device snapshot — readers narrow the fields they need. */
13
- readonly device?: DeviceSnapshot;
14
- readonly children: ReactNode;
31
+ readonly deviceId: number;
32
+ /** Optional cached device snapshot — readers narrow the fields they need. */
33
+ readonly device?: DeviceSnapshot;
34
+ readonly children: ReactNode;
15
35
  }
16
- export declare function DeviceContextProvider({ deviceId, device, children }: DeviceContextProviderProps): import("react").JSX.Element;
36
+ export declare function DeviceContextProvider({ deviceId, device, children }: DeviceContextProviderProps): JSX.Element;
17
37
  /** @returns the device id of the current page subtree, or null if outside any provider. */
18
38
  export declare function useDeviceId(): number | null;
19
39
  /** @returns the cached device snapshot, or null when no snapshot is provided. */
@@ -1,9 +1,18 @@
1
- import { ReactNode } from 'react';
1
+ /**
2
+ * Optional host-provided "open quick detail for this device id" callback.
3
+ *
4
+ * The devices table (`DeviceItem` / `DeviceList`) draws a discreet quick-
5
+ * detail glyph whenever a host has published a handler — admin-ui mounts
6
+ * ONE provider at the app shell with the modal. Call sites never wire the
7
+ * button themselves; absence of a provider means no glyph (unit tests,
8
+ * embeds that do not host the modal).
9
+ */
10
+ import { type ReactNode } from "react";
2
11
  export type DeviceQuickDetailOpen = (deviceId: number) => void;
3
12
  export interface DeviceQuickDetailProviderProps {
4
- readonly open: DeviceQuickDetailOpen;
5
- readonly children: ReactNode;
13
+ readonly open: DeviceQuickDetailOpen;
14
+ readonly children: ReactNode;
6
15
  }
7
- export declare function DeviceQuickDetailProvider({ open, children, }: DeviceQuickDetailProviderProps): ReactNode;
16
+ export declare function DeviceQuickDetailProvider({ open, children }: DeviceQuickDetailProviderProps): ReactNode;
8
17
  /** The host's open callback, or null when no provider is mounted. */
9
18
  export declare function useDeviceQuickDetailOpen(): DeviceQuickDetailOpen | null;