@camstack/ui-library 1.2.257 → 1.2.259
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 +124 -69
- package/dist/index.d.ts +31 -27
- package/dist/index.js +124 -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,106 +1,127 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
/**
|
|
2
|
+
* SensorValueAtom — read-only badge for Sensor / Presence device rows.
|
|
3
|
+
*
|
|
4
|
+
* Renders a compact inline badge showing the device's current value:
|
|
5
|
+
* - typed numeric roles (temperature/humidity/ambient-light/pressure):
|
|
6
|
+
* value + canonical unit from ROLE_DESCRIPTOR (not sourceInfo)
|
|
7
|
+
* - generic numeric-sensor role: value + unit from the SLICE (populated
|
|
8
|
+
* live by the HA provider from state.attributes.unit_of_measurement)
|
|
9
|
+
* - binary roles: on/off label coloured per state
|
|
10
|
+
* - presence: Home / Away / zone name
|
|
11
|
+
*
|
|
12
|
+
* Returns null when no descriptor matches the role, or when the slice
|
|
13
|
+
* has not yet landed (binding still resolving, or cap unbound).
|
|
14
|
+
*
|
|
15
|
+
* The proxy state is accessed via a typed per-role accessor stored in
|
|
16
|
+
* `SensorDescriptor.getSliceHandle`. Each accessor is a concrete arrow
|
|
17
|
+
* into the typed `DeviceProxy['state']` shape — no dynamic string
|
|
18
|
+
* indexing. The shared handle type is `SliceHandle<unknown>` so the
|
|
19
|
+
* discriminated union can hold all three descriptor kinds without casts
|
|
20
|
+
* at the call site; narrowing occurs after `useDeviceStateSlice`.
|
|
21
|
+
*/
|
|
22
|
+
import type { ReactNode } from "react";
|
|
23
|
+
import type { DeviceProxy, SliceHandle } from "@camstack/types";
|
|
24
|
+
import { type UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
|
|
25
|
+
import { type ControlDateTimeFormat } from "../../lib/format-control-datetime";
|
|
26
|
+
import type { DeviceItemDevice } from "../device-item/helpers";
|
|
6
27
|
interface NumericDescriptor {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
28
|
+
readonly kind: "numeric";
|
|
29
|
+
/** Field in the slice that holds the numeric value. */
|
|
30
|
+
readonly field: string;
|
|
31
|
+
/** Canonical display unit for TYPED roles (temperature → '°C', humidity → '%',
|
|
32
|
+
* ambient-light → 'lx', pressure → 'hPa'). When present the UI renders this
|
|
33
|
+
* directly WITHOUT consulting the slice or sourceInfo.
|
|
34
|
+
* For the generic `numeric-sensor` role this is `undefined` — the unit is
|
|
35
|
+
* read live from the slice (`slice.unit`). */
|
|
36
|
+
readonly canonicalUnit?: string;
|
|
37
|
+
/** Accessor into DeviceProxy['state'] — returns a typed slice handle. */
|
|
38
|
+
readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
|
|
18
39
|
}
|
|
19
40
|
interface BinaryDescriptor {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
readonly kind: "binary";
|
|
42
|
+
/** Field in the slice that holds the boolean trigger. */
|
|
43
|
+
readonly field: string;
|
|
44
|
+
/** Label shown when the boolean field is truthy. */
|
|
45
|
+
readonly onLabel: string;
|
|
46
|
+
/** Label shown when the boolean field is falsy. */
|
|
47
|
+
readonly offLabel: string;
|
|
48
|
+
readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
|
|
28
49
|
}
|
|
29
50
|
interface PresenceDescriptor {
|
|
30
|
-
|
|
31
|
-
|
|
51
|
+
readonly kind: "presence";
|
|
52
|
+
readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
|
|
32
53
|
}
|
|
33
54
|
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
55
|
+
* String-valued sensor whose slice holds `{ value: string, lastFetchedAt }`.
|
|
56
|
+
* Used for HA free-text sensors (IP address, SSID, firmware version, …) that
|
|
57
|
+
* have no numeric device_class and whose state is a plain string.
|
|
58
|
+
*/
|
|
38
59
|
interface StringDescriptor {
|
|
39
|
-
|
|
40
|
-
|
|
60
|
+
readonly kind: "string";
|
|
61
|
+
readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
|
|
41
62
|
}
|
|
42
63
|
/**
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
64
|
+
* Date / timestamp sensor whose slice holds `{ value: string, format? }`
|
|
65
|
+
* carrying a raw ISO string (e.g. '2025-12-02T09:36:12+00:00'). Rendered
|
|
66
|
+
* locale-formatted via `formatControlDateTime`. The slice's own `format` (seeded
|
|
67
|
+
* by the HA provider from the entity's `device_class` — `timestamp` → 'datetime',
|
|
68
|
+
* `date` → 'date', time-only → 'time') selects the shape; `descriptor.format` is
|
|
69
|
+
* the fallback for slices adopted before the field was threaded ('datetime').
|
|
70
|
+
*/
|
|
50
71
|
interface DateTimeDescriptor {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
72
|
+
readonly kind: "datetime";
|
|
73
|
+
readonly format: ControlDateTimeFormat;
|
|
74
|
+
readonly getSliceHandle: (state: DeviceProxy["state"]) => SliceHandle<unknown>;
|
|
54
75
|
}
|
|
55
76
|
export type SensorDescriptor = NumericDescriptor | BinaryDescriptor | PresenceDescriptor | StringDescriptor | DateTimeDescriptor;
|
|
56
77
|
/**
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
78
|
+
* Binary fallback for the `battery-sensor` role.
|
|
79
|
+
*
|
|
80
|
+
* HA assigns role `battery-sensor` to BOTH numeric battery entities
|
|
81
|
+
* (`sensor.*` device_class=battery → cap `numeric-sensor`) AND binary battery
|
|
82
|
+
* entities (`binary_sensor.*` device_class=battery → cap `binary`, e.g. a
|
|
83
|
+
* HomeMatic `LOW_BAT` flag). When the numeric slice is absent the binary slice
|
|
84
|
+
* is rendered instead, with battery-specific polarity: `on:true` means LOW
|
|
85
|
+
* (bad → warning style + "Low"), `on:false` means Normal (neutral).
|
|
86
|
+
*/
|
|
66
87
|
export declare const BINARY_BATTERY_DESCRIPTOR: BinaryDescriptor;
|
|
67
88
|
/** True for the role that can resolve to either a numeric or a binary slice. */
|
|
68
89
|
export declare function isBatterySensorRole(role: string | null | undefined): boolean;
|
|
69
90
|
/**
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
91
|
+
* A numeric slice counts as "present" only when it carries a real numeric value
|
|
92
|
+
* at the descriptor field — a cold-start slice (`{ value: 0, lastFetchedAt: 0 }`)
|
|
93
|
+
* or a binary slice (no numeric field) does NOT, so the binary fallback wins.
|
|
94
|
+
*/
|
|
74
95
|
export declare function hasBatteryNumericValue(slice: unknown, field: string): boolean;
|
|
75
96
|
/**
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
97
|
+
* Keyed by DeviceRole string value. Every entry maps a role to the
|
|
98
|
+
* exact proxy state accessor + rendering instructions. The accessor
|
|
99
|
+
* avoids dynamic string indexing — each one is a concrete property
|
|
100
|
+
* access on the typed `DeviceProxy['state']` shape.
|
|
101
|
+
*
|
|
102
|
+
* Canonical unit rules:
|
|
103
|
+
* - Typed roles (temperature/humidity/ambient-light/pressure/power/energy)
|
|
104
|
+
* carry a `canonicalUnit` constant. The slice is normalised to one unit
|
|
105
|
+
* so no per-device lookup is needed.
|
|
106
|
+
* - Generic `numeric-sensor` has no `canonicalUnit`. The unit is read live
|
|
107
|
+
* from the slice (`slice.unit`) as populated by the provider from the
|
|
108
|
+
* upstream source on every state push.
|
|
109
|
+
*/
|
|
89
110
|
export declare const ROLE_DESCRIPTOR: Record<string, SensorDescriptor>;
|
|
90
111
|
export interface StringSliceValue {
|
|
91
|
-
|
|
112
|
+
readonly value: string;
|
|
92
113
|
}
|
|
93
114
|
export declare function isStringSliceValue(v: unknown): v is StringSliceValue;
|
|
94
115
|
/**
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
116
|
+
* The enum-sensor slice carries an optional `format` ('date' | 'time' |
|
|
117
|
+
* 'datetime') for `DateTimeSensor`-role sensors. Read it off the live slice so
|
|
118
|
+
* each sensor renders its true shape; returns `undefined` when absent (older
|
|
119
|
+
* adoptions) so the caller falls back to the descriptor default.
|
|
120
|
+
*/
|
|
100
121
|
export declare function readSliceDateTimeFormat(slice: unknown): ControlDateTimeFormat | undefined;
|
|
101
122
|
export interface SensorValueAtomProps {
|
|
102
|
-
|
|
103
|
-
|
|
123
|
+
readonly trpc: UseDeviceProxyTrpc;
|
|
124
|
+
readonly device: DeviceItemDevice;
|
|
104
125
|
}
|
|
105
126
|
export declare function SensorValueAtom({ trpc, device }: SensorValueAtomProps): ReactNode;
|
|
106
127
|
export {};
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { DeviceControlProps } from
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
3
3
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
4
|
+
* SwitchHeroCard — large tap-toggle hero for Switch / Siren devices.
|
|
5
|
+
*
|
|
6
|
+
* Renders (Spec §3):
|
|
7
|
+
* - A power glyph tinted by on/off state (success when on, muted when off).
|
|
8
|
+
* - A large TAP TOGGLE for on/off — a single tap flips state. This is NOT a
|
|
9
|
+
* SlideToggle; slide-to-confirm is reserved for safety-gated locks ONLY.
|
|
10
|
+
*
|
|
11
|
+
* Cap-gated on `switch` — returns null when the device has no switch cap.
|
|
12
|
+
*/
|
|
13
13
|
export declare function SwitchHeroCard({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { ControlPanelProps } from
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { ControlPanelProps } from "./types";
|
|
3
3
|
export declare function SwitchPanel({ trpc, deviceId, optimistic }: ControlPanelProps): ReactNode;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
2
|
/**
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
3
|
+
* TapToggle — plain tap-to-toggle on/off control.
|
|
4
|
+
*
|
|
5
|
+
* Spec §3: everyday on/off (switch, light, fan) uses a plain TAP TOGGLE.
|
|
6
|
+
* slide-to-confirm is reserved for safety-gated actions (lock) ONLY. This
|
|
7
|
+
* component must NEVER be built on `SlideToggle` — a single tap flips state.
|
|
8
|
+
*
|
|
9
|
+
* Presentational: the caller owns the cap mutation + optimistic update via
|
|
10
|
+
* `onToggle`. Mirrors the `SwitchPanel` button treatment at hero scale.
|
|
11
|
+
*/
|
|
12
12
|
export interface TapToggleProps {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
readonly on: boolean;
|
|
14
|
+
readonly busy: boolean;
|
|
15
|
+
readonly onToggle: () => void;
|
|
16
16
|
}
|
|
17
17
|
export declare function TapToggle({ on, busy, onToggle }: TapToggleProps): ReactNode;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { DeviceControlProps } from
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
3
3
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
export declare function ThermostatHeroCard({ trpc, deviceId, features: _features, optimistic
|
|
4
|
+
* ThermostatHeroCard — circular gauge hero for thermostat / HVAC devices.
|
|
5
|
+
*
|
|
6
|
+
* Renders:
|
|
7
|
+
* - SVG ring gauge: track + fill arc representing the setpoint fraction
|
|
8
|
+
* - Centered current temperature (large, prominent)
|
|
9
|
+
* - ArcKnob(s) at the setpoint fraction(s) riding the ring
|
|
10
|
+
* - Single knob for heat / cool / auto / dry modes
|
|
11
|
+
* - Two knobs (low + high) with a band fill for heat_cool mode
|
|
12
|
+
* - Stepper (single) or "Low / High" display (range) for the setpoint
|
|
13
|
+
* - Mode select
|
|
14
|
+
*
|
|
15
|
+
* Cap-gated: returns null when the device has no climateControl cap.
|
|
16
|
+
*/
|
|
17
|
+
export declare function ThermostatHeroCard({ trpc, deviceId, features: _features, optimistic }: DeviceControlProps): ReactNode;
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { UseDeviceProxyTrpc } from
|
|
1
|
+
import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
|
|
2
2
|
/** Shared props for every control panel. `layout` selects the compact (row
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
* popover) vs full (detail tab) presentation. `features` gates sub-controls
|
|
4
|
+
* (e.g. cover position/tilt, fan speed/preset). */
|
|
5
5
|
export interface ControlPanelProps {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
6
|
+
readonly trpc: UseDeviceProxyTrpc;
|
|
7
|
+
readonly deviceId: number;
|
|
8
|
+
readonly features: readonly string[] | undefined;
|
|
9
|
+
readonly layout: "compact" | "full";
|
|
10
|
+
/** Enable optimistic UI mode (default: true). Set to false to disable. */
|
|
11
|
+
readonly optimistic?: boolean;
|
|
12
12
|
}
|
|
13
13
|
/** Cap names whose presence (bound on a device) means it has a control surface.
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
* Single source of truth shared by the row registry and the detail Controls tab
|
|
15
|
+
* so the two never drift. */
|
|
16
16
|
export declare const CONTROL_CAP_NAMES: readonly ["cover", "lock-control", "switch", "brightness", "fan-control", "climate-control", "media-player", "control", "pet-feeder"];
|
|
17
17
|
export type ControlCapName = (typeof CONTROL_CAP_NAMES)[number];
|
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
import { ReactNode } from 'react';
|
|
2
|
-
import { DeviceControlProps } from './control-registry';
|
|
3
1
|
/**
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
* Firmware/software Update controls for a `DeviceType.Update` device.
|
|
3
|
+
*
|
|
4
|
+
* Reads the `update` cap status slice (currentVersion / availableVersion /
|
|
5
|
+
* updatable / state / inProgress) and renders:
|
|
6
|
+
* - InlineControl (device-list row): a compact state badge — "Update
|
|
7
|
+
* available" (actionable) / "Installing…" / current version (up to date).
|
|
8
|
+
* - HeroCard (device-detail hero): the version transition + an Install button
|
|
9
|
+
* that calls `update.installUpdate()` when an update is available.
|
|
10
|
+
*
|
|
11
|
+
* Mirrors the cover/sensor controls' `useDeviceCapability` pattern so the row
|
|
12
|
+
* and the hero never diverge.
|
|
13
|
+
*/
|
|
14
|
+
import type { ReactNode } from "react";
|
|
15
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
16
|
+
/**
|
|
17
|
+
* UpdateInlineControl — compact firmware state for a device-list row.
|
|
18
|
+
*/
|
|
6
19
|
export declare function UpdateInlineControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
|
|
7
20
|
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
21
|
+
* UpdateHeroCard — version transition + Install action for the device-detail
|
|
22
|
+
* hero area.
|
|
23
|
+
*/
|
|
11
24
|
export declare function UpdateHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
|
|
@@ -1,36 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Robot-vacuum controls for a `DeviceType.Vacuum` device.
|
|
3
|
+
*
|
|
4
|
+
* Reads the `vacuum-control` cap status slice (state / batteryLevel /
|
|
5
|
+
* fanSpeed / availableFanSpeeds) and renders:
|
|
6
|
+
* - VacuumInlineControl (device-list row): compact Start / Pause /
|
|
7
|
+
* Return-to-base buttons with state-aware highlight + a battery %
|
|
8
|
+
* badge.
|
|
9
|
+
* - VacuumHeroCard (device-detail hero): a state glyph + label, the
|
|
10
|
+
* full action set (Start / Pause / Stop / Return / Locate), a
|
|
11
|
+
* fan-speed selector built from `availableFanSpeeds`, and the
|
|
12
|
+
* battery readout.
|
|
13
|
+
*
|
|
14
|
+
* Mirrors the cover/update controls' `useDeviceCapability` pattern so the
|
|
15
|
+
* row and hero never diverge. Buttons are gated on `available`.
|
|
16
|
+
*/
|
|
17
|
+
import type { ReactNode } from "react";
|
|
18
|
+
import type { VacuumState, TankStatus } from "@camstack/types";
|
|
19
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
4
20
|
export interface VacuumStateMeta {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
21
|
+
readonly label: string;
|
|
22
|
+
/** Tailwind text-colour token for the state label. */
|
|
23
|
+
readonly tone: string;
|
|
8
24
|
}
|
|
9
25
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
26
|
+
* Pure helper — maps a VacuumState (or undefined when no slice yet) to a
|
|
27
|
+
* human label + colour tone. Exhaustive switch: a new enum member fails
|
|
28
|
+
* the build.
|
|
29
|
+
*/
|
|
14
30
|
export declare function vacuumStateMeta(state: VacuumState | undefined): VacuumStateMeta;
|
|
15
31
|
/** The four intrinsic tanks a vacuum cap can expose. */
|
|
16
|
-
export type TankKind =
|
|
17
|
-
export type TankAlert =
|
|
32
|
+
export type TankKind = "cleanWater" | "dirtyWater" | "detergent" | "dustBin";
|
|
33
|
+
export type TankAlert = "ok" | "warning";
|
|
18
34
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
35
|
+
* Pure helper — classifies a tank as `ok` or `warning`.
|
|
36
|
+
*
|
|
37
|
+
* Clean-water + detergent are "supply" tanks: low is bad. Dirty-water +
|
|
38
|
+
* dust-bin are "waste" tanks: full is bad. Prefers the numeric `level`
|
|
39
|
+
* (thresholds 15 / 85), falling back to the discrete `status` flag. Both
|
|
40
|
+
* unknown → `ok`. Exhaustive over TankKind.
|
|
41
|
+
*/
|
|
26
42
|
export declare function tankAlert(kind: TankKind, tank: TankStatus): TankAlert;
|
|
27
43
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
44
|
+
* VacuumInlineControl — compact, state-aware vacuum controls for a
|
|
45
|
+
* device-list row. Start / Pause / Return-to-base + battery badge.
|
|
46
|
+
*/
|
|
31
47
|
export declare function VacuumInlineControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
|
|
32
48
|
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
49
|
+
* VacuumHeroCard — full control surface for the device-detail hero area.
|
|
50
|
+
* State label + action buttons + fan-speed selector + battery readout.
|
|
51
|
+
*/
|
|
36
52
|
export declare function VacuumHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
|
|
@@ -1,46 +1,62 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Valve controls for a `DeviceType.Valve` device.
|
|
3
|
+
*
|
|
4
|
+
* Reads the `valve` cap status slice (state / position) and renders:
|
|
5
|
+
* - ValveInlineControl (device-list row): compact Open / Stop / Close
|
|
6
|
+
* icon-buttons with state-aware highlight + a small position % badge.
|
|
7
|
+
* - ValveHeroCard (device-detail hero): a bespoke state-tinted pipe +
|
|
8
|
+
* gate-valve SVG that doubles as a vertical drag surface when the
|
|
9
|
+
* valve is positionable, the full action set (Open / Stop / Close),
|
|
10
|
+
* and a position slider gated on `ValvePositionable`.
|
|
11
|
+
*
|
|
12
|
+
* Mirrors the cover controls' `useDeviceCapability` + `useOptimisticSlice`
|
|
13
|
+
* pattern so the row and hero never diverge. The button highlight reuses
|
|
14
|
+
* `coverHighlight` — the valve state enum is identical to the cover one.
|
|
15
|
+
* Buttons are gated on `available`.
|
|
16
|
+
*/
|
|
17
|
+
import { type ReactNode } from "react";
|
|
18
|
+
import { type ValveState } from "@camstack/types";
|
|
19
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
4
20
|
export interface ValveStateMeta {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
21
|
+
readonly label: string;
|
|
22
|
+
/** Tailwind text-colour token for the state label. */
|
|
23
|
+
readonly tone: string;
|
|
8
24
|
}
|
|
9
25
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
26
|
+
* Pure helper — maps a ValveState (or undefined when no slice yet) to a
|
|
27
|
+
* human label + colour tone. Exhaustive switch: a new enum member fails
|
|
28
|
+
* the build.
|
|
29
|
+
*/
|
|
14
30
|
export declare function valveStateMeta(state: ValveState | undefined): ValveStateMeta;
|
|
15
31
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
32
|
+
* ValveInlineControl — compact, state-aware valve controls for a
|
|
33
|
+
* device-list row. Open ▲ Stop ■ Close ▼ + optional position % badge.
|
|
34
|
+
* Mirrors `CoverInlineControl` exactly. Must NOT blow out the row width.
|
|
35
|
+
*/
|
|
20
36
|
export declare function ValveInlineControl({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
|
|
21
37
|
/** Per-state visual tint tokens for the framed valve graphic. */
|
|
22
38
|
export interface ValveGraphicTint {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
39
|
+
/** Tailwind class for the flow-glow wash over the pipe. */
|
|
40
|
+
readonly glow: string;
|
|
41
|
+
/** Tailwind text token driving the valve body via currentColor. */
|
|
42
|
+
readonly accent: string;
|
|
43
|
+
/** Whether to render the animated flow dashes (open / opening). */
|
|
44
|
+
readonly flowing: boolean;
|
|
45
|
+
/** Whether to render the transient-motion activity pulse. */
|
|
46
|
+
readonly active: boolean;
|
|
31
47
|
}
|
|
32
48
|
export declare function valveGraphicTint(state: ValveState | undefined): ValveGraphicTint;
|
|
33
49
|
/**
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
export declare function ValveHeroCard({ trpc, deviceId, features, optimistic
|
|
50
|
+
* ValveHeroCard — full control surface for the device-detail hero area.
|
|
51
|
+
*
|
|
52
|
+
* Bespoke pipe + gate-valve graphic (drag surface when positionable) +
|
|
53
|
+
* a large position % (or capitalized state when position is null) +
|
|
54
|
+
* Open / Stop / Close hero buttons + a position slider gated on
|
|
55
|
+
* `ValvePositionable` (additive to drag), and a read-only range when a
|
|
56
|
+
* position is reported but not settable.
|
|
57
|
+
*
|
|
58
|
+
* Position support is detected via `ValveStatus.position !== null`; the
|
|
59
|
+
* interactive setPosition surface is gated on `DeviceFeature.ValvePositionable`.
|
|
60
|
+
* Only hides when the device truly has no valve cap.
|
|
61
|
+
*/
|
|
62
|
+
export declare function ValveHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
|
|
@@ -1,41 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Water-heater controls for a `DeviceType.WaterHeater` device.
|
|
3
|
+
*
|
|
4
|
+
* Reads the `water-heater` cap status slice (current / target temp /
|
|
5
|
+
* operation mode / away / bounds) and renders:
|
|
6
|
+
* - WaterHeaterInlineControl (device-list row): a compact
|
|
7
|
+
* `current°→target°` readout + a tiny mode hint. Row-narrow.
|
|
8
|
+
* - WaterHeaterHeroCard (device-detail hero): a bespoke state-tinted
|
|
9
|
+
* tank / boiler SVG (water fill + heating-element glow when actively
|
|
10
|
+
* heating) in the framed-box language, a target-temp stepper with
|
|
11
|
+
* min/max clamp, an operation-mode `<select>`, an "Away" toggle
|
|
12
|
+
* (only when `away !== null`), and the current-temp readout.
|
|
13
|
+
*
|
|
14
|
+
* Mirrors the climate / valve controls' `useDeviceCapability` +
|
|
15
|
+
* `useOptimisticSlice` pattern. Controls are gated on `available`. The
|
|
16
|
+
* decorative SVG is aria-hidden.
|
|
17
|
+
*/
|
|
18
|
+
import { type ReactNode } from "react";
|
|
19
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
3
20
|
/** Heating phase derived from the slice — drives the tank tint + element glow. */
|
|
4
|
-
export type WaterHeaterPhase =
|
|
21
|
+
export type WaterHeaterPhase = "heating" | "idle" | "off";
|
|
5
22
|
export interface WaterHeaterTint {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
23
|
+
/** Tailwind class for the wash behind the tank. */
|
|
24
|
+
readonly glow: string;
|
|
25
|
+
/** Tailwind text token driving the tank via currentColor. */
|
|
26
|
+
readonly accent: string;
|
|
27
|
+
/** Whether to render the heating-element glow. */
|
|
28
|
+
readonly heating: boolean;
|
|
12
29
|
}
|
|
13
30
|
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
31
|
+
* Pure helper — maps a phase to a tint. Exhaustive over WaterHeaterPhase
|
|
32
|
+
* (a new member fails the build).
|
|
33
|
+
*
|
|
34
|
+
* heating → warning (element glow)
|
|
35
|
+
* idle → primary (warm but settled)
|
|
36
|
+
* off → muted
|
|
37
|
+
*/
|
|
21
38
|
export declare function waterHeaterTint(phase: WaterHeaterPhase): WaterHeaterTint;
|
|
22
39
|
/**
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
40
|
+
* Heuristic heating phase: off when the operation mode is 'off' (or null);
|
|
41
|
+
* heating when current < target (actively warming); otherwise idle.
|
|
42
|
+
*/
|
|
26
43
|
export declare function waterHeaterPhase(operationMode: string | null, currentTemp: number | null, targetTemp: number | null): WaterHeaterPhase;
|
|
27
44
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
export declare function WaterHeaterInlineControl({ trpc, deviceId, optimistic
|
|
45
|
+
* WaterHeaterInlineControl — compact current→target readout + mode hint
|
|
46
|
+
* for a device-list row. Must NOT blow out the row width.
|
|
47
|
+
*/
|
|
48
|
+
export declare function WaterHeaterInlineControl({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
|
|
32
49
|
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
50
|
+
* WaterHeaterHeroCard — full control surface for the device-detail hero.
|
|
51
|
+
*
|
|
52
|
+
* Bespoke tank graphic + a large current-temp readout + a target-temp
|
|
53
|
+
* stepper (clamped to min/maxTemp) + an operation-mode `<select>` + an
|
|
54
|
+
* "Away" toggle (only when `away !== null`) + the current-temp readout.
|
|
55
|
+
* Gated on `available`. Only hides when the device truly has no
|
|
56
|
+
* water-heater cap.
|
|
57
|
+
*/
|
|
41
58
|
export declare function WaterHeaterHeroCard({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
|