@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,15 +1,15 @@
1
1
  /**
2
- * The ONE name of an inference accelerator, everywhere it is shown: the step
3
- * matrix's column headers, the load-balancing rows, the camera assignments
4
- * table, Model Studio's device chips. Four pages had drifted into four
5
- * spellings of the same device — the Mac mini's Neural Engine read "Coreml All"
6
- * in the step matrix and "Apple ANE" on Load balancing.
7
- */
2
+ * The ONE name of an inference accelerator, everywhere it is shown: the step
3
+ * matrix's column headers, the load-balancing rows, the camera assignments
4
+ * table, Model Studio's device chips. Four pages had drifted into four
5
+ * spellings of the same device — the Mac mini's Neural Engine read "Coreml All"
6
+ * in the step matrix and "Apple ANE" on Load balancing.
7
+ */
8
8
  /** What naming needs from a device row (`NodeInferenceDevice` satisfies it). */
9
9
  export interface AcceleratorIdentity {
10
- readonly key: string;
11
- readonly backend: string;
12
- readonly device: string;
10
+ readonly key: string;
11
+ readonly backend: string;
12
+ readonly device: string;
13
13
  }
14
14
  /** "Intel NPU", "Apple Neural Engine", "Coral Edge TPU", "CPU" — Auto tune's names too. */
15
15
  export declare function acceleratorLabel(device: AcceleratorIdentity): string;
@@ -1,31 +1,31 @@
1
1
  /**
2
- * Burst-download the hub's `/adaptive-probe` blob and return Mbps.
3
- * Used as `hints.downlinkMbps` so adaptive selection is based on a measured
4
- * path, not viewport size or IP class. Failures return null (caller keeps
5
- * the default-low / ceiling path and may stay on the lowest rung).
6
- *
7
- * D635 (2026-09-25): the probe used to time a 128 KiB blob from the REQUEST,
8
- * fired in parallel with `createSession` on a hub at ~80 % CPU. It read the
9
- * LAN as 1.2–1.46 Mbps — the elapsed time was mostly waiting for the first
10
- * byte, i.e. latency. It now (1) times the body from its FIRST byte, (2) reads
11
- * a 1 MiB blob so the transfer dominates timer jitter, and (3) runs after the
12
- * session's first decoded frame, never during session setup.
13
- */
2
+ * Burst-download the hub's `/adaptive-probe` blob and return Mbps.
3
+ * Used as `hints.downlinkMbps` so adaptive selection is based on a measured
4
+ * path, not viewport size or IP class. Failures return null (caller keeps
5
+ * the default-low / ceiling path and may stay on the lowest rung).
6
+ *
7
+ * D635 (2026-09-25): the probe used to time a 128 KiB blob from the REQUEST,
8
+ * fired in parallel with `createSession` on a hub at ~80 % CPU. It read the
9
+ * LAN as 1.2–1.46 Mbps — the elapsed time was mostly waiting for the first
10
+ * byte, i.e. latency. It now (1) times the body from its FIRST byte, (2) reads
11
+ * a 1 MiB blob so the transfer dominates timer jitter, and (3) runs after the
12
+ * session's first decoded frame, never during session setup.
13
+ */
14
14
  export declare const ADAPTIVE_PROBE_PATH = "/adaptive-probe";
15
15
  /**
16
- * Whole-probe deadline, from the request. A probe cut here is still a
17
- * measurement of whatever body arrived (see {@link measureDownlinkMbps}).
18
- */
16
+ * Whole-probe deadline, from the request. A probe cut here is still a
17
+ * measurement of whatever body arrived (see {@link measureDownlinkMbps}).
18
+ */
19
19
  export declare const ADAPTIVE_PROBE_TIMEOUT_MS = 2500;
