@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.
- package/dist/composites/accelerator-label.d.ts +9 -9
- package/dist/composites/adaptive-downlink.d.ts +141 -143
- package/dist/composites/addon-global-settings-form.d.ts +73 -60
- package/dist/composites/addon-page-props.d.ts +34 -10
- package/dist/composites/agent-step-editor.d.ts +48 -47
- package/dist/composites/app-shell/app-shell.d.ts +17 -17
- package/dist/composites/app-shell/index.d.ts +3 -3
- package/dist/composites/app-shell/sidebar-item.d.ts +9 -8
- package/dist/composites/app-shell/sidebar.d.ts +10 -10
- package/dist/composites/audio-classification-list.d.ts +16 -15
- package/dist/composites/audio-level-waveform.d.ts +31 -30
- package/dist/composites/audio-waveform.d.ts +18 -17
- package/dist/composites/battery-badge.d.ts +27 -13
- package/dist/composites/breadcrumb.d.ts +21 -21
- package/dist/composites/camera-stream-player.d.ts +309 -309
- package/dist/composites/cap-settings/AutotrackSection.d.ts +19 -2
- package/dist/composites/cap-settings/CameraGridLayoutEditor.d.ts +24 -2
- package/dist/composites/cap-settings/ConsumablesPanel.d.ts +21 -2
- package/dist/composites/cap-settings/CoverageTrack.d.ts +21 -20
- package/dist/composites/cap-settings/EventBucketStrip.d.ts +21 -20
- package/dist/composites/cap-settings/EventHeatmap.d.ts +8 -7
- package/dist/composites/cap-settings/HomePresetPicker.d.ts +2 -2
- package/dist/composites/cap-settings/MaskShapeCanvas.d.ts +143 -41
- package/dist/composites/cap-settings/MotionZonesSettings.d.ts +41 -2
- package/dist/composites/cap-settings/NavigationPanel.d.ts +14 -2
- package/dist/composites/cap-settings/PrivacyMaskSettings.d.ts +3 -2
- package/dist/composites/cap-settings/PtzPanel.d.ts +15 -2
- package/dist/composites/cap-settings/RecordingBandsEditor.d.ts +33 -32
- package/dist/composites/cap-settings/RecordingPanel.d.ts +3 -2
- package/dist/composites/cap-settings/RecordingSettings.d.ts +11 -10
- package/dist/composites/cap-settings/RecordingTimeline.d.ts +3 -2
- package/dist/composites/cap-settings/SceneMonitorEditor.d.ts +3 -51
- package/dist/composites/cap-settings/SceneReferenceGallery.d.ts +62 -23
- package/dist/composites/cap-settings/SceneSettingsForm.d.ts +52 -16
- package/dist/composites/cap-settings/TimelineControls.d.ts +21 -20
- package/dist/composites/cap-settings/camera-grid-layout.d.ts +95 -95
- package/dist/composites/cap-settings/event-thumb.d.ts +9 -8
- package/dist/composites/cap-settings/index.d.ts +20 -20
- package/dist/composites/cap-settings/privacy-mask-audio.d.ts +47 -47
- package/dist/composites/cap-settings/recording-config-form.d.ts +25 -25
- package/dist/composites/cap-settings/recording-spans.d.ts +14 -14
- package/dist/composites/cap-settings/recording-timeline-model.d.ts +57 -57
- package/dist/composites/cap-settings/scene-monitor-copy.d.ts +58 -49
- package/dist/composites/client-network-sample.d.ts +41 -41
- package/dist/composites/clips/ClipBandBar.d.ts +44 -14
- package/dist/composites/clips/ClipPanel.d.ts +30 -6
- package/dist/composites/clips/ClipTile.d.ts +26 -5
- package/dist/composites/clips/ClipsSection.d.ts +107 -2
- package/dist/composites/clips/clip-band.d.ts +72 -38
- package/dist/composites/clips/clip-day-window.d.ts +7 -30
- package/dist/composites/clips/clip-source-state.d.ts +55 -26
- package/dist/composites/clips/clip-still-retry.d.ts +39 -39
- package/dist/composites/clips/clip-thumbnail-fetch.d.ts +9 -9
- package/dist/composites/clips/clip-tile-media.d.ts +64 -32
- package/dist/composites/clips/clip-view-state.d.ts +76 -46
- package/dist/composites/code-block.d.ts +5 -4
- package/dist/composites/config-form-builder.d.ts +14 -13
- package/dist/composites/config-form-field.d.ts +63 -62
- package/dist/composites/config-icon-field.d.ts +10 -9
- package/dist/composites/config-secret-field.d.ts +51 -27
- package/dist/composites/confirm-action-button.d.ts +52 -39
- package/dist/composites/confirm-dialog.d.ts +110 -48
- package/dist/composites/copy-button.d.ts +25 -19
- package/dist/composites/data-table/data-table-header.d.ts +8 -7
- package/dist/composites/data-table/data-table-pagination.d.ts +7 -6
- package/dist/composites/data-table/data-table-row.d.ts +8 -7
- package/dist/composites/data-table/data-table.d.ts +3 -2
- package/dist/composites/data-table/index.d.ts +2 -2
- package/dist/composites/data-table/types.d.ts +29 -29
- package/dist/composites/data-table-filter-bar.d.ts +30 -29
- package/dist/composites/data-table-filter.d.ts +34 -34
- package/dist/composites/data-table-layout.d.ts +24 -24
- package/dist/composites/data-table-pager.d.ts +5 -5
- package/dist/composites/data-table-pagination.d.ts +23 -23
- package/dist/composites/data-table-selection.d.ts +10 -10
- package/dist/composites/data-table.d.ts +167 -118
- package/dist/composites/detection-canvas.d.ts +34 -25
- package/dist/composites/detection-colors.d.ts +9 -9
- package/dist/composites/detection-overlay.d.ts +33 -32
- package/dist/composites/detection-result-tree.d.ts +22 -9
- package/dist/composites/dev-shell.d.ts +15 -14
- package/dist/composites/device-activity-panel.d.ts +37 -31
- package/dist/composites/device-card.d.ts +32 -32
- package/dist/composites/device-controls/ac-panel.d.ts +2 -2
- package/dist/composites/device-controls/alarm-hero-card.d.ts +42 -42
- package/dist/composites/device-controls/atoms.d.ts +50 -50
- package/dist/composites/device-controls/brightness-panel.d.ts +3 -3
- package/dist/composites/device-controls/button-control.d.ts +14 -14
- package/dist/composites/device-controls/climate-panel.d.ts +12 -12
- package/dist/composites/device-controls/container-primary-hero.d.ts +33 -16
- package/dist/composites/device-controls/container-primary.d.ts +68 -39
- package/dist/composites/device-controls/control-panel.d.ts +4 -4
- package/dist/composites/device-controls/control-registry.d.ts +81 -70
- package/dist/composites/device-controls/cover-hero-card.d.ts +26 -26
- package/dist/composites/device-controls/cover-inline.d.ts +20 -20
- package/dist/composites/device-controls/cover-panel.d.ts +2 -2
- package/dist/composites/device-controls/dummy-hero-card.d.ts +2 -2
- package/dist/composites/device-controls/fan-hero-card.d.ts +20 -20
- package/dist/composites/device-controls/fan-panel.d.ts +3 -3
- package/dist/composites/device-controls/humidifier-control.d.ts +46 -29
- package/dist/composites/device-controls/image-control.d.ts +41 -27
- package/dist/composites/device-controls/index.d.ts +34 -34
- package/dist/composites/device-controls/lawn-mower-control.d.ts +30 -16
- package/dist/composites/device-controls/light-hero-card.d.ts +15 -15
- package/dist/composites/device-controls/lock-hero-card.d.ts +14 -14
- package/dist/composites/device-controls/lock-panel.d.ts +3 -3
- package/dist/composites/device-controls/media-player-hero-card.d.ts +16 -16
- package/dist/composites/device-controls/media-player-panel.d.ts +7 -7
- package/dist/composites/device-controls/offline-badge.d.ts +23 -8
- package/dist/composites/device-controls/panel-controls.d.ts +39 -20
- package/dist/composites/device-controls/pet-feeder-panel.d.ts +27 -9
- package/dist/composites/device-controls/popover-row-action.d.ts +18 -6
- package/dist/composites/device-controls/primary-child-picker.d.ts +31 -15
- package/dist/composites/device-controls/primary-child.d.ts +14 -25
- package/dist/composites/device-controls/radial-gauge.d.ts +17 -17
- package/dist/composites/device-controls/script-automation-controls.d.ts +9 -9
- package/dist/composites/device-controls/sensor-hero-card.d.ts +26 -8
- package/dist/composites/device-controls/sensor-inline-control.d.ts +21 -9
- package/dist/composites/device-controls/sensor-value-atom.d.ts +97 -76
- package/dist/composites/device-controls/switch-hero-card.d.ts +11 -11
- package/dist/composites/device-controls/switch-panel.d.ts +2 -2
- package/dist/composites/device-controls/tap-toggle.d.ts +13 -13
- package/dist/composites/device-controls/thermostat-hero-card.d.ts +16 -16
- package/dist/composites/device-controls/types.d.ts +11 -11
- package/dist/composites/device-controls/update-control.d.ts +20 -7
- package/dist/composites/device-controls/vacuum-control.d.ts +41 -25
- package/dist/composites/device-controls/valve-control.d.ts +51 -35
- package/dist/composites/device-controls/water-heater-control.d.ts +48 -31
- package/dist/composites/device-controls/weather-control.d.ts +46 -28
- package/dist/composites/device-export-panel.d.ts +34 -34
- package/dist/composites/device-grid.d.ts +10 -10
- package/dist/composites/device-item/actions.d.ts +40 -18
- package/dist/composites/device-item/admin-link-quick-action.d.ts +66 -26
- package/dist/composites/device-item/child-layout.d.ts +43 -26
- package/dist/composites/device-item/child-section-accordion.d.ts +20 -6
- package/dist/composites/device-item/children-accordion.d.ts +11 -11
- package/dist/composites/device-item/container-children-context.d.ts +28 -11
- package/dist/composites/device-item/device-delete-action.d.ts +23 -5
- package/dist/composites/device-item/features.d.ts +33 -15
- package/dist/composites/device-item/header.d.ts +53 -31
- package/dist/composites/device-item/helpers.d.ts +291 -274
- package/dist/composites/device-item/index.d.ts +18 -9
- package/dist/composites/device-item/preview.d.ts +41 -21
- package/dist/composites/device-item/quick-detail-action.d.ts +4 -4
- package/dist/composites/device-item/reboot-quick-action.d.ts +28 -7
- package/dist/composites/device-item/role-display-defaults-context.d.ts +28 -12
- package/dist/composites/device-item/status-dot.d.ts +24 -6
- package/dist/composites/device-list/batch-actions-bar.d.ts +23 -12
- package/dist/composites/device-list/batch-toolbar.d.ts +13 -13
- package/dist/composites/device-list/columns.d.ts +108 -108
- package/dist/composites/device-list/device-integration.d.ts +48 -58
- package/dist/composites/device-list/device-mode.d.ts +121 -121
- package/dist/composites/device-list/empty-state.d.ts +14 -3
- package/dist/composites/device-list/filter-chips.d.ts +42 -29
- package/dist/composites/device-list/fuzzy-match.d.ts +22 -22
- package/dist/composites/device-list/generic-mode.d.ts +88 -88
- package/dist/composites/device-list/group.d.ts +62 -35
- package/dist/composites/device-list/hardware-cell.d.ts +14 -3
- package/dist/composites/device-list/hardware.d.ts +29 -11
- package/dist/composites/device-list/icon-action.d.ts +27 -15
- package/dist/composites/device-list/index.d.ts +46 -23
- package/dist/composites/device-list/multi-select.d.ts +17 -17
- package/dist/composites/device-list/page-size-select.d.ts +13 -7
- package/dist/composites/device-list/pagination.d.ts +19 -12
- package/dist/composites/device-list/sort.d.ts +28 -15
- package/dist/composites/device-list/sortable-header.d.ts +20 -7
- package/dist/composites/device-list/table-layout.d.ts +44 -44
- package/dist/composites/device-list/type-filter.d.ts +16 -16
- package/dist/composites/device-list/url-state.d.ts +35 -35
- package/dist/composites/device-meta.d.ts +43 -43
- package/dist/composites/device-picker/DevicePicker.d.ts +72 -33
- package/dist/composites/device-picker/SelectedChip.d.ts +10 -9
- package/dist/composites/device-picker/device-filter-bar.d.ts +19 -18
- package/dist/composites/device-picker/device-fleet-view.d.ts +11 -3
- package/dist/composites/device-picker/device-parent.d.ts +27 -27
- package/dist/composites/device-picker/device-picker-grouping.d.ts +3 -3
- package/dist/composites/device-picker/device-picker-model.d.ts +140 -140
- package/dist/composites/device-picker/device-selection-rows.d.ts +31 -24
- package/dist/composites/device-picker/device-selection.d.ts +43 -43
- package/dist/composites/device-picker/index.d.ts +9 -9
- package/dist/composites/device-select-field.d.ts +17 -16
- package/dist/composites/device-select-filter.d.ts +78 -78
- package/dist/composites/device-selector-picker.d.ts +25 -25
- package/dist/composites/device-step-matrix.d.ts +54 -28
- package/dist/composites/discovery-panel.d.ts +22 -22
- package/dist/composites/doorbell-recent-panel.d.ts +9 -8
- package/dist/composites/empty-state.d.ts +8 -8
- package/dist/composites/error-box.d.ts +32 -17
- package/dist/composites/event-kind-visuals.d.ts +29 -18
- package/dist/composites/event-stream.d.ts +59 -42
- package/dist/composites/extensions/AssociationSlotCard.d.ts +45 -24
- package/dist/composites/extensions/ExtensionsPanel.d.ts +41 -18
- package/dist/composites/extensions/extensions-view-state.d.ts +71 -53
- package/dist/composites/filter-bar.d.ts +22 -21
- package/dist/composites/form-field.d.ts +9 -9
- package/dist/composites/format-state-value.d.ts +23 -51
- package/dist/composites/grouped-model-selector.d.ts +7 -6
- package/dist/composites/hls-quality.d.ts +26 -26
- package/dist/composites/hls-video.d.ts +62 -39
- package/dist/composites/hover-zoom-image.d.ts +35 -16
- package/dist/composites/icon-picker.d.ts +86 -50
- package/dist/composites/image-selector.d.ts +21 -20
- package/dist/composites/index.d.ts +204 -204
- package/dist/composites/inference-config-selector.d.ts +36 -35
- package/dist/composites/kebab-menu.d.ts +53 -35
- package/dist/composites/key-value-list.d.ts +14 -14
- package/dist/composites/log-stream-scroll.d.ts +24 -24
- package/dist/composites/log-stream.d.ts +81 -70
- package/dist/composites/login-form.d.ts +7 -6
- package/dist/composites/model-bound-slider.d.ts +46 -26
- package/dist/composites/model-picker.d.ts +20 -19
- package/dist/composites/mount-addon-page.d.ts +12 -12
- package/dist/composites/network-link-badge.d.ts +7 -6
- package/dist/composites/node-picker.d.ts +14 -13
- package/dist/composites/notification-targets-field.d.ts +76 -58
- package/dist/composites/notification-targets-options.d.ts +9 -6
- package/dist/composites/option-select/OptionSelect.d.ts +23 -22
- package/dist/composites/option-select/index.d.ts +4 -4
- package/dist/composites/option-select/option-select-model.d.ts +35 -35
- package/dist/composites/page-header.d.ts +6 -6
- package/dist/composites/peer-connection-config.d.ts +9 -9
- package/dist/composites/phase-icon.d.ts +10 -3
- package/dist/composites/pipeline-builder.d.ts +21 -13
- package/dist/composites/pipeline-matrix-shared.d.ts +159 -150
- package/dist/composites/pipeline-runtime-selector.d.ts +12 -11
- package/dist/composites/pipeline-step.d.ts +39 -31
- package/dist/composites/placeholder-field/PlaceholderChipField.d.ts +23 -22
- package/dist/composites/placeholder-field/index.d.ts +1 -1
- package/dist/composites/provider-badge.d.ts +6 -5
- package/dist/composites/ptz-overlay.d.ts +38 -18
- package/dist/composites/qr-code.d.ts +24 -10
- package/dist/composites/reconnect-schedule.d.ts +22 -22
- package/dist/composites/resolve-step-default-model.d.ts +94 -94
- package/dist/composites/response-log.d.ts +7 -6
- package/dist/composites/root-model-source.d.ts +21 -10
- package/dist/composites/scope-picker.d.ts +49 -25
- package/dist/composites/section-card.d.ts +19 -11
- package/dist/composites/setting-row.d.ts +39 -21
- package/dist/composites/snapshot-button.d.ts +23 -19
- package/dist/composites/sort-header-button.d.ts +25 -8
- package/dist/composites/stat-card.d.ts +20 -8
- package/dist/composites/state-values-stream.d.ts +49 -24
- package/dist/composites/status-badge.d.ts +10 -8
- package/dist/composites/step-inspector/gate-control.d.ts +13 -12
- package/dist/composites/step-inspector/index.d.ts +8 -8
- package/dist/composites/step-inspector/layered-settings-form.d.ts +41 -30
- package/dist/composites/step-inspector/segmented-choice.d.ts +8 -7
- package/dist/composites/step-inspector/setting-values.d.ts +13 -8
- package/dist/composites/step-inspector/step-detail-dock.d.ts +39 -23
- package/dist/composites/step-inspector/step-inspector-panel.d.ts +34 -28
- package/dist/composites/step-inspector/step-model-row.d.ts +29 -24
- package/dist/composites/step-inspector/step-search.d.ts +11 -11
- package/dist/composites/step-timings.d.ts +7 -6
- package/dist/composites/step-tree.d.ts +17 -12
- package/dist/composites/stream-broker-selector.d.ts +29 -8
- package/dist/composites/stream-debug/stream-debug-overlay.d.ts +40 -40
- package/dist/composites/stream-debug/webrtc-debug-stats.d.ts +144 -129
- package/dist/composites/stream-panel.d.ts +212 -201
- package/dist/composites/table-sort.d.ts +61 -61
- package/dist/composites/timezone-selector.d.ts +15 -13
- package/dist/composites/training/send-frame-to-training.d.ts +5 -4
- package/dist/composites/training/training-collection-picker.d.ts +4 -3
- package/dist/composites/training/training-refusal-text.d.ts +6 -6
- package/dist/composites/unit-picker/UnitPicker.d.ts +19 -14
- package/dist/composites/unit-picker/index.d.ts +1 -1
- package/dist/composites/use-data-table-filter.d.ts +19 -19
- package/dist/composites/version-badge.d.ts +19 -18
- package/dist/composites/webrtc-diagnostics/EndpointTestCard.d.ts +7 -7
- package/dist/composites/webrtc-diagnostics/HubSessionTestCard.d.ts +14 -14
- package/dist/composites/webrtc-diagnostics/RunReport.d.ts +10 -5
- package/dist/composites/webrtc-diagnostics/endpoint-probe.d.ts +41 -21
- package/dist/composites/webrtc-diagnostics/endpoint-test.d.ts +37 -32
- package/dist/composites/webrtc-diagnostics/format.d.ts +3 -3
- package/dist/composites/webrtc-diagnostics/ice-candidates.d.ts +49 -49
- package/dist/composites/webrtc-diagnostics/nat-mapping.d.ts +36 -36
- package/dist/composites/webrtc-diagnostics/session-run.d.ts +108 -95
- package/dist/composites/webrtc-diagnostics/session-verdict.d.ts +29 -20
- package/dist/composites/widget-panel.d.ts +23 -23
- package/dist/composites/widget-slot.d.ts +35 -17
- package/dist/contexts/custom-field-renderers.d.ts +53 -17
- package/dist/contexts/device-context.d.ts +32 -12
- package/dist/contexts/device-quick-detail.d.ts +13 -4
- package/dist/contexts/player-overlays.d.ts +82 -42
- package/dist/contexts/recorded-playback.d.ts +40 -18
- package/dist/contexts/system-context.d.ts +28 -13
- package/dist/contexts/vod-playback.d.ts +39 -22
- package/dist/contexts/widget-registry.d.ts +139 -102
- package/dist/contexts/zone-editing.d.ts +69 -46
- package/dist/generated/system-hooks.d.ts +17 -1
- package/dist/hooks/index.d.ts +43 -43
- package/dist/hooks/turn-server-cache.d.ts +69 -69
- package/dist/hooks/use-capability-presence.d.ts +65 -28
- package/dist/hooks/use-cluster-nodes.d.ts +54 -27
- package/dist/hooks/use-device-autotrack.d.ts +7 -7
- package/dist/hooks/use-device-battery.d.ts +24 -11
- package/dist/hooks/use-device-cap-slice.d.ts +15 -15
- package/dist/hooks/use-device-capability.d.ts +61 -27
- package/dist/hooks/use-device-detections.d.ts +32 -32
- package/dist/hooks/use-device-features.d.ts +18 -18
- package/dist/hooks/use-device-list-page-size.d.ts +19 -6
- package/dist/hooks/use-device-network-link.d.ts +15 -7
- package/dist/hooks/use-device-proxy.d.ts +98 -92
- package/dist/hooks/use-device-snapshot.d.ts +23 -23
- package/dist/hooks/use-device-webrtc.d.ts +211 -205
- package/dist/hooks/use-devices.d.ts +9 -9
- package/dist/hooks/use-doorbell-events.d.ts +13 -13
- package/dist/hooks/use-event-stream.d.ts +6 -3
- package/dist/hooks/use-is-mobile.d.ts +5 -5
- package/dist/hooks/use-live-buffer.d.ts +5 -5
- package/dist/hooks/use-live-event.d.ts +1 -1
- package/dist/hooks/use-navigation.d.ts +20 -20
- package/dist/hooks/use-optimistic-slice.d.ts +13 -13
- package/dist/hooks/use-persisted-page-size.d.ts +10 -10
- package/dist/hooks/use-ptz.d.ts +108 -108
- package/dist/hooks/use-stationary-overlay.d.ts +37 -37
- package/dist/hooks/use-system-query.d.ts +33 -10
- package/dist/hooks/use-url-query.d.ts +3 -3
- package/dist/icons/index.d.ts +2 -2
- package/dist/icons/provider-icons.d.ts +2 -2
- package/dist/icons/status-icons.d.ts +2 -2
- package/dist/index.cjs +123 -69
- package/dist/index.d.ts +31 -27
- package/dist/index.js +123 -69
- package/dist/lib/cap-error.d.ts +18 -39
- package/dist/lib/cn.d.ts +1 -1
- package/dist/lib/fleet-query-defaults.d.ts +68 -34
- package/dist/lib/format-control-datetime.d.ts +16 -16
- package/dist/lib/format-duration.d.ts +12 -12
- package/dist/lib/format-last-seen.d.ts +5 -18
- package/dist/lib/format-numeric.d.ts +7 -7
- package/dist/lib/hub-mount.d.ts +8 -42
- package/dist/lib/index.d.ts +21 -21
- package/dist/lib/phase-config.d.ts +24 -11
- package/dist/lib/pipeline-mirror.d.ts +16 -16
- package/dist/lib/recorded-control-protocol.d.ts +41 -43
- package/dist/lib/resolve-sensor-display.d.ts +36 -20
- package/dist/lib/responsive.d.ts +54 -54
- package/dist/lib/scrub-controller.d.ts +75 -78
- package/dist/lib/shared-context.d.ts +27 -2
- package/dist/lib/tailwind-variants.d.ts +20 -20
- package/dist/primitives/badge.d.ts +5 -10
- package/dist/primitives/bottom-sheet.d.ts +7 -7
- package/dist/primitives/button.d.ts +5 -9
- package/dist/primitives/card.d.ts +4 -8
- package/dist/primitives/checkbox.d.ts +3 -4
- package/dist/primitives/collapsible-card.d.ts +23 -13
- package/dist/primitives/dialog.d.ts +33 -59
- package/dist/primitives/dropdown.d.ts +13 -13
- package/dist/primitives/floating-panel.d.ts +41 -20
- package/dist/primitives/icon-button.d.ts +8 -12
- package/dist/primitives/index.d.ts +22 -22
- package/dist/primitives/input.d.ts +6 -16
- package/dist/primitives/label.d.ts +3 -4
- package/dist/primitives/mobile-drawer.d.ts +8 -8
- package/dist/primitives/password-input.d.ts +18 -18
- package/dist/primitives/popover.d.ts +7 -7
- package/dist/primitives/scroll-area.d.ts +3 -4
- package/dist/primitives/select.d.ts +20 -20
- package/dist/primitives/separator.d.ts +4 -8
- package/dist/primitives/skeleton.d.ts +3 -4
- package/dist/primitives/switch.d.ts +6 -6
- package/dist/primitives/tabs.d.ts +26 -26
- package/dist/primitives/tooltip.d.ts +12 -12
- package/dist/theme/create-theme.d.ts +1 -1
- package/dist/theme/defaults.d.ts +1 -1
- package/dist/theme/index.d.ts +6 -6
- package/dist/theme/theme-provider.d.ts +8 -7
- package/dist/theme/theme-to-css.d.ts +1 -1
- package/dist/theme/types.d.ts +98 -100
- package/dist/theme/use-theme-mode.d.ts +1 -1
- package/dist/trpc-react.d.ts +23 -3
- package/dist/widgets/host-widgets.d.ts +4 -4
- package/package.json +8 -4
- package/src/tailwind/camstack-theme.css +11 -0
- package/dist/composites/unit-picker/UnitPicker.spec.d.ts +0 -1
|
@@ -1,330 +1,330 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { CamProfile, WebrtcSessionDebug } from
|
|
3
|
-
import { ReconnectAction } from
|
|
4
|
-
import { AdaptiveHintsReport, ApplyDownlinkProbe } from
|
|
5
|
-
import { ClientNetworkSample } from
|
|
6
|
-
import { StreamDebugSample } from
|
|
7
|
-
type WebkitPresentationMode =
|
|
1
|
+
import { type JSX, type ReactNode } from "react";
|
|
2
|
+
import type { CamProfile, WebrtcSessionDebug } from "@camstack/types";
|
|
3
|
+
import { type ReconnectAction } from "./reconnect-schedule";
|
|
4
|
+
import { type AdaptiveHintsReport, type ApplyDownlinkProbe } from "./adaptive-downlink";
|
|
5
|
+
import { type ClientNetworkSample } from "./client-network-sample";
|
|
6
|
+
import { type StreamDebugSample } from "./stream-debug/webrtc-debug-stats.js";
|
|
7
|
+
type WebkitPresentationMode = "inline" | "picture-in-picture" | "fullscreen";
|
|
8
8
|
declare global {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
interface HTMLVideoElement {
|
|
10
|
+
webkitSetPresentationMode?: (mode: WebkitPresentationMode) => void;
|
|
11
|
+
readonly webkitPresentationMode?: WebkitPresentationMode;
|
|
12
|
+
}
|
|
13
13
|
}
|
|
14
|
-
export type PlayerConnectionState =
|
|
14
|
+
export type PlayerConnectionState = "connecting" | "playing" | "error" | "disconnected" | "idle";
|
|
15
15
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
* Discriminated WebRTC target — same shape as `WebrtcStreamTarget` on the
|
|
17
|
+
* backend cap; the `profile` tier uses the canonical `CamProfile` enum.
|
|
18
|
+
* Carried by `getSessionState`'s `pendingRenegotiation` and handed back to
|
|
19
|
+
* `reoffer` verbatim during an adaptive re-offer.
|
|
20
|
+
*/
|
|
21
21
|
export type PlayerWebrtcTarget = {
|
|
22
|
-
|
|
22
|
+
readonly kind: "adaptive";
|
|
23
23
|
} | {
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
readonly kind: "profile";
|
|
25
|
+
readonly profile: CamProfile;
|
|
26
26
|
} | {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
readonly kind: "cam-stream";
|
|
28
|
+
readonly camStreamId: string;
|
|
29
29
|
};
|
|
30
30
|
/** Live signaling state polled mid-stream — the adaptive re-offer signal. */
|
|
31
31
|
export interface SessionSignalingState {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
readonly pendingRenegotiation: {
|
|
33
|
+
readonly target: PlayerWebrtcTarget;
|
|
34
|
+
readonly epoch: number;
|
|
35
|
+
} | null;
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
* Signaling function for WebRTC connection.
|
|
39
|
+
* Called by the player to establish the WebRTC session.
|
|
40
|
+
* Must return an RTCSessionDescription (the server's offer or answer depending on mode).
|
|
41
|
+
*
|
|
42
|
+
* Server-offer mode (default):
|
|
43
|
+
* 1. signalingFn is called with streamId → returns { sessionId, sdpOffer }
|
|
44
|
+
* 2. Player sets remote description (server offer), creates answer
|
|
45
|
+
* 3. Player calls answerFn(sessionId, sdpAnswer) to complete
|
|
46
|
+
*
|
|
47
|
+
* WHEP mode (legacy):
|
|
48
|
+
* 1. Player creates offer, gathers ICE
|
|
49
|
+
* 2. signalingFn is called with the client SDP offer → returns sdpAnswer
|
|
50
|
+
* 3. Player sets remote description (answer)
|
|
51
|
+
*/
|
|
52
52
|
export interface SignalingResult {
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
53
|
+
/** Server-offer mode: session ID + SDP offer from server */
|
|
54
|
+
sessionId: string;
|
|
55
|
+
sdpOffer: string;
|
|
56
|
+
/**
|
|
57
|
+
* ICE servers (STUN/TURN) the BROWSER should use, supplied by the server
|
|
58
|
+
* from its `turn-provider` cap. Critical for remote viewing: behind CGNAT
|
|
59
|
+
* (e.g. mobile data) the browser needs a TURN relay candidate or it has no
|
|
60
|
+
* reachable address and the stream stays black. Falls back to public STUN.
|
|
61
|
+
*/
|
|
62
|
+
iceServers?: readonly RTCIceServer[];
|
|
63
63
|
}
|
|
64
64
|
/**
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
65
|
+
* Client-offer mode result: the server's SDP answer to a browser-built
|
|
66
|
+
* offer. The browser creates the offer advertising its FULL decode caps
|
|
67
|
+
* (incl. H.264 High on iOS 18), the server answers by echoing the matching
|
|
68
|
+
* codec, and the camera's native bytes pass through untouched — no
|
|
69
|
+
* transcode. This is the dual of `SignalingResult`'s server-offer flow.
|
|
70
|
+
*/
|
|
71
71
|
export interface ClientOfferResult {
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
sessionId: string;
|
|
73
|
+
sdpAnswer: string;
|
|
74
74
|
}
|
|
75
75
|
/**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
76
|
+
* Client-side capabilities sent to the server at session creation.
|
|
77
|
+
* The server uses these to pick the best native source for adaptive
|
|
78
|
+
* streams (e.g. a 320×180 thumbnail player on a slow link gets the
|
|
79
|
+
* camera's low stream rather than ffmpeg-transcoded 4K).
|
|
80
|
+
*
|
|
81
|
+
* All fields are optional — when omitted the server defaults to its
|
|
82
|
+
* highest-quality registered source.
|
|
83
|
+
*/
|
|
84
84
|
export interface ClientStreamHints {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
85
|
+
viewportWidth?: number;
|
|
86
|
+
viewportHeight?: number;
|
|
87
|
+
devicePixelRatio?: number;
|
|
88
|
+
downlinkMbps?: number;
|
|
89
|
+
prefersTier?: string;
|
|
90
90
|
}
|
|
91
|
-
export type { ClientNetworkSample } from
|
|
91
|
+
export type { ClientNetworkSample } from "./client-network-sample";
|
|
92
92
|
export interface CameraStreamPlayerProps {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
93
|
+
/** Server base URL (e.g. window.location.origin) */
|
|
94
|
+
serverUrl: string;
|
|
95
|
+
/**
|
|
96
|
+
* Stable key used for React reconciliation (the player remounts when
|
|
97
|
+
* this changes), the snapshot filename, and WHEP fallback URL. The
|
|
98
|
+
* value is opaque to the player — no parsing, no semantic meaning.
|
|
99
|
+
* Typical values: a `StreamChoice.id` (`'profile:high'`, `'stream:native:main'`).
|
|
100
|
+
*/
|
|
101
|
+
streamKey: string;
|
|
102
|
+
/** Human-readable label shown in overlay */
|
|
103
|
+
label?: string;
|
|
104
|
+
/** Auto-play on mount (default: true) */
|
|
105
|
+
autoPlay?: boolean;
|
|
106
|
+
/** Start muted (default: true) */
|
|
107
|
+
muted?: boolean;
|
|
108
|
+
/** Show toolbar controls (default: true) */
|
|
109
|
+
showControls?: boolean;
|
|
110
|
+
/** Show a live client-side WebRTC stats overlay (bitrate/fps/res/RTT),
|
|
111
|
+
* computed from the PeerConnection's getStats(). Default: false. */
|
|
112
|
+
showStats?: boolean;
|
|
113
|
+
/**
|
|
114
|
+
* Report the same measurements to a HOST instead of (or as well as) drawing
|
|
115
|
+
* them.
|
|
116
|
+
*
|
|
117
|
+
* The overlay is a DOM layer, and in the native app the player lives inside a
|
|
118
|
+
* WebView whose touches the RN gesture layer owns — so the panel that opens
|
|
119
|
+
* on a tap can never be opened there. The numbers still have to reach the
|
|
120
|
+
* operator, so they travel out to whoever mounted the player and are rendered
|
|
121
|
+
* in its own UI, next to the battery and link details.
|
|
122
|
+
*
|
|
123
|
+
* Wiring this turns the two 1 Hz polls on by itself: a host that asked for
|
|
124
|
+
* samples wants them whether or not the in-picture overlay is drawn.
|
|
125
|
+
*/
|
|
126
|
+
onDebugStats?: (sample: StreamDebugSample) => void;
|
|
127
|
+
/** When provided, polls inbound-video getStats() every 5 s during playback
|
|
128
|
+
* and reports per-window health metrics (frames received/decoded/dropped,
|
|
129
|
+
* freezes, jitter, playback-clock advance). The embed forwards these over the
|
|
130
|
+
* existing host log bridge (`{type:'log', scope:'playback'}`), which always
|
|
131
|
+
* ships — this is the client half of the recorded stutter census. */
|
|
132
|
+
onPlaybackStats?: (data: Record<string, unknown>) => void;
|
|
133
|
+
/**
|
|
134
|
+
* When provided, samples the inbound-video getStats() ~every 2s and reports
|
|
135
|
+
* the CLIENT's live network conditions (packet-loss %, jitter, downlink
|
|
136
|
+
* bitrate, RTT) so the caller can push them to the server's
|
|
137
|
+
* `networkQuality.reportClientStats`. This is what lets the broker's ADAPTIVE
|
|
138
|
+
* ladder actually downgrade "auto" under a poor link: without a client
|
|
139
|
+
* signal the server sees only coarse RTCP RR and tends to stay on the top
|
|
140
|
+
* tier. Inert (zero behaviour change) unless a callback is passed; wire it
|
|
141
|
+
* only for adaptive sessions. */
|
|
142
|
+
onClientNetworkSample?: (sample: ClientNetworkSample) => void;
|
|
143
|
+
/**
|
|
144
|
+
* Bearer for `/adaptive-probe`, which requires a session (D635). A page the
|
|
145
|
+
* hub serves carries the session cookie and needs none; a host whose page
|
|
146
|
+
* cannot (the native app's `file://` embed) passes its token here. Absent
|
|
147
|
+
* and cookieless, the probe reads unknown and the broker's own ladder
|
|
148
|
+
* decides (try-climb on a clean path).
|
|
149
|
+
*/
|
|
150
|
+
probeAuthToken?: string | null;
|
|
151
|
+
/**
|
|
152
|
+
* Cold-start phase breakdown, fired ONCE per connect when ICE reaches
|
|
153
|
+
* connected (the same object the `[WebRTC timing]` console line prints:
|
|
154
|
+
* iceServersMs/offerCreatedMs/localSetMs/signalingRttMs/answerSetMs/
|
|
155
|
+
* iceConnectedMs/firstTrackMs — plus firstFrameMs when the first frame
|
|
156
|
+
* DECODES, reported separately as a patch call). Lets an embedding host
|
|
157
|
+
* (the RN app's WebView) ship the numbers to its own logs instead of them
|
|
158
|
+
* dying in the in-WebView console. Inert unless wired. */
|
|
159
|
+
onConnectTiming?: (timing: Record<string, number>) => void;
|
|
160
|
+
/** Additional CSS classes for the root container */
|
|
161
|
+
className?: string;
|
|
162
|
+
/** Called on connection state change */
|
|
163
|
+
onStateChange?: (state: PlayerConnectionState) => void;
|
|
164
|
+
/** Called on error */
|
|
165
|
+
onError?: (error: string) => void;
|
|
166
|
+
/**
|
|
167
|
+
* Observer of the auto-retry loop: called with every scheduled attempt and
|
|
168
|
+
* with the exhaustion edge. Hosts wire it to their log pipeline (tagged with
|
|
169
|
+
* the camera) — a retry loop nobody can see is how a camera stays dark
|
|
170
|
+
* while looking busy.
|
|
171
|
+
*/
|
|
172
|
+
onReconnectAttempt?: (action: ReconnectAction) => void;
|
|
173
|
+
/** Custom overlay rendered on top of the video */
|
|
174
|
+
overlay?: ReactNode;
|
|
175
|
+
/**
|
|
176
|
+
* Create a WebRTC session (server-offer signaling). When provided,
|
|
177
|
+
* uses server-offer mode instead of WHEP. The caller closes over the
|
|
178
|
+
* target (profile / cam-stream / adaptive) and any device context;
|
|
179
|
+
* the player just hands it the auto-derived `hints` (viewport,
|
|
180
|
+
* downlink) so the server can score adaptive selections.
|
|
181
|
+
*/
|
|
182
|
+
createSession?: (hints?: ClientStreamHints) => Promise<SignalingResult>;
|
|
183
|
+
/**
|
|
184
|
+
* Send the client's SDP answer (server-offer signaling).
|
|
185
|
+
* Required when createSession is provided.
|
|
186
|
+
*/
|
|
187
|
+
sendAnswer?: (sessionId: string, sdpAnswer: string) => Promise<void>;
|
|
188
|
+
/**
|
|
189
|
+
* Client-offer signaling — PREFERRED over `createSession` when supplied.
|
|
190
|
+
* The player builds the SDP offer (advertising the browser's full native
|
|
191
|
+
* decode caps, incl. H.264 High on iOS 18) and this posts it to the
|
|
192
|
+
* server, which answers by echoing the matching codec. That lets a
|
|
193
|
+
* Main/High (incl. 4K) source pass through with NO transcode — the only
|
|
194
|
+
* path that lets iOS decode High. The caller closes over the target.
|
|
195
|
+
*/
|
|
196
|
+
handleOffer?: (sdpOffer: string, sessionId?: string, hints?: ClientStreamHints) => Promise<ClientOfferResult>;
|
|
197
|
+
/**
|
|
198
|
+
* Fetch the browser-side ICE servers (STUN + TURN) for client-offer mode.
|
|
199
|
+
* Called BEFORE the offer is built so a remote/CGNAT viewer can gather a
|
|
200
|
+
* relay candidate. Best-effort — resolve `undefined` to use public STUN.
|
|
201
|
+
*/
|
|
202
|
+
getIceServers?: () => Promise<readonly RTCIceServer[] | undefined>;
|
|
203
|
+
/** Trickle ICE — push a client-gathered candidate to the server. */
|
|
204
|
+
addIceCandidate?: (sessionId: string, candidate: RTCIceCandidateInit) => Promise<void>;
|
|
205
|
+
/** Trickle ICE — poll the server's gathered candidates for a session. */
|
|
206
|
+
getIceCandidates?: (sessionId: string) => Promise<{
|
|
207
|
+
candidates: RTCIceCandidateInit[];
|
|
208
|
+
done: boolean;
|
|
209
|
+
}>;
|
|
210
|
+
/** Explicitly close the WebRTC session on server (cleanup on unmount). */
|
|
211
|
+
closeSession?: (sessionId: string) => Promise<void>;
|
|
212
|
+
/**
|
|
213
|
+
* Poll the live signaling state of a session (client-offer mode only).
|
|
214
|
+
* After the server swaps the broker source to a different tier (adaptive
|
|
215
|
+
* downgrade), this returns a non-null `pendingRenegotiation` with the new
|
|
216
|
+
* target + a monotonic `epoch`. The player then transparently re-offers
|
|
217
|
+
* on the SAME sessionId — building a fresh PeerConnection in the
|
|
218
|
+
* background and only swapping the live `<video>` to the new stream once
|
|
219
|
+
* it delivers media, so the last decoded frame stays on screen with no
|
|
220
|
+
* loader. Best-effort: omit it to disable adaptive re-offer entirely.
|
|
221
|
+
*/
|
|
222
|
+
getSessionState?: (sessionId: string) => Promise<SessionSignalingState>;
|
|
223
|
+
/**
|
|
224
|
+
* Poll the SERVER's account of this session for the stream-debug overlay —
|
|
225
|
+
* the rung `auto` actually resolved to, whether that rung is the camera's
|
|
226
|
+
* own encode or one this hub built, which node ingests it, whether the
|
|
227
|
+
* egress leg copies or re-encodes, and the cause + numbers of the ladder's
|
|
228
|
+
* last move (`webrtcSession.getSessionDebug`).
|
|
229
|
+
*
|
|
230
|
+
* The client can measure its own transport; it cannot see any of that, and
|
|
231
|
+
* "quality is stuck on low" is unanswerable without it. Called at ~1 Hz
|
|
232
|
+
* ONLY while `showStats` is true, and never when it is false. Omit it and
|
|
233
|
+
* the overlay shows its client half alone, saying so.
|
|
234
|
+
*/
|
|
235
|
+
getSessionDebug?: (sessionId: string) => Promise<WebrtcSessionDebug>;
|
|
236
|
+
/**
|
|
237
|
+
* Hand the downlink probe to the session it was measured on
|
|
238
|
+
* (`webrtcSession.applyDownlinkProbe`, D733). The hub then moves THAT
|
|
239
|
+
* session to the probed rung — in place when it can — so a live open stays
|
|
240
|
+
* one session. Omit it (or talk to a hub that does not know the method) and
|
|
241
|
+
* the player keeps its legacy climb: a second, make-before-break session.
|
|
242
|
+
*/
|
|
243
|
+
applyDownlinkProbe?: ApplyDownlinkProbe;
|
|
244
|
+
/**
|
|
245
|
+
* Re-offer signaling for an adaptive tier switch (client-offer mode).
|
|
246
|
+
* Posts a fresh browser-built offer for an EXISTING `sessionId` against
|
|
247
|
+
* the new `target` (from `getSessionState`'s `pendingRenegotiation`). The
|
|
248
|
+
* server closes the stale session and creates a fresh one under the same
|
|
249
|
+
* id, bound to the new tier's source. Distinct from `handleOffer`, whose
|
|
250
|
+
* target is fixed at the player's selected stream — a re-offer must carry
|
|
251
|
+
* the server-chosen downgrade target instead. Required (alongside
|
|
252
|
+
* `getSessionState`) for adaptive re-offer to run.
|
|
253
|
+
*/
|
|
254
|
+
reoffer?: (sessionId: string, sdpOffer: string, target: PlayerWebrtcTarget, hints?: ClientStreamHints) => Promise<ClientOfferResult>;
|
|
255
|
+
/**
|
|
256
|
+
* Optional poster image (snapshot data-URL) shown by the <video> before
|
|
257
|
+
* the FIRST-EVER frame is decoded. Only a cold-start fallback — once a
|
|
258
|
+
* frame is showing, the player keeps the last decoded frame across
|
|
259
|
+
* renegotiations and never falls back to the poster. Caller-supplied.
|
|
260
|
+
*/
|
|
261
|
+
posterUrl?: string;
|
|
262
|
+
/**
|
|
263
|
+
* Override client hints sent to the server at session creation.
|
|
264
|
+
* Values provided here replace the auto-computed browser values.
|
|
265
|
+
* Use for network simulation (benchmark) or manual tier forcing.
|
|
266
|
+
*/
|
|
267
|
+
hintsOverride?: Partial<ClientStreamHints>;
|
|
268
|
+
/**
|
|
269
|
+
* Observer of the ADAPTIVE decision this client just made — fired once per
|
|
270
|
+
* decision CHANGE (see `adaptiveHintsKey`), never per tick.
|
|
271
|
+
*
|
|
272
|
+
* Deliberately the client's half only: the viewport it measured, the pixel
|
|
273
|
+
* ratio, the downlink it managed to measure (and the origin it probed, null
|
|
274
|
+
* when none was reachable), and the phase of the offer that carried them.
|
|
275
|
+
* The hub logs its own pick from the same inputs; duplicating that here
|
|
276
|
+
* would be a second opinion on someone else's decision. Hosts join the two
|
|
277
|
+
* halves — the RN viewer forwards this over the embed log bridge so a
|
|
278
|
+
* "quality is stuck on low" report carries what the app actually SENT.
|
|
279
|
+
*
|
|
280
|
+
* Inert unless wired.
|
|
281
|
+
*/
|
|
282
|
+
onAdaptiveHints?: (report: AdaptiveHintsReport) => void;
|
|
283
|
+
/**
|
|
284
|
+
* Host-driven fast reconnect. Bump this number (monotonic) to force a
|
|
285
|
+
* full reconnect WITHOUT remounting the player — used by the embed when
|
|
286
|
+
* the native shell detects a network change (Wi-Fi↔cellular) or returns
|
|
287
|
+
* from background. Because `cleanup()` no longer clears `srcObject`, the
|
|
288
|
+
* LAST DECODED FRAME stays on screen across the reconnect (no black
|
|
289
|
+
* flash, no covering loader). The initial value is ignored — only
|
|
290
|
+
* changes trigger a reconnect. Distinct from remounting via `streamKey`,
|
|
291
|
+
* which blanks the element.
|
|
292
|
+
*/
|
|
293
|
+
reconnectSignal?: number;
|
|
294
|
+
/**
|
|
295
|
+
* Optional control data-channel hook (client-offer mode only). When
|
|
296
|
+
* provided, the player opens a `camstack-control` `RTCDataChannel` on the
|
|
297
|
+
* PeerConnection BEFORE building the offer (so it is negotiated into the
|
|
298
|
+
* m=application section) and hands the channel to this callback for each new
|
|
299
|
+
* connection. Used by the recorded-playback timeline embed to drive the
|
|
300
|
+
* broker's `TimelineSession` (seek / scrub-commit / play-rate / go-live) and
|
|
301
|
+
* receive server state/position over the SAME WebRTC session that carries the
|
|
302
|
+
* unified live-or-recorded `<video>` track. Omit it (the default) for a plain
|
|
303
|
+
* live player — no data channel is created and behaviour is unchanged.
|
|
304
|
+
*/
|
|
305
|
+
onControlChannel?: (channel: RTCDataChannel) => void;
|
|
306
|
+
/**
|
|
307
|
+
* Optional handle to the player's `<video>` element, delivered once on mount
|
|
308
|
+
* (and `null` on unmount). Consumers that pace server-pushed frames by what
|
|
309
|
+
* the viewer actually RENDERED (`requestVideoFrameCallback`) need the
|
|
310
|
+
* element itself — the recorded-scrub receiver-credit acks are the use case.
|
|
311
|
+
*/
|
|
312
|
+
onVideoElement?: (el: HTMLVideoElement | null) => void;
|
|
313
|
+
/**
|
|
314
|
+
* DIAGNOSTICS ONLY — the browser's ICE transport policy for every peer
|
|
315
|
+
* connection this player builds. Absent (always, in production) the policy
|
|
316
|
+
* is not set and the browser gathers host/srflx/relay as before. The WebRTC
|
|
317
|
+
* diagnostics set `'relay'` to prove whether a TURN-only path reaches the
|
|
318
|
+
* hub; see `peer-connection-config.ts` for why the player never does.
|
|
319
|
+
*/
|
|
320
|
+
iceTransportPolicy?: RTCIceTransportPolicy;
|
|
321
|
+
/**
|
|
322
|
+
* Observer of every peer connection this player creates (first connect,
|
|
323
|
+
* reconnects, re-offers), handed over right after construction and before
|
|
324
|
+
* any signaling. For listeners only — the diagnostics read ICE / DTLS
|
|
325
|
+
* transitions and local candidates through `addEventListener`; a caller
|
|
326
|
+
* must never assign the `on*` handlers the player owns.
|
|
327
|
+
*/
|
|
328
|
+
onPeerConnection?: (pc: RTCPeerConnection) => void;
|
|
329
329
|
}
|
|
330
|
-
export declare function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay, muted: initialMuted, showControls, showStats, onDebugStats, onPlaybackStats, onClientNetworkSample, probeAuthToken, onConnectTiming, className, onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, applyDownlinkProbe, reoffer, posterUrl, hintsOverride, onAdaptiveHints, reconnectSignal, onControlChannel, onVideoElement, iceTransportPolicy, onPeerConnection
|
|
330
|
+
export declare function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay, muted: initialMuted, showControls, showStats, onDebugStats, onPlaybackStats, onClientNetworkSample, probeAuthToken, onConnectTiming, className, onStateChange, onError, onReconnectAttempt, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, applyDownlinkProbe, reoffer, posterUrl, hintsOverride, onAdaptiveHints, reconnectSignal, onControlChannel, onVideoElement, iceTransportPolicy, onPeerConnection }: CameraStreamPlayerProps): JSX.Element;
|