@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,71 +1,71 @@
|
|
|
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
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
2
|
+
* The smart device picker's decisions — search, groups, per-group bulk
|
|
3
|
+
* actions, the chip overflow and the bounded render — with no UI in it.
|
|
4
|
+
*
|
|
5
|
+
* One picker replaces every long device checklist in the notification editors
|
|
6
|
+
* (a rule's devices, a system rule's include/exclude, the timelapse and digest
|
|
7
|
+
* cameras, the alarm's non-blocking openings). A checklist of 293 rows on the
|
|
8
|
+
* admin, and of every camera on a phone, took the whole screen to say "two
|
|
9
|
+
* devices"; the picker shows the selection as chips and opens a searchable,
|
|
10
|
+
* grouped list only to change it.
|
|
11
|
+
*
|
|
12
|
+
* Since D637 the same model also serves the system family's node and package
|
|
13
|
+
* pickers, keyed by string: every item and function is generic over
|
|
14
|
+
* {@link PickerId}, and a device picker is simply `PickerItem<number>`.
|
|
15
|
+
*
|
|
16
|
+
* It has to hold at HUNDREDS of devices of ONE type (a fleet of HA sensors),
|
|
17
|
+
* which is what shapes it:
|
|
18
|
+
*
|
|
19
|
+
* - search is a debounced, case-insensitive AND over name, room, type,
|
|
20
|
+
* container and id — "sala temp" finds the living-room thermometer among
|
|
21
|
+
* nine "Temperatura";
|
|
22
|
+
* - the DEVICE picker groups by what the operator chose at the top of the
|
|
23
|
+
* list — site zone (default), location, or nothing
|
|
24
|
+
* ({@link groupPickerDevicesBy}); the node and package pickers keep
|
|
25
|
+
* (type, liveness) groups;
|
|
26
|
+
* - (type, room) groups, where they are still used — and any group bigger than
|
|
27
|
+
* {@link PICKER_GROUP_COLLAPSE_AT} starts COLLAPSED unless a search is
|
|
28
|
+
* running or it holds a selected device — a collapsed header still says how
|
|
29
|
+
* many it holds and offers select-all / clear;
|
|
30
|
+
* - the list is rendered in bounded pieces ({@link pageRows} for a capped
|
|
31
|
+
* render with "show N more"; a virtualised list sizes itself from
|
|
32
|
+
* {@link PICKER_WINDOW});
|
|
33
|
+
* - the list can be NARROWED by search plus Type / Zone / Location filters
|
|
34
|
+
* ({@link applyPickerFilters}); "Reset filters" clears those and leaves
|
|
35
|
+
* "Group by" alone ({@link resetPickerFilters}, D697);
|
|
36
|
+
* - the chips show at most {@link PICKER_CHIP_LIMIT} and a "+N more".
|
|
37
|
+
*
|
|
38
|
+
* It reads NOTHING. It filters the list the caller already holds; an id the
|
|
39
|
+
* list lacks is the caller's to resolve (`device-selection.ts`), which is also
|
|
40
|
+
* where D315 and D49 live.
|
|
41
|
+
*
|
|
42
|
+
* TWO BYTE-IDENTICAL COPIES: `camstack/src/components/notifications/
|
|
43
|
+
* device-picker-model.ts` (viewer) and `packages/addon-admin-ui/src/pages/
|
|
44
|
+
* system/device-picker-model.ts` (admin), for the reason `device-selection.ts`
|
|
45
|
+
* has two. `scripts/check-device-selection-in-sync.ts` fails the commit when
|
|
46
|
+
* they differ. No `toSorted` here: the viewer runs on Hermes.
|
|
47
|
+
*/
|
|
48
48
|
/** What a picker item is keyed by: a device id, or a node id / package name (D637). */
|
|
49
49
|
export type PickerId = number | string;
|
|
50
50
|
/** One item as the picker lists it. */
|
|
51
51
|
export interface PickerItem<Id extends PickerId> {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
52
|
+
readonly id: Id;
|
|
53
|
+
readonly name: string;
|
|
54
|
+
/** Groups by this (`DeviceType`, node role, package kind); absent groups under "no type". */
|
|
55
|
+
readonly type?: string;
|
|
56
|
+
/** The second grouping axis (room, liveness); absent or null groups under "none". */
|
|
57
|
+
readonly location?: string | null;
|
|
58
|
+
/**
|
|
59
|
+
* A second line — the container a child device belongs to, a node's id, a
|
|
60
|
+
* version. When unset and {@link parentDeviceId} is set, the picker fills
|
|
61
|
+
* this with `in <parent>` from the same listing.
|
|
62
|
+
*/
|
|
63
|
+
readonly detail?: string;
|
|
64
|
+
/**
|
|
65
|
+
* Hub/container this device is attached to. Number ids only; the picker
|
|
66
|
+
* resolves the name from the same `devices` list (see `device-parent.ts`).
|
|
67
|
+
*/
|
|
68
|
+
readonly parentDeviceId?: number | null;
|
|
69
69
|
}
|
|
70
70
|
/** One device as the picker lists it. */
|
|
71
71
|
export type PickerDevice = PickerItem<number>;
|
|
@@ -86,51 +86,51 @@ export declare function pickerQueryTokens(query: string): readonly string[];
|
|
|
86
86
|
/** Devices matching EVERY token. A blank query keeps the list as it is. */
|
|
87
87
|
export declare function filterPickerDevices<Id extends PickerId>(devices: readonly PickerItem<Id>[], query: string): readonly PickerItem<Id>[];
|
|
88
88
|
/**
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
89
|
+
* What a "Group by" group is named after. Absent on the (type, room) groups
|
|
90
|
+
* the node and package pickers still use.
|
|
91
|
+
*/
|
|
92
92
|
export type PickerGroupHeading = {
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
readonly kind: "zone";
|
|
94
|
+
readonly label: string;
|
|
95
95
|
} | {
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
readonly kind: "location";
|
|
97
|
+
readonly label: string;
|
|
98
98
|
} | {
|
|
99
|
-
|
|
99
|
+
readonly kind: "no-zone";
|
|
100
100
|
} | {
|
|
101
|
-
|
|
101
|
+
readonly kind: "no-location";
|
|
102
102
|
};
|
|
103
103
|
/** One (type, room) group — or, under "Group by", one zone or location. */
|
|
104
104
|
export interface PickerGroup<Id extends PickerId = number> {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
105
|
+
readonly key: string;
|
|
106
|
+
readonly type: string | null;
|
|
107
|
+
readonly location: string | null;
|
|
108
|
+
readonly devices: readonly PickerItem<Id>[];
|
|
109
|
+
readonly selectedCount: number;
|
|
110
|
+
readonly heading?: PickerGroupHeading;
|
|
111
111
|
}
|
|
112
112
|
/** The key a group is remembered by (collapsed / expanded). */
|
|
113
113
|
export declare function pickerGroupKey(type: string | null, location: string | null): string;
|
|
114
114
|
/** Group by type, then room; both ascending, "none" last; devices by name. */
|
|
115
115
|
export declare function groupPickerDevices<Id extends PickerId>(devices: readonly PickerItem<Id>[], selected: readonly Id[]): readonly PickerGroup<Id>[];
|
|
116
116
|
/**
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
117
|
+
* Whether a group is open. The operator's own toggle wins; otherwise a small
|
|
118
|
+
* group is open, a big one is closed — unless a search is running (the result
|
|
119
|
+
* IS what they asked to see) or it holds a selected device.
|
|
120
|
+
*/
|
|
121
121
|
export declare function isGroupExpanded<Id extends PickerId>(group: PickerGroup<Id>, toggles: ReadonlyMap<string, boolean>, searching: boolean): boolean;
|
|
122
122
|
/** One row of the flattened list: a group header, or a device under it. */
|
|
123
123
|
export type PickerRow<Id extends PickerId = number> = {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
124
|
+
readonly kind: "header";
|
|
125
|
+
readonly key: string;
|
|
126
|
+
readonly group: PickerGroup<Id>;
|
|
127
|
+
readonly expanded: boolean;
|
|
128
128
|
} | {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
129
|
+
readonly kind: "device";
|
|
130
|
+
readonly key: string;
|
|
131
|
+
readonly device: PickerItem<Id>;
|
|
132
|
+
readonly groupKey: string;
|
|
133
|
+
readonly selected: boolean;
|
|
134
134
|
};
|
|
135
135
|
/** The groups as ONE list of rows — what a virtualised list renders. */
|
|
136
136
|
export declare function flattenPickerRows<Id extends PickerId>(groups: readonly PickerGroup<Id>[], selected: readonly Id[], toggles: ReadonlyMap<string, boolean>, searching: boolean): readonly PickerRow<Id>[];
|
|
@@ -142,18 +142,18 @@ export declare function selectPickerGroup<Id extends PickerId>(value: readonly I
|
|
|
142
142
|
export declare function clearPickerGroup<Id extends PickerId>(value: readonly Id[], group: PickerGroup<Id>): Id[];
|
|
143
143
|
/** The chips to draw, and how many are behind "+N more". */
|
|
144
144
|
export interface ChipOverflow<T> {
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
readonly shown: readonly T[];
|
|
146
|
+
readonly hidden: number;
|
|
147
147
|
}
|
|
148
148
|
export declare function chipOverflow<T>(items: readonly T[], expanded: boolean): ChipOverflow<T>;
|
|
149
149
|
/** A capped render: the first `shown` rows, and how many are left. */
|
|
150
150
|
export interface PickerPage<Id extends PickerId = number> {
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
readonly rows: readonly PickerRow<Id>[];
|
|
152
|
+
readonly remaining: number;
|
|
153
153
|
}
|
|
154
154
|
export declare function pageRows<Id extends PickerId>(rows: readonly PickerRow<Id>[], shown: number): PickerPage<Id>;
|
|
155
155
|
/** How the device picker groups its list. */
|
|
156
|
-
export type PickerGroupBy =
|
|
156
|
+
export type PickerGroupBy = "zone" | "location" | "none";
|
|
157
157
|
/** The modes, in the order the control draws them. */
|
|
158
158
|
export declare const PICKER_GROUP_BY_MODES: readonly PickerGroupBy[];
|
|
159
159
|
/** What an operator who never chose gets. */
|
|
@@ -162,73 +162,73 @@ export declare const PICKER_DEFAULT_GROUP_BY: PickerGroupBy;
|
|
|
162
162
|
export declare function parsePickerGroupBy(raw: unknown): PickerGroupBy;
|
|
163
163
|
/** One site zone as the picker groups by it. */
|
|
164
164
|
export interface PickerZone {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
165
|
+
readonly zoneKey: string;
|
|
166
|
+
readonly label: string;
|
|
167
|
+
readonly locationKeys: readonly string[];
|
|
168
168
|
}
|
|
169
169
|
/** The zone read, with whether it ANSWERED (D315). */
|
|
170
170
|
export type PickerZonesRead = {
|
|
171
|
-
|
|
172
|
-
|
|
171
|
+
readonly state: "answered";
|
|
172
|
+
readonly zones: readonly PickerZone[];
|
|
173
173
|
} | {
|
|
174
|
-
|
|
174
|
+
readonly state: "pending";
|
|
175
175
|
} | {
|
|
176
|
-
|
|
176
|
+
readonly state: "failed";
|
|
177
177
|
};
|
|
178
178
|
/** Why Zone mode is grouping by location instead. */
|
|
179
|
-
export type PickerZonesFallback =
|
|
179
|
+
export type PickerZonesFallback = "pending" | "failed";
|
|
180
180
|
/** The folded key a location label joins a zone by — `siteZoneKey`'s fold. */
|
|
181
181
|
export declare function pickerLocationKey(label: string): string;
|
|
182
182
|
/** The picker's groups under one "Group by" mode. */
|
|
183
183
|
export interface PickerGrouping<Id extends PickerId = number> {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
184
|
+
/** The mode the groups ARE — `location` when Zone could not be honoured. */
|
|
185
|
+
readonly groupBy: PickerGroupBy;
|
|
186
|
+
/** Set when Zone mode fell back to location: the zone read had not answered. */
|
|
187
|
+
readonly fallback: PickerZonesFallback | null;
|
|
188
|
+
/** One headerless list (None): no group to expand, select or clear. */
|
|
189
|
+
readonly flat: boolean;
|
|
190
|
+
readonly groups: readonly PickerGroup<Id>[];
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
193
|
+
* Group the list by zone, location or nothing.
|
|
194
|
+
*
|
|
195
|
+
* Zone: a group per site zone that holds a listed device (by label), then
|
|
196
|
+
* "No zone" (a location no zone holds), then "No location". Location: a group
|
|
197
|
+
* per location (folded; named after the first device's trimmed spelling), then "No
|
|
198
|
+
* location". None: one flat list by name, then id.
|
|
199
|
+
*
|
|
200
|
+
* A zone read that is pending or failed can NOT say a location is in no zone
|
|
201
|
+
* (D315), so Zone mode then groups by location and returns the reason as
|
|
202
|
+
* {@link PickerGrouping.fallback} for the UI's one-line note.
|
|
203
|
+
*/
|
|
204
204
|
export declare function groupPickerDevicesBy<Id extends PickerId>(devices: readonly PickerItem<Id>[], selected: readonly Id[], groupBy: PickerGroupBy, zones: PickerZonesRead): PickerGrouping<Id>;
|
|
205
205
|
/** The grouping as rows: a flat grouping draws no header and is always open. */
|
|
206
206
|
export declare function flattenPickerGrouping<Id extends PickerId>(grouping: PickerGrouping<Id>, selected: readonly Id[], toggles: ReadonlyMap<string, boolean>, searching: boolean): readonly PickerRow<Id>[];
|
|
207
207
|
/**
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
208
|
+
* What a row's second line adds under "Group by": the device TYPE (it left the
|
|
209
|
+
* group key), and the room wherever the header does not already say it.
|
|
210
|
+
*/
|
|
211
211
|
export interface PickerRowFacts {
|
|
212
|
-
|
|
213
|
-
|
|
212
|
+
readonly location: string | null;
|
|
213
|
+
readonly type: string | null;
|
|
214
214
|
}
|
|
215
215
|
export declare function pickerRowFacts<Id extends PickerId>(device: PickerItem<Id>, groupBy: PickerGroupBy): PickerRowFacts;
|
|
216
216
|
/** The filter key of an item with no type / no location / no zone. */
|
|
217
217
|
export declare const PICKER_NONE_KEY = "(none)";
|
|
218
|
-
export type PickerFacet =
|
|
218
|
+
export type PickerFacet = "type" | "zone" | "location";
|
|
219
219
|
/** One choosable value of a facet, with how many listed items carry it. */
|
|
220
220
|
export interface PickerFacetOption {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
221
|
+
readonly key: string;
|
|
222
|
+
/** The type, the location (first trimmed spelling seen), the zone label; null for "(none)". */
|
|
223
|
+
readonly label: string | null;
|
|
224
|
+
readonly count: number;
|
|
225
225
|
}
|
|
226
226
|
/** What a picker (or the alarm table) narrows by, applied in this order. */
|
|
227
227
|
export interface PickerFilters {
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
228
|
+
readonly query: string;
|
|
229
|
+
readonly types: readonly string[];
|
|
230
|
+
readonly zones: readonly string[];
|
|
231
|
+
readonly locations: readonly string[];
|
|
232
232
|
}
|
|
233
233
|
export declare const PICKER_NO_FILTERS: PickerFilters;
|
|
234
234
|
/** The key an item filters by under one facet; `(none)` when it has no such value. */
|
|
@@ -245,10 +245,10 @@ export declare function pickerFiltersActive(filters: PickerFilters): boolean;
|
|
|
245
245
|
/** Reset clears search, Type, Zone and Location — never "Group by". */
|
|
246
246
|
export declare function resetPickerFilters(): PickerFilters;
|
|
247
247
|
/**
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
248
|
+
* Selected ids the current filters hide — they stay selected, they are only not listed. Only a
|
|
249
|
+
* LISTED device can be hidden: an id the list does not hold at all (removed, unknown, off-offer)
|
|
250
|
+
* is not "hidden", so it is not counted.
|
|
251
|
+
*/
|
|
252
252
|
export declare function pickerHiddenSelectedCount<Id extends PickerId>(selected: readonly Id[], list: readonly PickerItem<Id>[], matches: readonly PickerItem<Id>[]): number;
|
|
253
253
|
/** A dropdown is drawn when it can narrow (two values or more) or a key is chosen. */
|
|
254
254
|
export declare function pickerFacetFilterShown(options: readonly PickerFacetOption[], chosen: readonly string[]): boolean;
|
|
@@ -1,40 +1,47 @@
|
|
|
1
|
-
import { SelectedDeviceRow, SelectionId } from './device-selection';
|
|
2
1
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
* The words every admin picker uses for a selected id its drawn list does not
|
|
3
|
+
* contain (`device-selection.ts`): "Device #<id> — removed" when the fleet
|
|
4
|
+
* ANSWERED without it, the device's name when the fleet has it (a non-camera
|
|
5
|
+
* on a camera picker), a plain "Device #<id>" when the fleet has not answered.
|
|
6
|
+
* Each is a removable chip in `DevicePicker` — a read never drops a selected
|
|
7
|
+
* id (D49), and only the operator removes one.
|
|
8
|
+
*
|
|
9
|
+
* Since D637 the same words cover the system family's node and package
|
|
10
|
+
* pickers. A node the answered directory lacks is "unknown to the hub", never
|
|
11
|
+
* "removed": even a complete directory omits a node that joined and left
|
|
12
|
+
* between two history captures (`NodeDirectorySchema`). A package the answered
|
|
13
|
+
* list lacks is "not installed". A class the taxonomy lacks is "not in the class
|
|
14
|
+
* list" (D641).
|
|
15
|
+
*/
|
|
16
|
+
import type { SelectedDeviceRow, SelectionId } from "./device-selection";
|
|
17
|
+
import { type JSX } from "react";
|
|
18
|
+
/**
|
|
19
|
+
* What a picker lists, for its sentences. `class` is a detection class (D641);
|
|
20
|
+
* `zone` and `face` are a rule's zone and known-face scopes (D690).
|
|
21
|
+
*/
|
|
22
|
+
export type PickerNoun = "camera" | "device" | "node" | "package" | "class" | "zone" | "face" | "calendar";
|
|
7
23
|
/** Each noun's plural. */
|
|
8
|
-
export declare const PICKER_NOUN_PLURAL:
|
|
9
|
-
readonly camera: "cameras";
|
|
10
|
-
readonly device: "devices";
|
|
11
|
-
readonly node: "nodes";
|
|
12
|
-
readonly package: "packages";
|
|
13
|
-
readonly class: "classes";
|
|
14
|
-
readonly zone: "zones";
|
|
15
|
-
readonly face: "faces";
|
|
16
|
-
readonly calendar: "calendars";
|
|
17
|
-
};
|
|
24
|
+
export declare const PICKER_NOUN_PLURAL: Readonly<Record<PickerNoun, string>>;
|
|
18
25
|
/** What a picker lists, plural — the only words the loading / failed lines say. */
|
|
19
26
|
export type PickerNounPlural = (typeof PICKER_NOUN_PLURAL)[PickerNoun];
|
|
20
27
|
/** The label a picker gives a selected id its drawn list does not contain. */
|
|
21
28
|
export declare function orphanDeviceLabel<Id extends SelectionId>(row: SelectedDeviceRow<Id>, noun?: PickerNoun): string;
|
|
22
29
|
interface DevicesWidenWarningProps {
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
/** What the picker lists: the rule's Devices tab lists every device. */
|
|
31
|
+
readonly noun?: PickerNoun;
|
|
25
32
|
}
|
|
26
33
|
/** Said under a picker whose empty selection means EVERY device. */
|
|
27
|
-
export declare function DevicesWidenWarning({ noun }: DevicesWidenWarningProps):
|
|
34
|
+
export declare function DevicesWidenWarning({ noun }: DevicesWidenWarningProps): JSX.Element;
|
|
28
35
|
interface DevicesLoadingLineProps {
|
|
29
|
-
|
|
30
|
-
|
|
36
|
+
/** What the picker lists, plural — the rule's Devices tab lists every device. */
|
|
37
|
+
readonly noun?: PickerNounPlural;
|
|
31
38
|
}
|
|
32
39
|
/** A list that has not answered: never an absence claim (D315). */
|
|
33
|
-
export declare function DevicesLoadingLine({ noun }: DevicesLoadingLineProps):
|
|
40
|
+
export declare function DevicesLoadingLine({ noun }: DevicesLoadingLineProps): JSX.Element;
|
|
34
41
|
interface DevicesFailedLineProps {
|
|
35
|
-
|
|
36
|
-
|
|
42
|
+
/** What the picker lists, plural. */
|
|
43
|
+
readonly noun?: PickerNounPlural;
|
|
37
44
|
}
|
|
38
45
|
/** A list that failed: said, while the selected ids stay removable. */
|
|
39
|
-
export declare function DevicesFailedLine({ noun }: DevicesFailedLineProps):
|
|
46
|
+
export declare function DevicesFailedLine({ noun }: DevicesFailedLineProps): JSX.Element;
|
|
40
47
|
export {};
|
|
@@ -1,64 +1,64 @@
|
|
|
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
|
-
|
|
2
|
+
* What a device picker says about the ids it has SELECTED — including the ones
|
|
3
|
+
* the hub no longer has.
|
|
4
|
+
*
|
|
5
|
+
* The picker draws the live camera list; a selected id outside that list would
|
|
6
|
+
* otherwise be invisible and impossible to deselect (operator report
|
|
7
|
+
* 2026-09-25: a deleted camera kept a rule matching nothing while the editor
|
|
8
|
+
* showed "all devices"). Two rules shape this module:
|
|
9
|
+
*
|
|
10
|
+
* - D315: absence is claimed only from a list that ANSWERED. Pending and
|
|
11
|
+
* failed lists never mark an id `removed`.
|
|
12
|
+
* - D49: a read never destroys. Every selected id comes back as a row; the
|
|
13
|
+
* selection is changed only by the operator.
|
|
14
|
+
*
|
|
15
|
+
* Generic over {@link SelectionId} since D637: the system family's node and
|
|
16
|
+
* package pickers select string ids under the same two rules. It declares its
|
|
17
|
+
* own id type rather than importing the picker model's, so the byte-identical
|
|
18
|
+
* copies share no import specifier that would differ between them.
|
|
19
|
+
*
|
|
20
|
+
* TWO BYTE-IDENTICAL COPIES: `camstack/src/components/notifications/
|
|
21
|
+
* device-selection.ts` (viewer) and `packages/addon-admin-ui/src/pages/system/
|
|
22
|
+
* device-selection.ts` (admin). The viewer resolves `@camstack/types` from a
|
|
23
|
+
* published release, so a helper added to the workspace would not exist
|
|
24
|
+
* there. `scripts/check-device-selection-in-sync.ts` (camstack-server) fails
|
|
25
|
+
* the commit when the copies differ; edit both.
|
|
26
|
+
*/
|
|
27
27
|
/** A selected id: a device id, or a node id / package name (D637). */
|
|
28
28
|
export type SelectionId = number | string;
|
|
29
29
|
/** Where the camera list is: answered (data present), pending, or failed. */
|
|
30
|
-
export type DeviceListState =
|
|
30
|
+
export type DeviceListState = "answered" | "pending" | "failed";
|
|
31
31
|
/** The minimum a camera needs to name a selected row. */
|
|
32
32
|
export interface NamedDevice<Id extends SelectionId = number> {
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
readonly id: Id;
|
|
34
|
+
readonly name: string;
|
|
35
35
|
}
|
|
36
36
|
/** One selected id. `name` only when the answered list has it. */
|
|
37
37
|
export interface SelectedDeviceRow<Id extends SelectionId = number> {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
readonly id: Id;
|
|
39
|
+
readonly name?: string;
|
|
40
|
+
readonly removed: boolean;
|
|
41
41
|
}
|
|
42
42
|
/** The slice of a query result the state is derived from. */
|
|
43
43
|
export interface DeviceListQueryLike<Id extends SelectionId = number> {
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
readonly data: readonly NamedDevice<Id>[] | undefined;
|
|
45
|
+
readonly isError: boolean;
|
|
46
46
|
}
|
|
47
47
|
export declare function deviceListStateOf<Id extends SelectionId = number>(query: DeviceListQueryLike<Id>): DeviceListState;
|
|
48
48
|
export declare function resolveSelectedDevices<Id extends SelectionId = number>(selectedIds: readonly Id[], cameras: readonly NamedDevice<Id>[] | undefined, state: DeviceListState): SelectedDeviceRow<Id>[];
|
|
49
49
|
/**
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
50
|
+
* The selected ids a picker's DRAWN list does not contain, judged against the
|
|
51
|
+
* WHOLE fleet — never against the drawn list itself. A camera picker draws
|
|
52
|
+
* cameras, but a rule's devices can be a sensor picked on another surface: the
|
|
53
|
+
* camera list lacking it says nothing about whether it still exists. Each row
|
|
54
|
+
* is `removed` (the answered fleet lacks it), named (the fleet has it) or
|
|
55
|
+
* unnamed (the fleet has not answered).
|
|
56
|
+
*/
|
|
57
57
|
export declare function offListSelections<Id extends SelectionId = number>(selectedIds: readonly Id[], listed: readonly NamedDevice<Id>[] | undefined, fleet: readonly NamedDevice<Id>[] | undefined, fleetState: DeviceListState): SelectedDeviceRow<Id>[];
|
|
58
58
|
/** The "no cameras" hint: only an ANSWERED empty list with nothing selected. */
|
|
59
59
|
export declare function showsNoCamerasHint(state: DeviceListState, cameraCount: number, selectedCount: number): boolean;
|
|
60
60
|
/**
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
61
|
+
* The widening warning: on a picker where an empty selection means ALL
|
|
62
|
+
* devices, an empty selection that once held devices must say so.
|
|
63
|
+
*/
|
|
64
64
|
export declare function emptyDevicesWidens(emptyMeansAll: boolean, selectedCount: number, hadDevices: boolean): boolean;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
export { DevicePicker, type DevicePickerProps } from
|
|
2
|
-
export { DeviceFilterBar, typeLabel, type DeviceFilterBarGrouping, type DeviceFilterBarProps
|
|
3
|
-
export { fleetViewOf, type DeviceFleetView, type PickerFleetView
|
|
4
|
-
export { DEVICE_PICKER_GROUP_STORAGE_KEY, readStoredGroupBy, writeStoredGroupBy, useStoredGroupBy, usePickerSiteZones, type StoredGroupBy
|
|
5
|
-
export * from
|
|
6
|
-
export * from
|
|
7
|
-
export * from
|
|
8
|
-
export { DevicesFailedLine, DevicesLoadingLine, DevicesWidenWarning, orphanDeviceLabel, PICKER_NOUN_PLURAL, type PickerNoun, type PickerNounPlural
|
|
9
|
-
export { INPUT_SHELL, SelectedChip, type SelectedChipProps } from
|
|
1
|
+
export { DevicePicker, type DevicePickerProps } from "./DevicePicker.js";
|
|
2
|
+
export { DeviceFilterBar, typeLabel, type DeviceFilterBarGrouping, type DeviceFilterBarProps } from "./device-filter-bar.js";
|
|
3
|
+
export { fleetViewOf, type DeviceFleetView, type PickerFleetView } from "./device-fleet-view.js";
|
|
4
|
+
export { DEVICE_PICKER_GROUP_STORAGE_KEY, readStoredGroupBy, writeStoredGroupBy, useStoredGroupBy, usePickerSiteZones, type StoredGroupBy } from "./device-picker-grouping.js";
|
|
5
|
+
export * from "./device-picker-model.js";
|
|
6
|
+
export * from "./device-parent.js";
|
|
7
|
+
export * from "./device-selection.js";
|
|
8
|
+
export { DevicesFailedLine, DevicesLoadingLine, DevicesWidenWarning, orphanDeviceLabel, PICKER_NOUN_PLURAL, type PickerNoun, type PickerNounPlural } from "./device-selection-rows.js";
|
|
9
|
+
export { INPUT_SHELL, SelectedChip, type SelectedChipProps } from "./SelectedChip.js";
|
|
@@ -1,16 +1,17 @@
|
|
|
1
|
-
import { ConfigDeviceMultiSelectField, ConfigDeviceSelectField } from
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
1
|
+
import type { ConfigDeviceMultiSelectField, ConfigDeviceSelectField } from "@camstack/types";
|
|
2
|
+
import { type JSX } from "react";
|
|
3
|
+
import type { TranslationFn } from "./config-form-builder";
|
|
4
|
+
export declare function DeviceSelectField({ field, value, onChange, disabled, translationFn }: {
|
|
5
|
+
field: ConfigDeviceSelectField;
|
|
6
|
+
value: unknown;
|
|
7
|
+
onChange: (v: unknown) => void;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
translationFn?: TranslationFn;
|
|
10
|
+
}): JSX.Element | null;
|
|
11
|
+
export declare function DeviceMultiSelectField({ field, value, onChange, disabled, translationFn }: {
|
|
12
|
+
field: ConfigDeviceMultiSelectField;
|
|
13
|
+
value: unknown;
|
|
14
|
+
onChange: (v: unknown) => void;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
translationFn?: TranslationFn;
|
|
17
|
+
}): JSX.Element | null;
|