20
20
  /**
21
- * Fewest body bytes AFTER the first chunk that make a rate. 64 KiB: at the
22
- * `high` threshold (8 Mbps) that is 65 ms of transfer — four times a 16 ms
23
- * WebView timer tick. Less is a guess, and a guess is unknown, not slow.
24
- */
21
+ * Fewest body bytes AFTER the first chunk that make a rate. 64 KiB: at the
22
+ * `high` threshold (8 Mbps) that is 65 ms of transfer — four times a 16 ms
23
+ * WebView timer tick. Less is a guess, and a guess is unknown, not slow.
24
+ */
25
25
  export declare const ADAPTIVE_PROBE_MIN_MEASURED_BYTES: number;
26
26
  /** How long the probe waits for the session's first decoded frame. */
27
- export declare const FIRST_FRAME_PROBE_TIMEOUT_MS = 15000;
28
- export type AdaptiveTier = 'high' | 'mid' | 'low';
27
+ export declare const FIRST_FRAME_PROBE_TIMEOUT_MS = 15e3;
28
+ export type AdaptiveTier = "high" | "mid" | "low";
29
29
  /** Mbps needed to attempt each rung (bitrate / 0.6 headroom, rounded). */
30
30
  export declare const DOWNLINK_HIGH_MBPS = 8;
31
31
  export declare const DOWNLINK_MID_MBPS = 2.5;
@@ -33,172 +33,170 @@ export declare const DOWNLINK_MID_MBPS = 2.5;
33
33
  export declare function suggestedAdaptiveTier(mbps: number): AdaptiveTier;
34
34
  /** First connect never carries a cached probe — the broker starts lowest. */
35
35
  export declare function stripDownlinkForColdStart<T extends {
36
- readonly downlinkMbps?: number;
37
- }>(hints: T): Omit<T, 'downlinkMbps'>;
36
+ readonly downlinkMbps?: number;
37
+ }>(hints: T): Omit<T, "downlinkMbps">;
38
38
  /** After a probe, only mid/high justify a make-before-break climb. */
39
39
  export declare function shouldUpgradeAfterProbe(mbps: number): boolean;
40
40
  /**
41
- * The origin `/adaptive-probe` must be fetched from — the HUB, not the page.
42
- *
43
- * The page origin was the original assumption ("same-origin as the player",
44
- * `adaptive-probe.routes.ts`) and it is only true for the web viewer and the
45
- * iframe embed, both served by the hub. The NATIVE viewer loads this same
46
- * player from an asset bundled with the app (`useNativeEmbedSource` resolves
47
- * `assets/embed/camstack-embed.html` through `Image.resolveAssetSource`), so
48
- * inside the WKWebView `window.location.origin` is `file://` — and
49
- * `file:///adaptive-probe` is not a request any hub can answer. The probe
50
- * therefore returned null on EVERY native connect, `downlinkMbps` was never
51
- * sent, `pickAdaptiveTier` scored every session `default-low`, and
52
- * `shouldUpgradeAfterProbe` was never even reached — so the make-before-break
53
- * climb that the cold-start default depends on could not run. That is the
54
- * whole of "the automatic quality always drops to low" on the app.
55
- *
56
- * The hub the player is already talking to is the `serverUrl` prop, so it
57
- * wins; the page origin remains as the fallback for a host that passes a
58
- * relative/empty `serverUrl`. Null means no probe is possible and the caller
59
- * must skip it rather than fetch a URL that cannot exist.
60
- */
41
+ * The origin `/adaptive-probe` must be fetched from — the HUB, not the page.
42
+ *
43
+ * The page origin was the original assumption ("same-origin as the player",
44
+ * `adaptive-probe.routes.ts`) and it is only true for the web viewer and the
45
+ * iframe embed, both served by the hub. The NATIVE viewer loads this same
46
+ * player from an asset bundled with the app (`useNativeEmbedSource` resolves
47
+ * `assets/embed/camstack-embed.html` through `Image.resolveAssetSource`), so
48
+ * inside the WKWebView `window.location.origin` is `file://` — and
49
+ * `file:///adaptive-probe` is not a request any hub can answer. The probe
50
+ * therefore returned null on EVERY native connect, `downlinkMbps` was never
51
+ * sent, `pickAdaptiveTier` scored every session `default-low`, and
52
+ * `shouldUpgradeAfterProbe` was never even reached — so the make-before-break
53
+ * climb that the cold-start default depends on could not run. That is the
54
+ * whole of "the automatic quality always drops to low" on the app.
55
+ *
56
+ * The hub the player is already talking to is the `serverUrl` prop, so it
57
+ * wins; the page origin remains as the fallback for a host that passes a
58
+ * relative/empty `serverUrl`. Null means no probe is possible and the caller
59
+ * must skip it rather than fetch a URL that cannot exist.
60
+ */
61
61
  export declare function resolveProbeOrigin(serverUrl: string | undefined, pageOrigin: string | undefined): string | null;
