@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,212 +1,223 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { CamProfile, WebrtcSessionDebug, StationaryOverlayBox } from '@camstack/types';
|
|
3
|
-
import { ApplyDownlinkProbe } from './adaptive-downlink';
|
|
4
|
-
import { SignalingResult, ClientOfferResult, ClientStreamHints, SessionSignalingState } from './camera-stream-player';
|
|
5
|
-
import { DeviceDetections } from '../hooks/use-device-detections';
|
|
6
1
|
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
2
|
+
* StreamPanel — unified camera stream viewer with header bar, overlay toggles,
|
|
3
|
+
* stream selector, pipeline phase, play/stop, and snapshot preview.
|
|
4
|
+
*
|
|
5
|
+
* Combines features from LiveStreamViewer (admin-ui) and PipelineTab (benchmark)
|
|
6
|
+
* into a single reusable component in ui-library.
|
|
7
|
+
*
|
|
8
|
+
* The component is data-agnostic: callers fetch devices/streams/detections using
|
|
9
|
+
* their own hooks and pass the results as props.
|
|
10
|
+
*/
|
|
11
|
+
import { type ReactNode, type JSX } from "react";
|
|
12
|
+
import type { CamProfile, WebrtcSessionDebug } from "@camstack/types";
|
|
13
|
+
import type { ApplyDownlinkProbe } from "./adaptive-downlink";
|
|
14
|
+
import { type SignalingResult, type ClientOfferResult, type ClientStreamHints, type SessionSignalingState } from "./camera-stream-player";
|
|
15
|
+
import type { DeviceDetections } from "../hooks/use-device-detections";
|
|
16
|
+
import type { StationaryOverlayBox } from "@camstack/types";
|
|
17
|
+
/**
|
|
18
|
+
* Discriminated WebRTC target — same shape as the backend cap. The
|
|
19
|
+
* `profile` tier uses the canonical `CamProfile` enum.
|
|
20
|
+
*/
|
|
10
21
|
export type StreamChoiceTarget = {
|
|
11
|
-
|
|
22
|
+
readonly kind: "adaptive";
|
|
12
23
|
} | {
|
|
13
|
-
|
|
14
|
-
|
|
24
|
+
readonly kind: "profile";
|
|
25
|
+
readonly profile: CamProfile;
|
|
15
26
|
} | {
|
|
16
|
-
|
|
17
|
-
|
|
27
|
+
readonly kind: "cam-stream";
|
|
28
|
+
readonly camStreamId: string;
|
|
18
29
|
};
|
|
19
30
|
export interface StreamChoice {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Stable identifier for React keys, dropdown values, and the
|
|
33
|
+
* player's `streamKey` prop. Opaque to the panel — typical values:
|
|
34
|
+
* `'adaptive'`, `'profile:high'`, `'stream:native:main'`.
|
|
35
|
+
*/
|
|
36
|
+
readonly id: string;
|
|
37
|
+
/** Display label (e.g. "Adaptive", "HIGH (3840×2160)", "Native main"). */
|
|
38
|
+
readonly label: string;
|
|
39
|
+
/** Structured WebRTC target — passed verbatim to `createSession`. */
|
|
40
|
+
readonly target: StreamChoiceTarget;
|
|
41
|
+
/** Live broker status (null if unavailable). */
|
|
42
|
+
readonly status?: string | null;
|
|
43
|
+
/** Input FPS from camera (null if unavailable). */
|
|
44
|
+
readonly inputFps?: number | null;
|
|
45
|
+
/** Bitrate in kbps (null if unavailable). */
|
|
46
|
+
readonly bitrateKbps?: number | null;
|
|
36
47
|
}
|
|
37
48
|
export interface StreamStats {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
49
|
+
readonly status: string;
|
|
50
|
+
readonly inputFps: number;
|
|
51
|
+
readonly uptimeMs: number;
|
|
41
52
|
}
|
|
42
53
|
export interface StreamPanelProps {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
54
|
+
readonly serverUrl?: string;
|
|
55
|
+
readonly createSession?: (target: StreamChoiceTarget, hints?: ClientStreamHints) => Promise<SignalingResult>;
|
|
56
|
+
readonly sendAnswer?: (sessionId: string, sdpAnswer: string) => Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Client-offer signaling — PREFERRED over `createSession` for browsers.
|
|
59
|
+
* Closes over the selected target; the player builds the offer and this
|
|
60
|
+
* posts it. Lets iOS pass H.264 High/Main (incl. 4K) through untouched.
|
|
61
|
+
* Optional so non-browser callers (benchmark) can stay on server-offer.
|
|
62
|
+
*/
|
|
63
|
+
readonly handleOffer?: (target: StreamChoiceTarget, sdpOffer: string, sessionId?: string) => Promise<ClientOfferResult>;
|
|
64
|
+
/** Browser-side ICE servers (STUN + TURN) for client-offer mode. */
|
|
65
|
+
readonly getIceServers?: () => Promise<readonly RTCIceServer[] | undefined>;
|
|
66
|
+
/** Trickle ICE — push a client candidate to the server (sessionId-scoped). */
|
|
67
|
+
readonly addIceCandidate?: (sessionId: string, candidate: RTCIceCandidateInit) => Promise<void>;
|
|
68
|
+
/** Trickle ICE — poll the server's gathered candidates (sessionId-scoped). */
|
|
69
|
+
readonly getIceCandidates?: (sessionId: string) => Promise<{
|
|
70
|
+
candidates: RTCIceCandidateInit[];
|
|
71
|
+
done: boolean;
|
|
72
|
+
}>;
|
|
73
|
+
readonly closeSession?: (sessionId: string) => Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* Poll a session's live signaling state (client-offer mode). A non-null
|
|
76
|
+
* `pendingRenegotiation` after an adaptive tier switch makes the player
|
|
77
|
+
* transparently re-offer on the same session. Optional — omit to disable
|
|
78
|
+
* adaptive re-offer (steady-state behaviour is unchanged).
|
|
79
|
+
*/
|
|
80
|
+
readonly getSessionState?: (sessionId: string) => Promise<SessionSignalingState>;
|
|
81
|
+
/**
|
|
82
|
+
* The server half of the stream-debug overlay. Optional, and when it is
|
|
83
|
+
* absent the overlay SAYS so rather than showing an empty section — a panel
|
|
84
|
+
* that silently omits half its answer is worse than one that admits it.
|
|
85
|
+
*/
|
|
86
|
+
readonly getSessionDebug?: (sessionId: string) => Promise<WebrtcSessionDebug>;
|
|
87
|
+
/** Hand the downlink probe to the live session (D733) — one session per open. */
|
|
88
|
+
readonly applyDownlinkProbe?: ApplyDownlinkProbe;
|
|
89
|
+
/**
|
|
90
|
+
* When set, the panel switches to VOD mode: it renders an `HlsVideo`
|
|
91
|
+
* over this master `.m3u8` URL INSTEAD of the live WebRTC player, and
|
|
92
|
+
* the live signaling props are ignored. Lets the same hero player show
|
|
93
|
+
* recordings/clips (driven by the Recording tab) without a second
|
|
94
|
+
* player. Clearing it returns the panel to live mode.
|
|
95
|
+
*/
|
|
96
|
+
readonly playbackUrl?: string;
|
|
97
|
+
/**
|
|
98
|
+
* What {@link playbackUrl} is. Absent means `hls` — the recorder's manifest,
|
|
99
|
+
* which is what every caller passed before native clips existed. A vendor
|
|
100
|
+
* addon's own clip is `mp4` and the hero plays it as a plain media URL
|
|
101
|
+
* (D549 22); passing it as `hls` would hand an MP4 to a manifest parser.
|
|
102
|
+
*/
|
|
103
|
+
readonly playbackFormat?: "hls" | "mp4";
|
|
104
|
+
/** Bearer token for the admin-gated data-plane playback route (optional). */
|
|
105
|
+
readonly playbackAuthToken?: string | null;
|
|
106
|
+
/**
|
|
107
|
+
* Short label for the clip/window being played — shown in the header in
|
|
108
|
+
* place of the stream selector while in VOD mode.
|
|
109
|
+
*/
|
|
110
|
+
readonly playbackLabel?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Invoked when the operator clicks the (re-purposed) play/stop button
|
|
113
|
+
* while in VOD mode. The caller clears its playback request to return
|
|
114
|
+
* the panel to the live stream.
|
|
115
|
+
*/
|
|
116
|
+
readonly onExitPlayback?: () => void;
|
|
117
|
+
/** Available streams. If omitted or single entry, no dropdown shown. */
|
|
118
|
+
readonly streams?: readonly StreamChoice[];
|
|
119
|
+
/** Currently active StreamChoice id. Defaults to first stream. */
|
|
120
|
+
readonly activeStreamId?: string;
|
|
121
|
+
/** Called when user selects a different stream (StreamChoice id). */
|
|
122
|
+
readonly onStreamChange?: (id: string) => void;
|
|
123
|
+
readonly deviceName?: string;
|
|
124
|
+
/** Pipeline phase from useDeviceDetections (e.g. "active", "watching") */
|
|
125
|
+
readonly phase?: string;
|
|
126
|
+
/** Pipeline metrics from useDeviceWebrtc. If provided, overrides phase and adds detection fps. */
|
|
127
|
+
readonly pipelineMetrics?: {
|
|
128
|
+
phase: string;
|
|
129
|
+
detectionFps: number;
|
|
130
|
+
avgInferenceMs: number;
|
|
131
|
+
} | null;
|
|
132
|
+
/** Detection data from useDeviceDetections hook. If omitted, no overlays. */
|
|
133
|
+
readonly detections?: DeviceDetections;
|
|
134
|
+
/** The census for this camera, normalised — from the occupancy snapshot. The
|
|
135
|
+
* panel is data-agnostic by design, so the caller fetches it; absent means
|
|
136
|
+
* "not fetched", and the stationary layer then draws nothing rather than
|
|
137
|
+
* claiming an empty lot. */
|
|
138
|
+
readonly stationaryObjects?: readonly StationaryOverlayBox[];
|
|
139
|
+
/** Initial state for detection overlay (default: true) */
|
|
140
|
+
readonly defaultShowDetections?: boolean;
|
|
141
|
+
/** Initial state for motion overlay (default: false) */
|
|
142
|
+
readonly defaultShowMotion?: boolean;
|
|
143
|
+
readonly streamStats?: StreamStats;
|
|
144
|
+
/** Auto-play on mount (default: true) */
|
|
145
|
+
readonly autoPlay?: boolean;
|
|
146
|
+
/** Show play/stop toggle + snapshot preview when stopped (default: false) */
|
|
147
|
+
readonly showPlayStop?: boolean;
|
|
148
|
+
/** Snapshot source URL (data: URI). Only used when showPlayStop=true. */
|
|
149
|
+
readonly snapshotSrc?: string | null;
|
|
150
|
+
/**
|
|
151
|
+
* Optional poster (snapshot data-URL) painted by the live `<video>` until
|
|
152
|
+
* its FIRST frame decodes — a cold-start fallback only. Independent of
|
|
153
|
+
* `snapshotSrc` (which is the play/stop preview). Caller-supplied; when
|
|
154
|
+
* omitted the video simply starts black until the first frame.
|
|
155
|
+
*/
|
|
156
|
+
readonly posterUrl?: string;
|
|
157
|
+
/** Whether snapshot is currently loading */
|
|
158
|
+
readonly snapshotLoading?: boolean;
|
|
159
|
+
/** Callback to refresh snapshot */
|
|
160
|
+
readonly onRefreshSnapshot?: () => void;
|
|
161
|
+
/** Show stream stats in header (fps, uptime) (default: false) */
|
|
162
|
+
readonly showStreamStats?: boolean;
|
|
163
|
+
readonly children?: ReactNode;
|
|
164
|
+
/**
|
|
165
|
+
* Extra overlay node composited on top of the video, alongside the
|
|
166
|
+
* built-in detection overlay. Used by callers to layer device-scoped
|
|
167
|
+
* controls (PTZOverlay, AudioPTT, ...) without forking the panel.
|
|
168
|
+
*/
|
|
169
|
+
readonly extraOverlay?: ReactNode;
|
|
170
|
+
/**
|
|
171
|
+
* Whether the device supports PTZ. When true, the header shows a
|
|
172
|
+
* "PTZ" toggle next to detect/motion.
|
|
173
|
+
*/
|
|
174
|
+
readonly ptzAvailable?: boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Controlled visibility of the PTZ overlay. Drives both the
|
|
177
|
+
* header button highlight and (combined with `ptzOverlay`) overlay
|
|
178
|
+
* rendering. Caller computes the final value (e.g. OR with an
|
|
179
|
+
* external "force on" surface like a floating PTZ panel) and
|
|
180
|
+
* passes it down here.
|
|
181
|
+
*/
|
|
182
|
+
readonly ptzShown?: boolean;
|
|
183
|
+
/**
|
|
184
|
+
* Overlay rendered ON the live video when `ptzShown` is true.
|
|
185
|
+
* Typically a `<PTZOverlay controls={...} mode="overlay" />` from
|
|
186
|
+
* ui-library. Combined with `extraOverlay` in the player overlay
|
|
187
|
+
* slot — both render together when active.
|
|
188
|
+
*/
|
|
189
|
+
readonly ptzOverlay?: ReactNode;
|
|
190
|
+
/**
|
|
191
|
+
* Notified when the user clicks the in-header PTZ toggle. The
|
|
192
|
+
* caller updates its source of truth for `ptzShown`. No-op if
|
|
193
|
+
* omitted (button stays inert).
|
|
194
|
+
*/
|
|
195
|
+
readonly onPtzToggle?: () => void;
|
|
196
|
+
/**
|
|
197
|
+
* Whether the device supports two-way audio (intercom). When true,
|
|
198
|
+
* the header shows an "Intercom" toggle next to detect/motion that
|
|
199
|
+
* lets the operator open the floating intercom panel without leaving
|
|
200
|
+
* the stream view.
|
|
201
|
+
*/
|
|
202
|
+
readonly intercomAvailable?: boolean;
|
|
203
|
+
/**
|
|
204
|
+
* Controlled visibility of the intercom panel — drives the button's
|
|
205
|
+
* highlight state. The caller (which owns the floating-panel state)
|
|
206
|
+
* passes `true` while its intercom panel is open.
|
|
207
|
+
*/
|
|
208
|
+
readonly intercomShown?: boolean;
|
|
209
|
+
/**
|
|
210
|
+
* Notified when the user clicks the in-header intercom toggle. The
|
|
211
|
+
* caller flips its panel state. No-op if omitted (button inert).
|
|
212
|
+
*/
|
|
213
|
+
readonly onIntercomToggle?: () => void;
|
|
214
|
+
/**
|
|
215
|
+
* When true, drops the panel's outer rounded card chrome (border,
|
|
216
|
+
* rounded corners, background). Use when embedding into another
|
|
217
|
+
* surface that already provides framing — e.g. the device-detail
|
|
218
|
+
* left-column hero where the panel is one row of a larger card.
|
|
219
|
+
*/
|
|
220
|
+
readonly chromeless?: boolean;
|
|
221
|
+
readonly className?: string;
|
|
211
222
|
}
|
|
212
|
-
export declare function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, applyDownlinkProbe, playbackUrl, playbackFormat, playbackAuthToken, onExitPlayback, posterUrl, streams, activeStreamId: controlledStreamId, onStreamChange, deviceName, phase, pipelineMetrics, detections, stationaryObjects, defaultShowDetections, defaultShowMotion, streamStats, autoPlay, showPlayStop, snapshotSrc, snapshotLoading, onRefreshSnapshot, showStreamStats, children, extraOverlay, ptzAvailable, ptzShown, ptzOverlay, onPtzToggle, intercomAvailable, intercomShown, onIntercomToggle, chromeless, className
|
|
223
|
+
export declare function StreamPanel({ serverUrl, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, getSessionDebug, applyDownlinkProbe, playbackUrl, playbackFormat, playbackAuthToken, onExitPlayback, posterUrl, streams, activeStreamId: controlledStreamId, onStreamChange, deviceName, phase, pipelineMetrics, detections, stationaryObjects, defaultShowDetections, defaultShowMotion, streamStats, autoPlay, showPlayStop, snapshotSrc, snapshotLoading, onRefreshSnapshot, showStreamStats, children, extraOverlay, ptzAvailable, ptzShown, ptzOverlay, onPtzToggle, intercomAvailable, intercomShown, onIntercomToggle, chromeless, className }: StreamPanelProps): JSX.Element;
|
|
@@ -1,77 +1,77 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
2
|
+
* Column sorting for {@link DataTable} — the ONE sort model in this library.
|
|
3
|
+
*
|
|
4
|
+
* The device list had the only column sort in the app
|
|
5
|
+
* (`composites/device-list/sort.ts`), typed to `DeviceItemDevice` and to three
|
|
6
|
+
* hard-coded column ids. Every other table in the admin UI was unsorted. This
|
|
7
|
+
* module is that same behaviour, generic: `DataTable` owns the state, a column
|
|
8
|
+
* opts in by declaring `sortValue`, and `device-list` keeps its domain
|
|
9
|
+
* comparators while delegating the toggle here. There is no second sort.
|
|
10
|
+
*
|
|
11
|
+
* The three rules are inherited verbatim from the device list, because they
|
|
12
|
+
* were argued there and they are the reason a sorted table stays readable:
|
|
13
|
+
*
|
|
14
|
+
* 1. **`null` sorts LAST in both directions.** A missing value is "unknown",
|
|
15
|
+
* not a value to reverse. Flipping the direction must never promote the
|
|
16
|
+
* rows that have nothing to say to the top.
|
|
17
|
+
* 2. **Stable.** `Array.prototype.toSorted` is stable in every runtime we
|
|
18
|
+
* ship to, so rows with an equal key keep the order they arrived in —
|
|
19
|
+
* which is usually a meaningful order already (topology order, insertion
|
|
20
|
+
* order).
|
|
21
|
+
* 3. **Immutable.** The input array is never touched; a `null` sort returns a
|
|
22
|
+
* fresh copy in the incoming order.
|
|
23
|
+
*
|
|
24
|
+
* A column with no `sortValue` renders a plain static header and can never be
|
|
25
|
+
* clicked. That is deliberate and it is the point of `notSortableReason`: a
|
|
26
|
+
* composite cell (a list of capabilities, an argv blob, an interactive
|
|
27
|
+
* control) has no single value to order by, and inventing one — "by count",
|
|
28
|
+
* "alphabetically by full path" — produces an ordering that looks
|
|
29
|
+
* authoritative and means nothing.
|
|
30
|
+
*/
|
|
31
31
|
/** Sort direction. There is no third state on the column; "unsorted" is the
|
|
32
|
-
|
|
33
|
-
export type TableSortDirection =
|
|
32
|
+
* absence of a {@link TableSortState}. */
|
|
33
|
+
export type TableSortDirection = "asc" | "desc";
|
|
34
34
|
/** The table's single active sort. `null` at the table level = incoming order. */
|
|
35
35
|
export interface TableSortState {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
36
|
+
/** `DataColumn.key` of the sorted column. */
|
|
37
|
+
readonly columnKey: string;
|
|
38
|
+
readonly dir: TableSortDirection;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
* What a sortable column contributes for one row.
|
|
42
|
+
*
|
|
43
|
+
* `null` means "this row has no value for this column" and always sorts last
|
|
44
|
+
* (rule 1). It is NOT the same as `0` or `''`, which are values and sort
|
|
45
|
+
* normally.
|
|
46
|
+
*/
|
|
47
47
|
export type TableSortValue = string | number | null;
|
|
48
48
|
/**
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
* The toggle rule, and the only copy of it.
|
|
50
|
+
*
|
|
51
|
+
* none → asc → desc → none, and a click on a DIFFERENT column starts that
|
|
52
|
+
* column fresh at `asc`. `sameColumn` says whether the clicked column is the
|
|
53
|
+
* one currently sorted; `currentDir` is its direction (`null` when nothing is
|
|
54
|
+
* sorted). Returns the next direction, or `null` for "unsorted".
|
|
55
|
+
*
|
|
56
|
+
* Split out from {@link nextTableSort} so the device list — whose sort state
|
|
57
|
+
* keys columns by `columnId`, not `columnKey` — can reuse the rule without a
|
|
58
|
+
* cast and without a second copy of it.
|
|
59
|
+
*/
|
|
60
60
|
export declare function nextSortDirection(sameColumn: boolean, currentDir: TableSortDirection | null): TableSortDirection | null;
|
|
61
61
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
* Toggle a column's sort on header click: none → asc → desc → none.
|
|
63
|
+
* Clicking a DIFFERENT column starts it fresh at `asc`.
|
|
64
|
+
*/
|
|
65
65
|
export declare function nextTableSort(current: TableSortState | null, columnKey: string): TableSortState | null;
|
|
66
66
|
/**
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
67
|
+
* Return a NEW array of `rows` ordered by `sort`.
|
|
68
|
+
*
|
|
69
|
+
* `valueOf` is the column's `sortValue` — it is called once per row per
|
|
70
|
+
* comparison, so it must be cheap (read a field, do not format a string).
|
|
71
|
+
* `sort === null` ⇒ a fresh shallow copy in the incoming order.
|
|
72
|
+
*/
|
|
73
73
|
export declare function sortRowsByColumn<T>(rows: readonly T[], sort: TableSortState | null, valueOf: (row: T) => TableSortValue): readonly T[];
|
|
74
74
|
/** The `aria-sort` value WAI-ARIA scopes to a `<th>` (never to an inner control). */
|
|
75
|
-
export type AriaSortValue =
|
|
75
|
+
export type AriaSortValue = "ascending" | "descending" | "none";
|
|
76
76
|
/** Derive the `<th>` `aria-sort` for `columnKey` from the table's sort state. */
|
|
77
77
|
export declare function ariaSortForColumn(sort: TableSortState | null, columnKey: string): AriaSortValue;
|
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import { TIMEZONES, findTimezone
|
|
1
|
+
import { TIMEZONES, findTimezone } from "@camstack/types";
|
|
2
|
+
import type { Timezone, TimezoneDstRule, Weekday } from "@camstack/types";
|
|
3
|
+
import { type JSX } from "react";
|
|
2
4
|
export { TIMEZONES, findTimezone };
|
|
3
5
|
export type { Timezone, TimezoneDstRule, Weekday };
|
|
4
6
|
export interface TimezoneSelectorProps {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
/** Currently selected IANA id (e.g. 'Europe/Rome'). */
|
|
8
|
+
readonly value: string;
|
|
9
|
+
/** Fired with the newly chosen IANA id. */
|
|
10
|
+
readonly onChange: (id: string) => void;
|
|
11
|
+
readonly disabled?: boolean;
|
|
10
12
|
}
|
|
11
13
|
/**
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
export declare function TimezoneSelector({ value, onChange, disabled }: TimezoneSelectorProps):
|
|
14
|
+
* Friendly timezone picker. Renders a native `<select>` grouped by
|
|
15
|
+
* region via `<optgroup>`, sourced from the curated `TIMEZONES`
|
|
16
|
+
* catalogue. The selected value is the IANA id; DST is implied by the
|
|
17
|
+
* chosen zone (each option carries its standard offset + DST rule),
|
|
18
|
+
* so there is no separate DST control.
|
|
19
|
+
*/
|
|
20
|
+
export declare function TimezoneSelector({ value, onChange, disabled }: TimezoneSelectorProps): JSX.Element;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type JSX } from "react";
|
|
1
2
|
export interface SendFrameToTrainingButtonProps {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
readonly deviceId: number;
|
|
4
|
+
/** The playhead instant, or `null` while nothing is being played back. */
|
|
5
|
+
readonly epochMs: number | null;
|
|
5
6
|
}
|
|
6
|
-
export declare function SendFrameToTrainingButton({ deviceId, epochMs }: SendFrameToTrainingButtonProps):
|
|
7
|
+
export declare function SendFrameToTrainingButton({ deviceId, epochMs }: SendFrameToTrainingButtonProps): JSX.Element | null;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { type JSX } from "react";
|
|
1
2
|
export interface TrainingCollectionPickerProps {
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
readonly value: string | null;
|
|
4
|
+
readonly onChange: (collectionId: string) => void;
|
|
4
5
|
}
|
|
5
|
-
export declare function TrainingCollectionPicker({ value, onChange }: TrainingCollectionPickerProps):
|
|
6
|
+
export declare function TrainingCollectionPicker({ value, onChange }: TrainingCollectionPickerProps): JSX.Element;
|