@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,59 +1,59 @@
|
|
|
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
|
-
|
|
2
|
+
* The camera's MICROPHONE, as the privacy-mask panel controls it
|
|
3
|
+
* ([D113](../../../../../docs/decisions/adr-0113.md) phase 3, the
|
|
4
|
+
* `device-audio` row).
|
|
5
|
+
*
|
|
6
|
+
* | Function | Authority read | Authority written |
|
|
7
|
+
* | --- | --- | --- |
|
|
8
|
+
* | `device-audio` | `privacyMask.getOptions().supportsAudioMute` + `getStatus().audioEnabled` | `privacyMask.setAudioEnabled` |
|
|
9
|
+
*
|
|
10
|
+
* The cap already owns both privacy planes — what the camera does not film and
|
|
11
|
+
* what it does not hear — so the microphone belongs in this panel and nowhere
|
|
12
|
+
* else. It had no surface at all outside the aggregate switch group; without
|
|
13
|
+
* this it would have become unwritable the day the group is deleted, on the one
|
|
14
|
+
* authority whose store is the CAMERA and which therefore cannot be repaired
|
|
15
|
+
* from the hub's own state.
|
|
16
|
+
*
|
|
17
|
+
* **The microphone is not part of the mask draft.** It has its own mutation
|
|
18
|
+
* (`setAudioEnabled`, deliberately not a field on `PrivacyMaskPatch`) and it is
|
|
19
|
+
* written immediately and read back, exactly as the switch that preceded it
|
|
20
|
+
* did. Folding it into Save would mean a Save of the ZONES also rewrote the
|
|
21
|
+
* microphone — two unrelated facts behind one button.
|
|
22
|
+
*
|
|
23
|
+
* Three answers, and collapsing any two loses a real distinction:
|
|
24
|
+
* - options unread → `null` (UNKNOWN — never "the camera has no microphone")
|
|
25
|
+
* - `supportsAudioMute: false` → not supported (no control at all)
|
|
26
|
+
* - supported but `audioEnabled: null` → UNKNOWN, never `false`
|
|
27
|
+
*/
|
|
28
28
|
export interface CameraMicrophoneState {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
29
|
+
readonly label: string;
|
|
30
|
+
/** Does this camera expose a microphone switch that can actually be written? */
|
|
31
|
+
readonly supported: boolean;
|
|
32
|
+
/** `null` = nothing answered. Never coerced — "off" and "unknown" differ. */
|
|
33
|
+
readonly on: boolean | null;
|
|
34
|
+
/** A control is only offered when the plane is supported AND its state known. */
|
|
35
|
+
readonly available: boolean;
|
|
36
|
+
/** What the operator loses while it is off. */
|
|
37
|
+
readonly costWhenOff: string;
|
|
38
38
|
}
|
|
39
39
|
export interface CameraMicrophoneInput {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
/** `getOptions().supportsAudioMute`; `null` when the read failed. */
|
|
41
|
+
readonly supportsAudioMute: boolean | null;
|
|
42
|
+
/** `getStatus().audioEnabled`; `null` when unknown or unread. */
|
|
43
|
+
readonly audioEnabled: boolean | null;
|
|
44
|
+
/** The value an in-flight write asked for; `null` when nothing is in flight. */
|
|
45
|
+
readonly pendingOn?: boolean | null;
|
|
46
46
|
}
|
|
47
47
|
export declare const CAMERA_MICROPHONE_LABEL = "Microphone";
|
|
48
48
|
export declare function resolveCameraMicrophone(input: CameraMicrophoneInput): CameraMicrophoneState;
|
|
49
49
|
/** The write ONE toggle implies, in the cap's own vocabulary. */
|
|
50
50
|
export interface CameraMicrophoneWrite {
|
|
51
|
-
|
|
51
|
+
readonly enabled: boolean;
|
|
52
52
|
}
|
|
53
53
|
/**
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
* Polarity here is straight-through (`enabled` means "capturing sound"), which
|
|
55
|
+
* is exactly why it is still pinned by a test: the sibling rows in this
|
|
56
|
+
* refactor (`broker-audio`, `notifications`) both INVERT, and a reader who has
|
|
57
|
+
* just come from one of those is one keystroke from making this one match.
|
|
58
|
+
*/
|
|
59
59
|
export declare function cameraMicrophoneWrite(state: CameraMicrophoneState): CameraMicrophoneWrite | null;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RecordingBand, RecordingBandMode, RecordingConfig, RecordingStorageMode, RecordingTriggers, RecordingRetention, CamProfile } from
|
|
1
|
+
import type { RecordingBand, RecordingBandMode, RecordingConfig, RecordingStorageMode, RecordingTriggers, RecordingRetention, CamProfile } from "@camstack/types";
|
|
2
2
|
/** Every weekday — the `days` of a band that covers the whole week. */
|
|
3
3
|
export declare const ALL_WEEKDAYS: readonly number[];
|
|
4
4
|
/** The full-day span of an always-on band (`HH:MM`, 23:59 = end of day). */
|
|
@@ -13,37 +13,37 @@ export declare function removeBandAt(bands: readonly RecordingBand[], index: num
|
|
|
13
13
|
/** Does this band cover the whole week, all day? (the Base-tab shape) */
|
|
14
14
|
export declare function isAlwaysBand(band: RecordingBand): boolean;
|
|
15
15
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
16
|
+
* A config is "advanced" when its bands cannot be expressed by the Base tab —
|
|
17
|
+
* i.e. more than one band, or a single band restricted in time or weekday. Such
|
|
18
|
+
* a config opens directly in the Advanced band table so nothing is silently
|
|
19
|
+
* flattened by the simpler form.
|
|
20
|
+
*/
|
|
21
21
|
export declare function isAdvancedConfig(cfg: RecordingConfig): boolean;
|
|
22
22
|
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
* The editable shape of the Basic recording form: a storage mode plus the
|
|
24
|
+
* `events` parameters. It compiles to exactly ONE always-on band (or none, when
|
|
25
|
+
* `off`) — bands are the only thing that reaches the wire.
|
|
26
|
+
*/
|
|
27
27
|
export interface RecordingFormState {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
28
|
+
readonly mode: RecordingStorageMode;
|
|
29
|
+
readonly profiles?: readonly CamProfile[];
|
|
30
|
+
readonly segmentSeconds?: number;
|
|
31
|
+
readonly triggers: RecordingTriggers;
|
|
32
|
+
readonly postBufferSec?: number;
|
|
33
|
+
readonly retention?: RecordingRetention;
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
* Read a persisted config into the Basic form state. `mode` is DERIVED from the
|
|
37
|
+
* bands by the same function the recorder stamps `config.mode` with; the
|
|
38
|
+
* `events` parameters come from the first events band, so re-opening the form
|
|
39
|
+
* shows what is actually recorded.
|
|
40
|
+
*/
|
|
41
41
|
export declare function formStateFromConfig(cfg: RecordingConfig): RecordingFormState;
|
|
42
42
|
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
* Serialize the Basic form state to the wire config: one always-on band of the
|
|
44
|
+
* chosen mode, none when `off`. `enabled` follows the mode; `mode` itself is
|
|
45
|
+
* NOT sent — the recorder stamps it as the derived summary of the bands.
|
|
46
|
+
*/
|
|
47
47
|
export declare function configFromFormState(state: RecordingFormState): RecordingConfig;
|
|
48
48
|
/** The Base tab's bands: one always-on band of the chosen mode (none = off). */
|
|
49
49
|
export declare function bandsFromFormState(state: RecordingFormState): RecordingBand[];
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
export interface AvailabilityRange {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
readonly profile: string;
|
|
3
|
+
readonly startMs: number;
|
|
4
|
+
readonly endMs: number;
|
|
5
5
|
}
|
|
6
6
|
export interface PlaybackSpan {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
readonly startMs: number;
|
|
8
|
+
readonly endMs: number;
|
|
9
9
|
}
|
|
10
10
|
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
* Merge availability ranges (across every profile) into the union of distinct
|
|
12
|
+
* time windows, ascending by start. Overlapping or touching intervals coalesce;
|
|
13
|
+
* zero/negative-length inputs are dropped. Newest-first ordering is the caller's
|
|
14
|
+
* concern (it reverses for display).
|
|
15
|
+
*/
|
|
16
16
|
export declare function mergeAvailabilitySpans(ranges: readonly AvailabilityRange[]): PlaybackSpan[];
|
|
17
17
|
/**
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
* Pick the right unit for a byte count and render it with a sensible number of
|
|
19
|
+
* significant digits (binary prefixes, matching recording sizes elsewhere).
|
|
20
|
+
* KB and up render one decimal under 100, none above; bytes never get a decimal.
|
|
21
|
+
*/
|
|
22
22
|
export declare function formatBytes(bytes: number): string;
|
|
@@ -1,91 +1,91 @@
|
|
|
1
|
-
import { PlaybackSpan } from
|
|
1
|
+
import type { PlaybackSpan } from "./recording-spans";
|
|
2
2
|
/** Fixed heatmap bucket size: 15 minutes → 96 buckets over 24h. */
|
|
3
3
|
export declare const BUCKET_MS: number;
|
|
4
4
|
/** Event kinds the timeline understands. */
|
|
5
|
-
export type TimelineKind =
|
|
5
|
+
export type TimelineKind = "motion" | "object" | "audio";
|
|
6
6
|
export interface DensityBucket {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
readonly index: number;
|
|
8
|
+
readonly startMs: number;
|
|
9
|
+
readonly endMs: number;
|
|
10
|
+
readonly counts: Readonly<Record<TimelineKind, number>>;
|
|
11
|
+
readonly total: number;
|
|
12
|
+
/** Highest-count kind, or null when the bucket is empty. */
|
|
13
|
+
readonly dominant: TimelineKind | null;
|
|
14
14
|
}
|
|
15
15
|
/** Row returned by the server `getEventDensity` call (one per non-empty bucket). */
|
|
16
16
|
export interface EventDensityRow {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
17
|
+
readonly bucketStart: number;
|
|
18
|
+
readonly motion: number;
|
|
19
|
+
readonly object: number;
|
|
20
|
+
readonly audio: number;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
23
|
+
* Convert server-side density rows into `DensityBucket[]` for the timeline
|
|
24
|
+
* heatmap. Rows with total === 0 are skipped (defensive; server already omits
|
|
25
|
+
* them). Returns a sparse, ascending-by-index array — EventHeatmap positions
|
|
26
|
+
* each bar by `b.startMs` rather than array index, so gaps are fine.
|
|
27
|
+
*/
|
|
28
28
|
export declare function densityRowsToBuckets(rows: readonly EventDensityRow[], windowFrom: number, bucketMs: number): DensityBucket[];
|
|
29
29
|
export interface SeekTarget {
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
readonly fromMs: number;
|
|
31
|
+
readonly toMs: number;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
34
|
+
* Resolve a playback window for a click at `clickMs` against recorded `spans`.
|
|
35
|
+
* Inside a span → play from the click to that span's end. In a gap / outside →
|
|
36
|
+
* snap to the WHOLE nearest span. No spans → null (nothing to play).
|
|
37
|
+
* `spans` are expected ascending by start (as `mergeAvailabilitySpans` returns).
|
|
38
|
+
*/
|
|
39
39
|
export declare function seekTargetForSpans(clickMs: number, spans: readonly PlaybackSpan[]): SeekTarget | null;
|
|
40
40
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
* Position `ms` inside the window `[fromMs, toMs]` as a clamped percentage
|
|
42
|
+
* (0–100). A zero/negative-width window yields 0. Callers use this for `left:`.
|
|
43
|
+
*/
|
|
44
44
|
export declare function pctForMs(ms: number, fromMs: number, toMs: number): number;
|
|
45
45
|
/** A [fromMs, toMs) window spanning (at most) one calendar day. */
|
|
46
46
|
export interface DayWindow {
|
|
47
|
-
|
|
48
|
-
|
|
47
|
+
readonly fromMs: number;
|
|
48
|
+
readonly toMs: number;
|
|
49
49
|
}
|
|
50
50
|
/**
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
51
|
+
* Build a DayWindow for the given calendar `date` using local time.
|
|
52
|
+
* For any day strictly in the past: `fromMs` = local midnight, `toMs` =
|
|
53
|
+
* next local midnight (exactly 24 h).
|
|
54
|
+
* For today (or any future day that contains `nowMs`): `toMs = nowMs` so the
|
|
55
|
+
* window never extends into the future.
|
|
56
|
+
*/
|
|
57
57
|
export declare function dayWindow(date: Date, nowMs: number): DayWindow;
|
|
58
58
|
/** Available zoom levels in ms, from widest (24h) to narrowest (15 min). */
|
|
59
59
|
export declare const ZOOM_LEVELS: readonly number[];
|
|
60
60
|
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
* Produce a `levelMs`-wide window whose RIGHT edge stays anchored at
|
|
62
|
+
* `rightEdgeMs` (clamped within `dayBounds`), rather than centring on the view
|
|
63
|
+
* midpoint. On today's timeline the view's right edge is "now", so zooming this
|
|
64
|
+
* way keeps the most recent footage pinned to the right instead of drifting to
|
|
65
|
+
* a midday range that no longer contains now. Panning then moves back/forward.
|
|
66
|
+
*
|
|
67
|
+
* Falls back to `dayBounds` when `levelMs` meets or exceeds the day span (can't
|
|
68
|
+
* show a wider window than the day holds — e.g. early morning with little
|
|
69
|
+
* elapsed time).
|
|
70
|
+
*/
|
|
71
71
|
export declare function zoomWindowAnchoredRight(dayBounds: DayWindow, levelMs: number, rightEdgeMs: number): DayWindow;
|
|
72
72
|
/**
|
|
73
|
-
|
|
74
|
-
|
|
73
|
+
* Shift `win` by `deltaMs`, preserving width, clamped within `dayBounds`.
|
|
74
|
+
*/
|
|
75
75
|
export declare function panWindow(win: DayWindow, dayBounds: DayWindow, deltaMs: number): DayWindow;
|
|
76
76
|
/**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
* Choose a sensible heatmap bucket size for a visible span of `spanMs`,
|
|
78
|
+
* targeting ~96-120 buckets. Always picks from `BUCKET_CANDIDATES`.
|
|
79
|
+
*/
|
|
80
80
|
export declare function bucketMsForSpan(spanMs: number): number;
|
|
81
81
|
/** One labelled tick on the time axis. */
|
|
82
82
|
export interface AxisTick {
|
|
83
|
-
|
|
84
|
-
|
|
83
|
+
readonly pct: number;
|
|
84
|
+
readonly label: string;
|
|
85
85
|
}
|
|
86
86
|
/**
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
87
|
+
* Produce `count` evenly-spaced axis ticks spanning [fromMs, toMs].
|
|
88
|
+
* - `pct` is via pctForMs (first=0, last=100).
|
|
89
|
+
* - `label` is a localised HH:MM clock string.
|
|
90
|
+
*/
|
|
91
91
|
export declare function axisTicks(fromMs: number, toMs: number, count: number): AxisTick[];
|
|
@@ -1,69 +1,78 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Pure sentence builders for the scene editor.
|
|
3
|
+
*
|
|
4
|
+
* Split out of the component because these are the whole point of the card and
|
|
5
|
+
* they are the part that can be wrong: this feature's failure mode is SILENCE
|
|
6
|
+
* that reads as "nothing has happened", and the difference between a
|
|
7
|
+
* five-minute fix and a session of guessing is one sentence naming which
|
|
8
|
+
* lighting the scene has never been captured in.
|
|
9
|
+
*/
|
|
10
|
+
import type { SceneMonitor } from "@camstack/types";
|
|
2
11
|
/** The lighting variants an operator is OFFERED. The resolver can also report
|
|
3
|
-
|
|
4
|
-
|
|
12
|
+
* `night`, `dawn` and `dusk`; those are shown when present but never demanded,
|
|
13
|
+
* because most installs only ever see day and IR. */
|
|
5
14
|
export declare const SCENE_CAPTURE_VARIANTS: readonly ["day", "ir"];
|
|
6
15
|
export type SceneCaptureVariant = (typeof SCENE_CAPTURE_VARIANTS)[number];
|
|
7
16
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
+
* The one variant that is genuinely optional.
|
|
18
|
+
*
|
|
19
|
+
* Nobody stands outside at 22:00 to photograph a wheelie bin in infrared, and
|
|
20
|
+
* plenty of scenes are daytime questions that never need a night reference at
|
|
21
|
+
* all. Every sentence about IR in this file is written from that premise: a
|
|
22
|
+
* missing night reference is a CHOICE the scene accommodates, never a fault it
|
|
23
|
+
* reports. The engine backs that up — under the default
|
|
24
|
+
* `onUncoveredCondition: 'skip'` the night checks are simply not made.
|
|
25
|
+
*/
|
|
17
26
|
export declare const SCENE_OPTIONAL_VARIANT: SceneCaptureVariant;
|
|
18
27
|
export declare const VARIANT_LABEL: Readonly<Record<string, string>>;
|
|
19
28
|
export declare function variantLabel(condition: string): string;
|
|
20
29
|
/**
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
30
|
+
* "Daylight ✓ · Night (IR) ✗ — optional; checks in night (ir) are skipped."
|
|
31
|
+
*
|
|
32
|
+
* Converts the silent cross-condition fallback this engine used to have into an
|
|
33
|
+
* operator-visible fact. Without it, a scene with only a daylight reference
|
|
34
|
+
* simply stops answering after sunset and nothing anywhere says why.
|
|
35
|
+
*
|
|
36
|
+
* It used to end *"reports 'can't tell' in night (ir)"*, which was accurate and
|
|
37
|
+
* read as a defect: the operator saw a ✗ and a complaint for a scene that was
|
|
38
|
+
* configured exactly as they meant it. The missing half is now named as what it
|
|
39
|
+
* is — the part you do not have to do — and the sentence says what actually
|
|
40
|
+
* happens instead, which differs by the scene's own policy.
|
|
41
|
+
*/
|
|
33
42
|
export declare function coverageLine(monitor: SceneMonitor): string;
|
|
34
43
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
* The calm sentence for a scene that is sitting the current light out — `null`
|
|
45
|
+
* whenever it is checking normally.
|
|
46
|
+
*
|
|
47
|
+
* Separate from {@link statusLine} because it is not a verdict and must not
|
|
48
|
+
* read like one. A paused scene has not failed, has not lost its flag, and
|
|
49
|
+
* needs nothing from the operator; the only thing worth saying is which light
|
|
50
|
+
* it is waiting out and that it will pick itself back up.
|
|
51
|
+
*/
|
|
43
52
|
export declare function suspensionLine(monitor: SceneMonitor): string | null;
|
|
44
53
|
/**
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
* The one line under a scene's name. It answers, in order: can it judge, what
|
|
55
|
+
* does it say, and how long has it said it.
|
|
56
|
+
*/
|
|
48
57
|
export declare function statusLine(monitor: SceneMonitor, now: number): string;
|
|
49
58
|
/** The badge word. `latched` wins over `verdict`, because the latch is the
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
59
|
+
* thing the operator asked to be told and it outlives the live state.
|
|
60
|
+
*
|
|
61
|
+
* A scene sitting out an uncovered light reads `Paused`, in the NEUTRAL tone —
|
|
62
|
+
* never `alarm`, and never the `danger` variant the page maps that to. A
|
|
63
|
+
* missing IR reference must not be able to paint a red badge on a scene that
|
|
64
|
+
* is doing exactly what it was configured to do. */
|
|
56
65
|
export declare function badgeFor(monitor: SceneMonitor): {
|
|
57
|
-
|
|
58
|
-
|
|
66
|
+
text: string;
|
|
67
|
+
tone: "alarm" | "ok" | "unknown";
|
|
59
68
|
};
|
|
60
69
|
/** A rect covering most of the frame is dominated by weather, sky and parked
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
export declare const ROI_AREA_WARN_FRACTION =
|
|
70
|
+
* cars: the bin is 2 % of the pixels and CLIP will not notice it leaving. The
|
|
71
|
+
* failure is silent INSENSITIVITY, which is the worst kind — hence a warning
|
|
72
|
+
* rather than a refusal. */
|
|
73
|
+
export declare const ROI_AREA_WARN_FRACTION = .4;
|
|
65
74
|
export declare function roiTooLarge(roi: {
|
|
66
|
-
|
|
67
|
-
|
|
75
|
+
width: number;
|
|
76
|
+
height: number;
|
|
68
77
|
}): boolean;
|
|
69
78
|
export declare function humanDuration(ms: number): string;
|
|
@@ -1,56 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
2
|
+
* What the player reports to the broker every ~2 s
|
|
3
|
+
* (`networkQuality.reportClientStats`), as a pure step over two `getStats`
|
|
4
|
+
* readings — so the two ways it used to lie can be pinned (D635 round 3):
|
|
5
|
+
*
|
|
6
|
+
* - Across a PC swap (a tier change's make-before-break) the byte baseline was
|
|
7
|
+
* the OLD connection's, so the new PC's first reading clamped to 0 kbps; and
|
|
8
|
+
* while a renegotiation was in flight the reporter read a closing PC. Both
|
|
9
|
+
* zeros were matched by the broker against real sends (review I1). A new PC
|
|
10
|
+
* now re-baselines, and nothing is reported while renegotiating.
|
|
11
|
+
* - The downlink probe never reached the broker unless it justified a climb.
|
|
12
|
+
* The sample now carries the latest probe whatever it read, with its age
|
|
13
|
+
* (review I4), so "measured slow" is no longer indistinguishable from
|
|
14
|
+
* "failed".
|
|
15
|
+
*/
|
|
16
16
|
/** Client-observed network conditions. Matches the `networkQuality.reportClientStats`
|
|
17
|
-
|
|
17
|
+
* mutation input (minus `deviceId`, which the caller adds). */
|
|
18
18
|
export interface ClientNetworkSample {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
19
|
+
readonly rttMs: number;
|
|
20
|
+
readonly jitterMs: number;
|
|
21
|
+
readonly estimatedBandwidthKbps: number;
|
|
22
|
+
readonly packetLossPercent: number;
|
|
23
|
+
/** Latest `/adaptive-probe` reading, Mbps, whatever it read; absent = never / failed. */
|
|
24
|
+
readonly downlinkMbps?: number;
|
|
25
|
+
/** Age of that reading now, ms. */
|
|
26
|
+
readonly downlinkAgeMs?: number;
|
|
27
27
|
}
|
|
28
28
|
/** One inbound-video `getStats` reading, and the connection it came from. */
|
|
29
29
|
export interface InboundReading {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
30
|
+
/** The RTCPeerConnection read — identity only. */
|
|
31
|
+
readonly pc: object;
|
|
32
|
+
readonly lost: number;
|
|
33
|
+
readonly recv: number;
|
|
34
|
+
readonly bytes: number;
|
|
35
|
+
/** getStats timestamp, ms. */
|
|
36
|
+
readonly ts: number;
|
|
37
|
+
readonly rttS: number;
|
|
38
|
+
readonly jitterS: number;
|
|
39
39
|
}
|
|
40
40
|
/** The latest probe as the player holds it. */
|
|
41
41
|
export interface ProbeReading {
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
readonly mbps: number;
|
|
43
|
+
readonly ageMs: number;
|
|
44
44
|
}
|
|
45
45
|
export interface SampleContext {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
/** A renegotiation (tier change) is in flight: the PC being read is on its way out. */
|
|
47
|
+
readonly renegotiating: boolean;
|
|
48
|
+
readonly probe: ProbeReading | null;
|
|
49
49
|
}
|
|
50
50
|
export interface SampleStep {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
51
|
+
/** The reading to diff the next one against; null = start over. */
|
|
52
|
+
readonly baseline: InboundReading | null;
|
|
53
|
+
/** What to report now; null = report nothing this window. */
|
|
54
|
+
readonly sample: ClientNetworkSample | null;
|
|
55
55
|
}
|
|
56
56
|
export declare function nextClientSample(prev: InboundReading | null, cur: InboundReading, ctx: SampleContext): SampleStep;
|