62
62
  /** Which offer composed the hints. A climb and a cold start read identically
63
- * in the hub's log; only the client knows which one it just sent. */
64
- export type AdaptiveOfferPhase = 'cold-start' | 'probe-climb' | 'renegotiate' | 'probe-refused'
65
- /** The probe went to the session it was measured on; the hub answered (D733). */
66
- | 'probe-in-session';
63
+ * in the hub's log; only the client knows which one it just sent. */
64
+ export type AdaptiveOfferPhase = "cold-start" | "probe-climb" | "renegotiate" | "probe-refused" | "probe-in-session";
67
65
  /**
68
- * What the CLIENT sent for one adaptive decision. Deliberately not the hub's
69
- * verdict — the hub already logs its own pick, and a client line that repeated
70
- * it would prove nothing about the client. This is the other half of that
71
- * join: the inputs the hub scored, plus whether the downlink probe had an
72
- * origin it could even reach.
73
- */
66
+ * What the CLIENT sent for one adaptive decision. Deliberately not the hub's
67
+ * verdict — the hub already logs its own pick, and a client line that repeated
68
+ * it would prove nothing about the client. This is the other half of that
69
+ * join: the inputs the hub scored, plus whether the downlink probe had an
70
+ * origin it could even reach.
71
+ */
74
72
  export interface AdaptiveHintsReport {
75
- readonly phase: AdaptiveOfferPhase;
76
- /** Null when no http(s) origin resolved — the probe did not run at all. */
77
- readonly probeOrigin: string | null;
78
- readonly viewportWidth?: number;
79
- readonly viewportHeight?: number;
80
- readonly devicePixelRatio?: number;
81
- readonly downlinkMbps?: number;
82
- readonly prefersTier?: string;
83
- /** For `probe-refused`: the HTTP status the hub answered the probe with (401/429…). */
84
- readonly probeStatus?: number;
85
- /** For `probe-in-session`: what the hub did with it — `outcome:tier:reason`. */
86
- readonly probeAnswer?: string;
73
+ readonly phase: AdaptiveOfferPhase;
74
+ /** Null when no http(s) origin resolved — the probe did not run at all. */
75
+ readonly probeOrigin: string | null;
76
+ readonly viewportWidth?: number;
77
+ readonly viewportHeight?: number;
78
+ readonly devicePixelRatio?: number;
79
+ readonly downlinkMbps?: number;
80
+ readonly prefersTier?: string;
81
+ /** For `probe-refused`: the HTTP status the hub answered the probe with (401/429…). */
82
+ readonly probeStatus?: number;
83
+ /** For `probe-in-session`: what the hub did with it — `outcome:tier:reason`. */
84
+ readonly probeAnswer?: string;
87
85
  }
