@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,19 +1,19 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { MultiSelectOption } from
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import { type MultiSelectOption } from "./multi-select";
|
|
3
3
|
export interface ResponsiveTypeFilterProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
readonly label: string;
|
|
5
|
+
readonly options: readonly MultiSelectOption[];
|
|
6
|
+
readonly selected: readonly string[];
|
|
7
|
+
readonly onChange: (selected: readonly string[]) => void;
|
|
8
8
|
}
|
|
9
9
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
export declare function ResponsiveTypeFilter({ label, options, selected, onChange
|
|
10
|
+
* Shared, multi-select type filter that adapts to its OWN available width
|
|
11
|
+
* (measured via ResizeObserver, NOT the viewport — the adoption modal and the
|
|
12
|
+
* Devices page differ at the same screen size):
|
|
13
|
+
* - wide enough → inline toggle chips (Devices page stays chips)
|
|
14
|
+
* - too narrow → the compact <MultiSelectDropdown> (adoption modal collapses)
|
|
15
|
+
*
|
|
16
|
+
* One component for every list consumer, so the filter looks and behaves the
|
|
17
|
+
* same everywhere and only the FORM changes with available room.
|
|
18
|
+
*/
|
|
19
|
+
export declare function ResponsiveTypeFilter({ label, options, selected, onChange }: ResponsiveTypeFilterProps): ReactNode;
|
|
@@ -1,43 +1,43 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
2
|
+
* There is ONE device list rendering: the table.
|
|
3
|
+
*
|
|
4
|
+
* A cards view existed alongside it and the operator chose between them. It is
|
|
5
|
+
* gone — every surface is a table now, so `view` is no longer part of this
|
|
6
|
+
* state and no longer written to the URL or to localStorage. A legacy
|
|
7
|
+
* `?view=cards` link still opens: the parameter is simply not read, and the
|
|
8
|
+
* next write drops it from the URL.
|
|
9
|
+
*
|
|
10
|
+
* The DataTable's own phone rendering is a different thing entirely and is
|
|
11
|
+
* untouched (`data-table-layout.ts`): that is how ONE table degrades on a
|
|
12
|
+
* narrow screen, not a view the operator picks.
|
|
13
|
+
*/
|
|
14
14
|
export interface DeviceListUrlState {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
15
|
+
readonly page: number;
|
|
16
|
+
/**
|
|
17
|
+
* Selected integration ids. Multi-select: empty array = no integration
|
|
18
|
+
* filter (show all). Serialised in the URL / localStorage as a single
|
|
19
|
+
* comma-joined `addon` value so existing single-value links keep working.
|
|
20
|
+
*/
|
|
21
|
+
readonly addons: readonly string[];
|
|
22
|
+
/**
|
|
23
|
+
* Selected device types. Multi-select: empty array = no type filter.
|
|
24
|
+
* Serialised in the URL / localStorage as a single comma-joined `type`
|
|
25
|
+
* value so existing single-value links keep working.
|
|
26
|
+
*/
|
|
27
|
+
readonly types: readonly string[];
|
|
28
|
+
readonly q: string;
|
|
29
29
|
}
|
|
30
30
|
export interface UseDeviceListUrlStateOptions {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
readonly scope: "root" | "nested";
|
|
32
|
+
/** LocalStorage key prefix, e.g. `'devices'` → `camstack:devices:lastFilters`. */
|
|
33
|
+
readonly lsKey: string;
|
|
34
34
|
}
|
|
35
35
|
export interface UseDeviceListUrlStateResult {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
readonly state: DeviceListUrlState;
|
|
37
|
+
readonly setPage: (page: number) => void;
|
|
38
|
+
readonly setAddons: (addons: readonly string[]) => void;
|
|
39
|
+
readonly setTypes: (types: readonly string[]) => void;
|
|
40
|
+
readonly setQ: (q: string) => void;
|
|
41
|
+
readonly clearFilters: () => void;
|
|
42
42
|
}
|
|
43
43
|
export declare function useDeviceListUrlState(options: UseDeviceListUrlStateOptions): UseDeviceListUrlStateResult;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import { LucideIcon } from
|
|
2
|
-
import { DeviceType, DeviceRole } from
|
|
3
|
-
import { MultiSelectOption } from
|
|
1
|
+
import type { LucideIcon } from "lucide-react";
|
|
2
|
+
import { DeviceType, DeviceRole } from "@camstack/types";
|
|
3
|
+
import type { MultiSelectOption } from "./device-list/multi-select";
|
|
4
4
|
/**
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
5
|
+
* Single source of truth for rendering a device TYPE or ROLE: its icon + label.
|
|
6
|
+
*
|
|
7
|
+
* Both maps are `Record<DeviceType | DeviceRole, …>`, so adding a new enum
|
|
8
|
+
* member makes the object literal incomplete and the build FAILS until the new
|
|
9
|
+
* type/role is given an icon + label here. That is the whole point — UI never
|
|
10
|
+
* silently falls back to a generic glyph for a freshly-added type/role.
|
|
11
|
+
*
|
|
12
|
+
* Lives in `@camstack/ui-library` because the icons are `lucide-react`
|
|
13
|
+
* components; the labels are the user-facing defaults (wire i18n at the call
|
|
14
|
+
* site if a translation is needed).
|
|
15
|
+
*/
|
|
16
16
|
export interface DeviceTypeMeta {
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
readonly icon: LucideIcon;
|
|
18
|
+
readonly label: string;
|
|
19
19
|
}
|
|
20
20
|
export interface DeviceRoleMeta {
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
readonly icon: LucideIcon;
|
|
22
|
+
readonly label: string;
|
|
23
23
|
}
|
|
24
24
|
export declare const DEVICE_TYPE_META: Record<DeviceType, DeviceTypeMeta>;
|
|
25
25
|
export declare const DEVICE_ROLE_META: Record<DeviceRole, DeviceRoleMeta>;
|
|
@@ -28,36 +28,36 @@ export declare function deviceTypeMeta(type: DeviceType): DeviceTypeMeta;
|
|
|
28
28
|
/** Meta for a known `DeviceRole`. */
|
|
29
29
|
export declare function deviceRoleMeta(role: DeviceRole): DeviceRoleMeta;
|
|
30
30
|
/**
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
31
|
+
* Runtime-string-safe lookup: device data crosses process / network boundaries
|
|
32
|
+
* as plain strings, so an unrecognised value falls back to the `Generic` meta
|
|
33
|
+
* instead of throwing.
|
|
34
|
+
*
|
|
35
|
+
* This also guards mixed-version module-federation loads where the host
|
|
36
|
+
* `@camstack/types` enum has a new member before the loaded ui-library bundle
|
|
37
|
+
* has the matching `DEVICE_TYPE_META` entry.
|
|
38
|
+
*/
|
|
39
39
|
export declare function deviceTypeMetaOf(type: string): DeviceTypeMeta;
|
|
40
40
|
/** Runtime-string-safe role lookup; unknown roles fall back to `GenericSensor`. */
|
|
41
41
|
export declare function deviceRoleMetaOf(role: string): DeviceRoleMeta;
|
|
42
42
|
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
43
|
+
* Icons an operator may pick for a per-device `display.icon` override (and for
|
|
44
|
+
* a per-role default), keyed by a stable kebab-case name. Named imports only —
|
|
45
|
+
* no dynamic indexing into lucide, so the bundle carries exactly this set.
|
|
46
|
+
* Unknown keys resolve to `undefined` (caller falls through to the next level).
|
|
47
|
+
*
|
|
48
|
+
* The vocabulary is the one the VIEWER draws from too (its own icon module,
|
|
49
|
+
* keyed by these same strings): a key added here that the phone cannot draw
|
|
50
|
+
* falls through to the next resolution level there, which reads as "my change
|
|
51
|
+
* did nothing". So the KEY is the contract — a stable kebab-case string, never
|
|
52
|
+
* a glyph identity — and `device-meta.test.ts` pins that every key resolves
|
|
53
|
+
* and that the set never loses a key an operator may already have persisted.
|
|
54
|
+
*
|
|
55
|
+
* Grouped by what an operator is naming: a device, a light or appliance, a
|
|
56
|
+
* sensor or the weather it reads, a room, or what moves through it. `gauge2`
|
|
57
|
+
* is a legacy alias kept for rows that persisted it.
|
|
58
|
+
*/
|
|
59
59
|
export declare const DISPLAY_ICON_REGISTRY: Readonly<Record<string, LucideIcon>>;
|
|
60
60
|
/** Resolve a `display.icon` name to a lucide component, or `undefined` when the
|
|
61
|
-
|
|
61
|
+
* name is not in the curated `DISPLAY_ICON_REGISTRY`. */
|
|
62
62
|
export declare function resolveDisplayIcon(name: string): LucideIcon | undefined;
|
|
63
63
|
export declare function allDeviceTypeFilterOptions(): readonly MultiSelectOption[];
|
|
@@ -1,35 +1,74 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The smart device picker every notification editor uses: the selection as
|
|
3
|
+
* compact chips, and a searchable, grouped list opened only to change it.
|
|
4
|
+
*
|
|
5
|
+
* It replaces the long checklists (a rule's devices, a system rule's
|
|
6
|
+
* include/exclude, the timelapse and digest cameras, the alarm's non-blocking
|
|
7
|
+
* openings) with the same UX the viewer's picker has (D636). The decisions are
|
|
8
|
+
* `device-picker-model.ts` (shared with the viewer, byte-identical); what a
|
|
9
|
+
* selected id the list does not draw IS — removed, named, or unknown — is
|
|
10
|
+
* `device-selection.ts`, and so are the two rules that shaped it:
|
|
11
|
+
*
|
|
12
|
+
* - D315: only a list that ANSWERED may call an id removed or say "no
|
|
13
|
+
* cameras"; a pending list is a loading line and names nothing absent.
|
|
14
|
+
* - D49: a read never drops a selected id; every one is a chip the operator
|
|
15
|
+
* can remove, and only the operator removes one.
|
|
16
|
+
*
|
|
17
|
+
* It reads nothing. It filters the list its caller already holds, and judges
|
|
18
|
+
* an off-list id against the caller's fleet (a camera picker draws cameras,
|
|
19
|
+
* and a selected sensor missing from it still exists).
|
|
20
|
+
*
|
|
21
|
+
* Generic over the id since D637: the system family's node and package pickers
|
|
22
|
+
* (`scope-pickers.tsx`) are this picker over string ids, with their own noun
|
|
23
|
+
* and group titles.
|
|
24
|
+
*
|
|
25
|
+
* Bounded at hundreds of devices of one type: big groups start collapsed, the
|
|
26
|
+
* rows are rendered a page at a time with "Show N more", and the chips stop at
|
|
27
|
+
* `PICKER_CHIP_LIMIT` with a "+N more". `showAll` turns all three off, and the
|
|
28
|
+
* list is always open: the rule editor's Devices tab exists to show every
|
|
29
|
+
* device (R15, D690).
|
|
30
|
+
*
|
|
31
|
+
* "Group by" (Zone | Location | None) sits at the top of a DEVICE picker's
|
|
32
|
+
* list only — the node and package pickers keep their own groups, and so does
|
|
33
|
+
* the CLASS picker (D641), whose groups are the taxonomy's categories. The choice
|
|
34
|
+
* is remembered in `localStorage`, and the site zones are read whenever the
|
|
35
|
+
* panel is open (the Zone filter needs them; `device-picker-grouping.ts`); a zone read that has
|
|
36
|
+
* not answered groups by location with a one-line note, never "No zone"
|
|
37
|
+
* (D315).
|
|
38
|
+
*/
|
|
39
|
+
import { type JSX } from "react";
|
|
40
|
+
import type { PickerFleetView } from "./device-fleet-view";
|
|
41
|
+
import { type PickerGroup, type PickerId, type PickerItem } from "./device-picker-model";
|
|
42
|
+
import { type DeviceListState } from "./device-selection";
|
|
43
|
+
import { type PickerNoun } from "./device-selection-rows";
|
|
5
44
|
export interface DevicePickerProps<Id extends PickerId = number> {
|
|
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
|
-
|
|
45
|
+
/** The devices the list DRAWS — the caller's answered list, `[]` otherwise. */
|
|
46
|
+
readonly devices: readonly PickerItem<Id>[];
|
|
47
|
+
/** Whether `devices` ANSWERED (D315). */
|
|
48
|
+
readonly listState: DeviceListState;
|
|
49
|
+
/** What an off-list selected id is judged against. Defaults to the list. */
|
|
50
|
+
readonly fleet?: PickerFleetView<Id>;
|
|
51
|
+
readonly value: readonly Id[];
|
|
52
|
+
readonly onChange: (next: Id[]) => void;
|
|
53
|
+
/** Empty selection means EVERY device: say so, and warn when it widens. */
|
|
54
|
+
readonly emptyMeansAll?: boolean;
|
|
55
|
+
/** Whether the saved rule had devices — the widening warning survives a remount. */
|
|
56
|
+
readonly savedHadDevices?: boolean;
|
|
57
|
+
/** What the list holds, for its sentences. */
|
|
58
|
+
readonly noun?: PickerNoun;
|
|
59
|
+
/** A group header's title. Defaults to "<type> · <room>". */
|
|
60
|
+
readonly groupTitle?: (group: PickerGroup<Id>) => string;
|
|
61
|
+
/** What an empty selection reads as, when it does not mean "every device". */
|
|
62
|
+
readonly emptyLabel?: string;
|
|
63
|
+
/** A per-device note drawn beside the name (the alarm's "not covered"). */
|
|
64
|
+
readonly annotate?: (id: Id) => string | undefined;
|
|
65
|
+
readonly disabled?: boolean;
|
|
66
|
+
readonly testId?: string;
|
|
67
|
+
/**
|
|
68
|
+
* List EVERYTHING, always open: no Edit/Done toggle, no "+N more" chips, no
|
|
69
|
+
* "Show N more" rows, every group open until the operator folds one. For a
|
|
70
|
+
* surface whose whole job is the list — the rule's Devices tab (R15).
|
|
71
|
+
*/
|
|
72
|
+
readonly showAll?: boolean;
|
|
34
73
|
}
|
|
35
|
-
export declare function DevicePicker<Id extends PickerId = number>({ devices: devicesIn, listState, fleet, value, onChange, emptyMeansAll, savedHadDevices, noun, groupTitle, emptyLabel, annotate, disabled, testId, showAll
|
|
74
|
+
export declare function DevicePicker<Id extends PickerId = number>({ devices: devicesIn, listState, fleet, value, onChange, emptyMeansAll, savedHadDevices, noun, groupTitle, emptyLabel, annotate, disabled, testId, showAll }: DevicePickerProps<Id>): JSX.Element;
|
|
@@ -1,14 +1,15 @@
|
|
|
1
|
+
import { type JSX } from "react";
|
|
1
2
|
/** The search box's shell — shared with multiselect fields that mirror this picker. */
|
|
2
3
|
export declare const INPUT_SHELL = "flex items-center gap-1.5 rounded-md border border-border bg-background px-2 py-1.5 focus-within:border-primary focus-within:ring-1 focus-within:ring-primary/30";
|
|
3
4
|
export interface SelectedChipProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
readonly label: string;
|
|
6
|
+
readonly onRemove?: () => void;
|
|
7
|
+
/** A selection the hub no longer has — drawn in warning colour. */
|
|
8
|
+
readonly warning?: boolean;
|
|
9
|
+
readonly iconId?: string;
|
|
10
|
+
/** Brand / raster icon URL (e.g. notifier kind icon). */
|
|
11
|
+
readonly iconUrl?: string;
|
|
12
|
+
readonly testId?: string;
|
|
12
13
|
}
|
|
13
14
|
/** One selected entry as a removable chip. */
|
|
14
|
-
export declare function SelectedChip({ label, onRemove, warning, iconId, iconUrl, testId
|
|
15
|
+
export declare function SelectedChip({ label, onRemove, warning, iconId, iconUrl, testId }: SelectedChipProps): JSX.Element;
|
|
@@ -1,25 +1,26 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { type JSX } from "react";
|
|
2
|
+
import { type PickerFacetOption, type PickerFilters, type PickerGroupBy, type PickerZonesFallback, type PickerZonesRead } from "./device-picker-model";
|
|
2
3
|
/** The Group-by control's inputs, as `DevicePicker.tsx` passes them. */
|
|
3
4
|
export interface DeviceFilterBarGrouping {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
readonly groupBy: PickerGroupBy;
|
|
6
|
+
readonly onGroupByChange: (next: PickerGroupBy) => void;
|
|
7
|
+
/** Set when Zone mode is showing locations because the zones had not answered. */
|
|
8
|
+
readonly fallback: PickerZonesFallback | null;
|
|
8
9
|
}
|
|
9
10
|
export interface DeviceFilterBarProps {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
11
|
+
readonly filters: PickerFilters;
|
|
12
|
+
readonly onFiltersChange: (next: PickerFilters) => void;
|
|
13
|
+
readonly typeOptions: readonly PickerFacetOption[];
|
|
14
|
+
readonly zoneOptions: readonly PickerFacetOption[];
|
|
15
|
+
readonly locationOptions: readonly PickerFacetOption[];
|
|
16
|
+
/** The zones read — decides whether the Zone dropdown is enabled and what it says. */
|
|
17
|
+
readonly zones: PickerZonesRead;
|
|
18
|
+
/** Group by, when the list offers it (the device picker and the alarm table do). */
|
|
19
|
+
readonly grouping?: DeviceFilterBarGrouping;
|
|
20
|
+
readonly searchPlaceholder: string;
|
|
21
|
+
readonly searchLabel: string;
|
|
22
|
+
readonly disabled?: boolean;
|
|
22
23
|
}
|
|
23
24
|
/** "media-player" → "Media player"; null → "No type". */
|
|
24
25
|
export declare function typeLabel(type: string | null): string;
|
|
25
|
-
export declare function DeviceFilterBar({ filters, onFiltersChange, typeOptions, zoneOptions, locationOptions, zones, grouping, searchPlaceholder, searchLabel, disabled
|
|
26
|
+
export declare function DeviceFilterBar({ filters, onFiltersChange, typeOptions, zoneOptions, locationOptions, zones, grouping, searchPlaceholder, searchLabel, disabled }: DeviceFilterBarProps): JSX.Element;
|
|
@@ -1,7 +1,15 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* What an admin picker judges a selected id against: the WHOLE fleet, with
|
|
3
|
+
* whether it answered. Never the list the picker draws — a camera picker
|
|
4
|
+
* draws cameras, and a selected sensor missing from it still exists.
|
|
5
|
+
*
|
|
6
|
+
* Generic over the id since D637: the system family's node and package
|
|
7
|
+
* pickers judge string ids the same way (`scope-pickers.helpers.ts`).
|
|
8
|
+
*/
|
|
9
|
+
import { type DeviceListQueryLike, type DeviceListState, type NamedDevice, type SelectionId } from "./device-selection";
|
|
2
10
|
export interface PickerFleetView<Id extends SelectionId = number> {
|
|
3
|
-
|
|
4
|
-
|
|
11
|
+
readonly state: DeviceListState;
|
|
12
|
+
readonly devices: readonly NamedDevice<Id>[] | undefined;
|
|
5
13
|
}
|
|
6
14
|
export type DeviceFleetView = PickerFleetView<number>;
|
|
7
15
|
export declare function fleetViewOf(query: DeviceListQueryLike): DeviceFleetView;
|
|
@@ -1,38 +1,38 @@
|
|
|
1
1
|
/**
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
2
|
+
* A device's CONTAINER / hub name, resolved from a fleet listing.
|
|
3
|
+
*
|
|
4
|
+
* Pickers list devices by name, and on a real fleet that is not enough:
|
|
5
|
+
* many sensors share a name ("Temperatura"). The container is what tells
|
|
6
|
+
* them apart, and `parentDeviceId` already rides the slim projection —
|
|
7
|
+
* so this costs no query, only the lookup.
|
|
8
|
+
*
|
|
9
|
+
* ONE level, deliberately: the operator's question is "which thing is this
|
|
10
|
+
* attached to", not "what is the full ancestry".
|
|
11
|
+
*/
|
|
12
12
|
/** The fields this needs. Any listing row satisfies it. */
|
|
13
13
|
export interface ParentResolvable {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
readonly id: number;
|
|
15
|
+
readonly name: string;
|
|
16
|
+
readonly parentDeviceId: number | null;
|
|
17
17
|
}
|
|
18
18
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
* Map of `deviceId → container label`, absent for a top-level device.
|
|
20
|
+
*
|
|
21
|
+
* A parent that is NOT in the listing resolves to `#<id>` rather than to
|
|
22
|
+
* nothing: the listing can be filtered or partial, and rendering nothing would
|
|
23
|
+
* say "this is top-level", which is a different claim and a wrong one.
|
|
24
|
+
*/
|
|
25
25
|
export declare function resolveParentNames(devices: readonly ParentResolvable[]): ReadonlyMap<number, string>;
|
|
26
26
|
/** Second-line hint: `in <parent>` when the device lives under a hub/container. */
|
|
27
27
|
export declare function parentDetailOf(parentName: string | undefined): string | undefined;
|
|
28
28
|
/**
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
* Fill unset `detail` with `in <parent>` from {@link parentDeviceId} on the
|
|
30
|
+
* same list. Callers that already set `detail` keep it. String-id pickers
|
|
31
|
+
* (nodes, packages) are returned unchanged.
|
|
32
|
+
*/
|
|
33
33
|
export declare function withResolvedParentDetail<T extends {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
readonly id: number | string;
|
|
35
|
+
readonly name: string;
|
|
36
|
+
readonly detail?: string;
|
|
37
|
+
readonly parentDeviceId?: number | null;
|
|
38
38
|
}>(devices: readonly T[]): readonly T[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PickerGroupBy, PickerZonesRead } from
|
|
1
|
+
import { type PickerGroupBy, type PickerZonesRead } from "./device-picker-model";
|
|
2
2
|
export declare const DEVICE_PICKER_GROUP_STORAGE_KEY = "camstack.admin.device-picker.group-by";
|
|
3
3
|
/** The stored choice; the default when storage is absent, throws or is unreadable. */
|
|
4
4
|
export declare function readStoredGroupBy(): PickerGroupBy;
|
|
@@ -6,8 +6,8 @@ export declare function readStoredGroupBy(): PickerGroupBy;
|
|
|
6
6
|
export declare function writeStoredGroupBy(next: PickerGroupBy): void;
|
|
7
7
|
/** The group-by choice, seeded from and written to `localStorage`. */
|
|
8
8
|
export interface StoredGroupBy {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
readonly groupBy: PickerGroupBy;
|
|
10
|
+
readonly setGroupBy: (next: PickerGroupBy) => void;
|
|
11
11
|
}
|
|
12
12
|
export declare function useStoredGroupBy(): StoredGroupBy;
|
|
13
13
|
/** The site zones, with whether the read ANSWERED — read only while `enabled`. */
|