88
86
  /**
89
- * Identity of a decision, for "log once per CHANGE, not per tick".
90
- *
91
- * `downlinkMbps` is a fresh measurement on every probe and would otherwise
92
- * make every offer look like a new decision. What the ladder actually consumes
93
- * is the RUNG it maps to (`suggestedAdaptiveTier`), so two measurements that
94
- * pick the same rung are the same decision and must collapse to one line.
95
- */
87
+ * Identity of a decision, for "log once per CHANGE, not per tick".
88
+ *
89
+ * `downlinkMbps` is a fresh measurement on every probe and would otherwise
90
+ * make every offer look like a new decision. What the ladder actually consumes
91
+ * is the RUNG it maps to (`suggestedAdaptiveTier`), so two measurements that
92
+ * pick the same rung are the same decision and must collapse to one line.
93
+ */
96
94
  export declare function adaptiveHintsKey(report: AdaptiveHintsReport): string;
97
95
  /** The slice of a body reader the probe uses (a `ReadableStreamDefaultReader` fits). */
98
96
  export interface ProbeBodyReader {
99
- read(): Promise<{
100
- readonly done: boolean;
101
- readonly value?: Uint8Array;
102
- }>;
103
- cancel(): Promise<void>;
97
+ read(): Promise<{
98
+ readonly done: boolean;
99
+ readonly value?: Uint8Array;
100
+ }>;
101
+ cancel(): Promise<void>;
104
102
  }
105
103
  /** The slice of a fetch `Response` the probe uses. */
106
104
  export interface ProbeResponse {
107
- readonly ok: boolean;
108
- readonly status?: number;
109
- readonly body?: {
110
- getReader(): ProbeBodyReader;
111
- } | null;
112
- arrayBuffer(): Promise<ArrayBuffer>;
105
+ readonly ok: boolean;
106
+ readonly status?: number;
107
+ readonly body?: {
108
+ getReader(): ProbeBodyReader;
109
+ } | null;
110
+ arrayBuffer(): Promise<ArrayBuffer>;
113
111
  }
114
112
  export interface DownlinkProbeDeps {
115
- readonly fetchImpl: (url: string, init: {
116
- signal: AbortSignal;
117
- }) => Promise<ProbeResponse>;
118
- readonly now: () => number;
119
- /**
120
- * The hub answered but refused (401 without a session, 429 rate-limited).
121
- * The reading is still unknown — but a missing token must not be silent,
122
- * or it is indistinguishable from a failed probe (review N3, D391).
123
- */
124
- readonly onRefused?: (status: number) => void;
113
+ readonly fetchImpl: (url: string, init: {
114
+ signal: AbortSignal;
115
+ }) => Promise<ProbeResponse>;
116
+ readonly now: () => number;
117
+ /**
118
+ * The hub answered but refused (401 without a session, 429 rate-limited).
119
+ * The reading is still unknown — but a missing token must not be silent,
120
+ * or it is indistinguishable from a failed probe (review N3, D391).
121
+ */
122
+ readonly onRefused?: (status: number) => void;
125
123
  }
126
124
  export declare function measureDownlinkMbps(origin: string, deps: DownlinkProbeDeps): Promise<number | null>;
127
- export type FirstFrameOutcome = 'frame' | 'timeout' | 'aborted';
125
+ export type FirstFrameOutcome = "frame" | "timeout" | "aborted";
128
126
  export interface FirstFrameDeps {
129
- /** The live video element's `readyState`, or null when there is none yet. */
130
- readonly readyState: () => number | null;
131
- readonly signal: AbortSignal;
132
- readonly sleep: (ms: number) => Promise<void>;
133
- readonly now: () => number;
127
+ /** The live video element's `readyState`, or null when there is none yet. */
128
+ readonly readyState: () => number | null;
129
+ readonly signal: AbortSignal;
130
+ readonly sleep: (ms: number) => Promise<void>;
131
+ readonly now: () => number;
134
132
  }
135
133
  /**
136
- * Resolve once the session presents its first decoded frame — the moment
137
- * session setup (createSession, ICE, DTLS, the first IDR) is over and a probe
138
- * no longer competes with it for the hub or the link.
139
- */
134
+ * Resolve once the session presents its first decoded frame — the moment
135
+ * session setup (createSession, ICE, DTLS, the first IDR) is over and a probe
136
+ * no longer competes with it for the hub or the link.
137
+ */
140
138
  export declare function waitForFirstFrame(deps: FirstFrameDeps, timeoutMs?: number): Promise<FirstFrameOutcome>;
141
139
  /**
142
- * The cold-start probe: measure only once the first frame is up. No frame ⇒
143
- * no measurement (undefined) — the session is failing for a reason a probe
144
- * cannot fix, and a climb would only add a second connection to it.
145
- */
140
+ * The cold-start probe: measure only once the first frame is up. No frame ⇒
141
+ * no measurement (undefined) — the session is failing for a reason a probe
142
+ * cannot fix, and a climb would only add a second connection to it.
143
+ */
146
144
  export interface ProbeAfterFirstFrameDeps {
147
- readonly waitFrame: () => Promise<FirstFrameOutcome>;
148
- readonly measure: () => Promise<number | undefined>;
145
+ readonly waitFrame: () => Promise<FirstFrameOutcome>;
146
+ readonly measure: () => Promise<number | undefined>;
149
147
  }
150
148
  export declare function probeAfterFirstFrame(deps: ProbeAfterFirstFrameDeps): Promise<number | undefined>;
151
149
  /** The latest probe for an origin, whatever it read or how old it is. */
152
150
  export interface LatestProbe {
153
- readonly mbps: number;
154
- readonly ageMs: number;
151
+ readonly mbps: number;
152
+ readonly ageMs: number;
155
153
  }
156
154
  export interface DownlinkProbeStoreDeps {
157
- readonly now: () => number;
158
- /** How long a reading answers `measured`/`cached` without re-probing. */
159
- readonly ttlMs: number;
155
+ readonly now: () => number;
156
+ /** How long a reading answers `measured`/`cached` without re-probing. */
157
+ readonly ttlMs: number;
160
158
  }
161
159
  export interface DownlinkProbeStore {
162
- /**
163
- * The cached reading while fresh, else ONE probe for the origin — concurrent
164
- * callers share the probe in flight (review I6: a grid decoding together
165
- * fired N 1 MiB probes, each reading the link ÷ N). Undefined = unknown.
166
- */
167
- measured(origin: string, measure: () => Promise<number | null>): Promise<number | undefined>;
168
- /** The cached reading while fresh — never probes (review I5: renegotiation). */
169
- cached(origin: string): number | undefined;
170
- /** The newest reading whatever its age — what the telemetry reports (I4). */
171
- latest(origin: string): LatestProbe | null;
172
- /** True the FIRST time `origin` refuses with `status` in this app — say it once. */
173
- firstRefusal(origin: string, status: number): boolean;
160
+ /**
161
+ * The cached reading while fresh, else ONE probe for the origin — concurrent
162
+ * callers share the probe in flight (review I6: a grid decoding together
163
+ * fired N 1 MiB probes, each reading the link ÷ N). Undefined = unknown.
164
+ */
165
+ measured(origin: string, measure: () => Promise<number | null>): Promise<number | undefined>;
166
+ /** The cached reading while fresh — never probes (review I5: renegotiation). */
167
+ cached(origin: string): number | undefined;
168
+ /** The newest reading whatever its age — what the telemetry reports (I4). */
169
+ latest(origin: string): LatestProbe | null;
170
+ /** True the FIRST time `origin` refuses with `status` in this app — say it once. */
171
+ firstRefusal(origin: string, status: number): boolean;
174
172
  }
175
173
  /** App-wide probe cache + single-flight, one per origin. */
176
174
  export declare function createDownlinkProbe(deps: DownlinkProbeStoreDeps): DownlinkProbeStore;
177
175
  /** The hub's answer to one session's probe — `webrtcSession.applyDownlinkProbe` (D733). */
178
176
  export interface DownlinkProbeAnswer {
179
- readonly outcome: 'switching' | 'held';
180
- readonly tier: string | null;
181
- readonly reason: string;
177
+ readonly outcome: "switching" | "held";
178
+ readonly tier: string | null;
179
+ readonly reason: string;
182
180
  }
183
181
  /** Host wiring for `webrtcSession.applyDownlinkProbe`, bound to the device. */
184
182
  export type ApplyDownlinkProbe = (sessionId: string, downlinkMbps: number) => Promise<DownlinkProbeAnswer>;
185
183
  /** What became of handing a probe to its session. */
186
184
  export type ProbeHandoff = {
187
- readonly kind: 'answered';
188
- readonly answer: DownlinkProbeAnswer;
185
+ readonly kind: "answered";
186
+ readonly answer: DownlinkProbeAnswer;
189
187
  } | {
190
- readonly kind: 'unsupported';
191
- readonly why: 'no-wiring' | 'no-session' | 'call-failed';
188
+ readonly kind: "unsupported";
189
+ readonly why: "no-wiring" | "no-session" | "call-failed";
192
190
  };
193
191
  /**
194
- * Hand a probe to the session it was measured on (D733).
195
- *
196
- * The probe climb used to be a SECOND session: a make-before-break reconnect
197
- * carrying `downlinkMbps`, so every adaptive live open cost two sessions. The
198
- * hub now moves the open session to the probed rung itself. `answered` means
199
- * the hub owns the climb, WHATEVER it answered — `held` included: a reconnect
200
- * after a `held` would buy the second session for a rung the hub just refused.
201
- * Only `unsupported` (no host wiring, no session id yet, or a hub that does not
202
- * know the method) leaves the caller its legacy reconnect climb.
203
- */
192
+ * Hand a probe to the session it was measured on (D733).
193
+ *
194
+ * The probe climb used to be a SECOND session: a make-before-break reconnect
195
+ * carrying `downlinkMbps`, so every adaptive live open cost two sessions. The
196
+ * hub now moves the open session to the probed rung itself. `answered` means
197
+ * the hub owns the climb, WHATEVER it answered — `held` included: a reconnect
198
+ * after a `held` would buy the second session for a rung the hub just refused.
199
+ * Only `unsupported` (no host wiring, no session id yet, or a hub that does not
200
+ * know the method) leaves the caller its legacy reconnect climb.
201
+ */
204
202
  export declare function handProbeToSession(apply: ApplyDownlinkProbe | undefined, sessionId: string | null, downlinkMbps: number): Promise<ProbeHandoff>;
@@ -1,65 +1,78 @@
1
- import { ConfigUISchemaWithValues } from '@camstack/types';
1
+ /**
2
+ * `AddonGlobalSettingsForm` — mounts an addon's global-settings schema
3
+ * via `api.addonSettings.getGlobalSettings` + `updateGlobalSettings`
4
+ * and renders it with `ConfigFormBuilder`. Single source of truth for
5
+ * the addon's settings — no hardcoded option lists anywhere in the UI.
6
+ *
7
+ * Used wherever an addon's settings need to be edited inline (e.g.
8
+ * benchmark tabs, per-node pipeline editor). The caller passes the
9
+ * tRPC client + (addonId, nodeId); the component handles the fetch
10
+ * + patch loop. `onAfterChange` fires once the patch is applied so
11
+ * consumers can re-read any derived state.
12
+ */
13
+ import { type JSX } from "react";
14
+ import type { ConfigUISchemaWithValues } from "@camstack/types";
2
15
  interface AddonGlobalSettingsFormTrpc {
3
- addonSettings: {
4
- getGlobalSettings: {
5
- query: (input: {
6
- addonId: string;
7
- nodeId?: string;
8
- overlay?: Record<string, unknown>;
9
- }) => Promise<ConfigUISchemaWithValues | null>;
10
- };
11
- updateGlobalSettings: {
12
- mutate: (input: {
13
- addonId: string;
14
- nodeId?: string;
15
- patch: Record<string, unknown>;
16
- }) => Promise<unknown>;
17
- };
18
- };
16
+ addonSettings: {
17
+ getGlobalSettings: {
18
+ query: (input: {
19
+ addonId: string;
20
+ nodeId?: string;
21
+ overlay?: Record<string, unknown>;
22
+ }) => Promise<ConfigUISchemaWithValues | null>;
23
+ };
24
+ updateGlobalSettings: {
25
+ mutate: (input: {
26
+ addonId: string;
27
+ nodeId?: string;
28
+ patch: Record<string, unknown>;
29
+ }) => Promise<unknown>;
30
+ };
31
+ };
19
32
  }
20
33
  interface AddonGlobalSettingsFormProps {
21
- readonly trpc: AddonGlobalSettingsFormTrpc;
22
- readonly addonId: string;
23
- readonly nodeId: string;
24
- readonly title?: string;
25
- readonly disabled?: boolean;
26
- readonly onAfterChange?: () => void;
27
- /** Bump to force refetch (e.g. after an external mutation). */
28
- readonly refreshToken?: number;
29
- /**
30
- * Render only these section ids of the addon's schema (e.g. System → Cluster
31
- * draws the `system-config` cluster section alone). Absent → every section.
32
- */
33
- readonly sectionIds?: readonly string[];
34
- /**
35
- * Render as collapsible. When true, the form body is hidden until
36
- * the operator expands the header (click). Defaults to open so
37
- * callers that always want the form visible don't have to opt out.
38
- */
39
- readonly collapsible?: boolean;
40
- /** When `collapsible`, start expanded (true) or collapsed (false). Defaults to false. */
41
- readonly defaultOpen?: boolean;
42
- /**
43
- * - `'persist'` (default): edits call `updateGlobalSettings` and
44
- * re-fetch — the live store is mutated. Use in settings editors
45
- * (NodePipelineTab, device details).
46
- * - `'override'`: edits stay local (never touch the store).
47
- * `onOverrideChange` receives the current override values on
48
- * every edit so the caller can pass them to a per-run action.
49
- * Use in the benchmark tabs — operator tweaks for a single
50
- * bench run without mutating the addon's saved settings.
51
- */
52
- readonly mode?: 'persist' | 'override';
53
- /**
54
- * Called on every edit when `mode: 'override'`. `patch` is the sparse
55
- * diff vs the persisted baseline (only the fields the operator touched).
56
- * `effective` is the baseline merged with the patch — every field a
57
- * downstream action might need, with the operator's override applied.
58
- * Callers that need to emit a full engine triple (runtime+backend+format)
59
- * should read from `effective`, not `patch`, so partial edits (e.g.
60
- * operator tweaks only `device`) still produce a complete payload.
61
- */
62
- readonly onOverrideChange?: (patch: Record<string, unknown>, effective: Record<string, unknown>) => void;
34
+ readonly trpc: AddonGlobalSettingsFormTrpc;
35
+ readonly addonId: string;
36
+ readonly nodeId: string;
37
+ readonly title?: string;
38
+ readonly disabled?: boolean;
39
+ readonly onAfterChange?: () => void;
40
+ /** Bump to force refetch (e.g. after an external mutation). */
41
+ readonly refreshToken?: number;
42
+ /**
43
+ * Render only these section ids of the addon's schema (e.g. System → Cluster
44
+ * draws the `system-config` cluster section alone). Absent → every section.
45
+ */
46
+ readonly sectionIds?: readonly string[];
47
+ /**
48
+ * Render as collapsible. When true, the form body is hidden until
49
+ * the operator expands the header (click). Defaults to open so
50
+ * callers that always want the form visible don't have to opt out.
51
+ */
52
+ readonly collapsible?: boolean;
53
+ /** When `collapsible`, start expanded (true) or collapsed (false). Defaults to false. */
54
+ readonly defaultOpen?: boolean;
55
+ /**
56
+ * - `'persist'` (default): edits call `updateGlobalSettings` and
57
+ * re-fetch — the live store is mutated. Use in settings editors
58
+ * (NodePipelineTab, device details).
59
+ * - `'override'`: edits stay local (never touch the store).
60
+ * `onOverrideChange` receives the current override values on
61
+ * every edit so the caller can pass them to a per-run action.
62
+ * Use in the benchmark tabs — operator tweaks for a single
63
+ * bench run without mutating the addon's saved settings.
64
+ */
65
+ readonly mode?: "persist" | "override";
66
+ /**
67
+ * Called on every edit when `mode: 'override'`. `patch` is the sparse
68
+ * diff vs the persisted baseline (only the fields the operator touched).
69
+ * `effective` is the baseline merged with the patch — every field a
70
+ * downstream action might need, with the operator's override applied.
71
+ * Callers that need to emit a full engine triple (runtime+backend+format)
72
+ * should read from `effective`, not `patch`, so partial edits (e.g.
73
+ * operator tweaks only `device`) still produce a complete payload.
74
+ */
75
+ readonly onOverrideChange?: (patch: Record<string, unknown>, effective: Record<string, unknown>) => void;
63
76
  }
64
- export declare function AddonGlobalSettingsForm({ trpc, addonId, nodeId, title, disabled, onAfterChange, refreshToken, sectionIds, collapsible, defaultOpen, mode, onOverrideChange, }: AddonGlobalSettingsFormProps): import("react").JSX.Element;
77
+ export declare function AddonGlobalSettingsForm({ trpc, addonId, nodeId, title, disabled, onAfterChange, refreshToken, sectionIds, collapsible, defaultOpen, mode, onOverrideChange }: AddonGlobalSettingsFormProps): JSX.Element | null;
65
78
  export {};
@@ -1,12 +1,36 @@
1
- import { TRPCClient } from '@trpc/client';
2
- import { AppRouter } from '@camstack/types';
1
+ /**
2
+ * Standard props for addon page components.
3
+ *
4
+ * Every addon page receives these props from the AddonPageLoader in admin-ui.
5
+ * Use this type for your page's default export:
6
+ *
7
+ * ```tsx
8
+ * import type { AddonPageProps } from '@camstack/ui'
9
+ * import { trpc } from '@camstack/ui-library'
10
+ *
11
+ * export default function MyAddonPage({ theme }: AddonPageProps) {
12
+ * // Typed React-Query hooks via the shared proxy.
13
+ * const { data } = trpc.system.health.useQuery()
14
+ * return <pre>{JSON.stringify(data)}</pre>
15
+ * }
16
+ * ```
17
+ *
18
+ * The `trpc` prop is the vanilla SDK client (BackendClient.trpc) and
19
+ * remains available for non-React contexts. Inside React components
20
+ * prefer the typed `trpc.X.useQuery / useMutation / useSubscription`
21
+ * hooks imported from `@camstack/ui-library` — they share the same
22
+ * QueryClient + WS client as the host admin-ui and therefore play nice
23
+ * with cache invalidation, suspense, and the rest of React Query.
24
+ */
25
+ import type { TRPCClient } from "@trpc/client";
26
+ import type { AppRouter } from "@camstack/types";
3
27
  export interface AddonPageProps {
4
- /** Vanilla tRPC client — fully typed access for non-React call sites. */
5
- readonly trpc: TRPCClient<AppRouter>;
6
- /** Current theme state */
7
- readonly theme: {
8
- readonly isDark: boolean;
9
- };
10
- /** Navigate to a route within the admin UI */
11
- readonly navigate: (path: string) => void;
28
+ /** Vanilla tRPC client — fully typed access for non-React call sites. */
29
+ readonly trpc: TRPCClient<AppRouter>;
30
+ /** Current theme state */
31
+ readonly theme: {
32
+ readonly isDark: boolean;
33
+ };
34
+ /** Navigate to a route within the admin UI */
35
+ readonly navigate: (path: string) => void;
12
36
  }