@camstack/ui-library 1.2.257 → 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,41 +1,59 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Weather controls for a `DeviceType.Weather` device.
|
|
3
|
+
*
|
|
4
|
+
* Read-only: the `weather` cap has no setters. Reads the `weather` cap
|
|
5
|
+
* status slice (condition + current temperature / humidity / pressure /
|
|
6
|
+
* wind) and renders:
|
|
7
|
+
* - WeatherInlineControl (device-list row): a compact condition icon +
|
|
8
|
+
* temperature readout. Row-narrow.
|
|
9
|
+
* - WeatherHeroCard (device-detail hero): a bespoke state-tinted sky
|
|
10
|
+
* scene SVG in the framed-box language whose graphic varies by HA
|
|
11
|
+
* `condition`, plus a big temperature readout and humidity / wind /
|
|
12
|
+
* pressure readouts. Pure — no controls. Decorative SVG aria-hidden.
|
|
13
|
+
*
|
|
14
|
+
* Mirrors the climate / humidifier controls' `useDeviceCapability` read
|
|
15
|
+
* pattern so the row and hero never diverge. The condition→glyph map is
|
|
16
|
+
* a small internal switch over the known HA condition set with a neutral
|
|
17
|
+
* default.
|
|
18
|
+
*/
|
|
19
|
+
import { type ReactNode } from "react";
|
|
20
|
+
import type { DeviceControlProps } from "./control-registry";
|
|
3
21
|
/** Which sky glyph a condition maps to. Drives both the inline icon and
|
|
4
|
-
|
|
5
|
-
export type WeatherGlyph =
|
|
22
|
+
* the hero scene's graphic branch. */
|
|
23
|
+
export type WeatherGlyph = "sun" | "clear-night" | "partly-cloudy" | "cloudy" | "rain" | "snow" | "lightning" | "fog" | "wind" | "hail";
|
|
6
24
|
export interface WeatherConditionMeta {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
25
|
+
/** Human-readable label for the condition. */
|
|
26
|
+
readonly label: string;
|
|
27
|
+
/** Which glyph to render. */
|
|
28
|
+
readonly glyph: WeatherGlyph;
|
|
11
29
|
}
|
|
12
30
|
export interface WeatherTint {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
31
|
+
/** Tailwind class for the wash behind the scene. */
|
|
32
|
+
readonly glow: string;
|
|
33
|
+
/** Tailwind text token driving the scene glyph via currentColor. */
|
|
34
|
+
readonly accent: string;
|
|
17
35
|
}
|
|
18
36
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
* Pure helper — maps a verbatim HA condition string to a label + glyph.
|
|
38
|
+
* Covers the known HA `weather.*` condition set; an unknown / null
|
|
39
|
+
* condition falls back to a neutral cloud.
|
|
40
|
+
*/
|
|
23
41
|
export declare function weatherConditionMeta(condition: string | null): WeatherConditionMeta;
|
|
24
42
|
/**
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
43
|
+
* Pure helper — maps a verbatim HA condition string to a tint. Exhaustive
|
|
44
|
+
* over the known condition set with a neutral default.
|
|
45
|
+
*/
|
|
28
46
|
export declare function weatherTint(condition: string | null): WeatherTint;
|
|
29
47
|
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
48
|
+
* WeatherInlineControl — compact condition icon + temperature readout
|
|
49
|
+
* for a device-list row. Read-only; must NOT blow out the row width.
|
|
50
|
+
*/
|
|
33
51
|
export declare function WeatherInlineControl({ trpc, deviceId }: DeviceControlProps): ReactNode;
|
|
34
52
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
53
|
+
* WeatherHeroCard — read-only weather panel for the device-detail hero.
|
|
54
|
+
*
|
|
55
|
+
* Bespoke state-tinted sky scene + a large temperature readout +
|
|
56
|
+
* humidity / wind-speed (with a bearing arrow) / pressure readouts.
|
|
57
|
+
* Pure — no controls (the cap is read-only).
|
|
58
|
+
*/
|
|
41
59
|
export declare function WeatherHeroCard({ trpc, deviceId }: DeviceControlProps): ReactNode;
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
-
import { ReactElement } from
|
|
1
|
+
import { type ReactElement } from "react";
|
|
2
2
|
/** Where the viewer's "rows per page" choice for this table is remembered. */
|
|
3
3
|
export declare const DEVICE_EXPORT_PAGE_SIZE_KEY = "camstack.device-export.pageSize";
|
|
4
4
|
export interface DeviceExportPanelProps {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Addon id of the export addon whose surface is rendered. Used for
|
|
7
|
+
* labelling and to scope cache invalidation; the underlying cap
|
|
8
|
+
* router resolves the (hub-resident) provider by `nodeId`.
|
|
9
|
+
*/
|
|
10
|
+
readonly addonId: string;
|
|
11
|
+
/**
|
|
12
|
+
* Optional callback to open a device-details page.
|
|
13
|
+
*
|
|
14
|
+
* There is no `trpc` prop. It existed to feed the device-mode list's per-row
|
|
15
|
+
* capability atoms (snapshot, switch, live control); this surface renders
|
|
16
|
+
* type + name + export and asks a device nothing, so the prop was removed
|
|
17
|
+
* rather than left as a parameter every caller still threads and nothing
|
|
18
|
+
* reads.
|
|
19
|
+
*/
|
|
20
|
+
readonly onOpenDevice?: (deviceId: string) => void;
|
|
21
|
+
/**
|
|
22
|
+
* Render the exporter's error and Setup block (pairing QR, copyable fields)
|
|
23
|
+
* inside the panel. Default true. A page that places the devices table at
|
|
24
|
+
* the bottom renders `<DeviceExportSetup>` near the top instead and passes
|
|
25
|
+
* false, so the pairing code is not buried under settings and logs.
|
|
26
|
+
*/
|
|
27
|
+
readonly showSetup?: boolean;
|
|
28
28
|
}
|
|
29
29
|
/**
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
* The exporter's error and Setup block on their own — for a page that shows
|
|
31
|
+
* them above its settings while the devices table sits at the bottom. Renders
|
|
32
|
+
* nothing when the exporter reports neither. Shares `getStatus`'s query key
|
|
33
|
+
* with the panel, so mounting both costs one request.
|
|
34
|
+
*/
|
|
35
35
|
export declare function DeviceExportSetup({ addonId }: {
|
|
36
|
-
|
|
36
|
+
readonly addonId: string;
|
|
37
37
|
}): ReactElement | null;
|
|
38
38
|
/**
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
export declare function DeviceExportPanel({ addonId, onOpenDevice, showSetup
|
|
39
|
+
* Generic device-export panel. Addon-agnostic — only the `device-export`
|
|
40
|
+
* cap drives it.
|
|
41
|
+
*/
|
|
42
|
+
export declare function DeviceExportPanel({ addonId, onOpenDevice, showSetup }: DeviceExportPanelProps): ReactElement;
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
1
|
+
import { type ReactNode, type JSX } from "react";
|
|
2
2
|
export interface DeviceGridProps {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
3
|
+
/** Grid items */
|
|
4
|
+
children: ReactNode;
|
|
5
|
+
/** Minimum card width in pixels (default 220) */
|
|
6
|
+
minCardWidth?: number;
|
|
7
|
+
/** Gap between cards in Tailwind spacing units (default 3) */
|
|
8
|
+
gap?: number;
|
|
9
|
+
/** Additional CSS classes */
|
|
10
|
+
className?: string;
|
|
11
11
|
}
|
|
12
|
-
export declare function DeviceGrid({ children, minCardWidth, gap, className }: DeviceGridProps):
|
|
12
|
+
export declare function DeviceGrid({ children, minCardWidth, gap, className }: DeviceGridProps): JSX.Element;
|
|
@@ -1,20 +1,42 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/**
|
|
2
|
+
* <DeviceItemActions> — type-aware dispatcher for inline quick actions.
|
|
3
|
+
*
|
|
4
|
+
* Two layers compose the row's trailing affordances:
|
|
5
|
+
* 1. Type-specific InlineControl: rendered directly from the
|
|
6
|
+
* `DEVICE_TYPE_CONTROL` registry (cover → ↑■↓ + %; all other
|
|
7
|
+
* non-sensor types → DummyInline which renders nothing visible).
|
|
8
|
+
* Sensor / Presence device rows display their live value via
|
|
9
|
+
* `SensorValueAtom` instead (needs device.role + sourceInfo which
|
|
10
|
+
* DeviceControlProps does not carry).
|
|
11
|
+
* 2. Cross-cutting feature-gated extras (motion-trigger, PTZ, reboot)
|
|
12
|
+
* stay here — they gate on `device.features`, are device-type
|
|
13
|
+
* agnostic, and so are NOT in the per-type registry.
|
|
14
|
+
*
|
|
15
|
+
* High-frequency toggles stay inline. Reboot is a dedicated row-level
|
|
16
|
+
* action button (`RebootQuickAction`) — destructive, so clicking it opens
|
|
17
|
+
* a confirm modal rather than rebooting on the first click.
|
|
18
|
+
*
|
|
19
|
+
* Each atom self-gates via `useDeviceCapability` / the panel's own cap
|
|
20
|
+
* lookup — the dispatcher is a coarse pre-flight only. An atom that
|
|
21
|
+
* finds its cap unbound returns `null` so the row stays compact.
|
|
22
|
+
*/
|
|
23
|
+
import { type ReactNode } from "react";
|
|
24
|
+
import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
|
|
25
|
+
import { type ControlPlacement } from "../device-controls/control-registry";
|
|
26
|
+
import type { DeviceItemDevice, VariantDefaults } from "./helpers";
|
|
5
27
|
export interface DeviceItemActionsProps {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
28
|
+
readonly trpc: UseDeviceProxyTrpc;
|
|
29
|
+
readonly device: DeviceItemDevice;
|
|
30
|
+
readonly flags: VariantDefaults;
|
|
31
|
+
/**
|
|
32
|
+
* Where the control sits and whether the column carries the fixed `w-[140px]`
|
|
33
|
+
* box. `'right'` (default) → flush right in the fixed column, for card /
|
|
34
|
+
* minimal views. `'center'` → centered in the fixed column. `'table'` → the
|
|
35
|
+
* column sizes to its content (no fixed width) so a wide control lays out in
|
|
36
|
+
* sequence with the trailing trash + status dot without overflowing/colliding
|
|
37
|
+
* — used by the main devices table. FILL controls stretch to the fixed column
|
|
38
|
+
* width under `'right'`/`'center'`; under `'table'` they take natural width.
|
|
39
|
+
*/
|
|
40
|
+
readonly controlPlacement?: ControlPlacement;
|
|
19
41
|
}
|
|
20
|
-
export declare function DeviceItemActions({ trpc, device, controlPlacement
|
|
42
|
+
export declare function DeviceItemActions({ trpc, device, controlPlacement }: DeviceItemActionsProps): ReactNode;
|
|
@@ -1,30 +1,70 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* <AdminLinkQuickAction> — the row-level "open this device's own config page"
|
|
3
|
+
* affordance.
|
|
4
|
+
*
|
|
5
|
+
* ## Discreet, in this row's vocabulary
|
|
6
|
+
*
|
|
7
|
+
* The trailing run of a device row already carries a type-specific inline
|
|
8
|
+
* control (a switch, a cover triad, a climate stepper, a sensor value), an
|
|
9
|
+
* on-motion toggle, a PTZ button, a reboot button, whatever the caller injects
|
|
10
|
+
* through `renderRowAction`, a delete button in table view and a status dot.
|
|
11
|
+
* Anything added there competes with a control the operator uses daily, and
|
|
12
|
+
* this one he uses roughly never.
|
|
13
|
+
*
|
|
14
|
+
* So it is the quietest thing the row can hold: a bare 12px glyph in
|
|
15
|
+
* `text-foreground-subtle`, no chrome, no label, no colour until hover — a
|
|
16
|
+
* step below `RebootQuickAction`, which at least has a hover surface, and it
|
|
17
|
+
* sits LAST among the actions so it never displaces one. It renders as an `<a>`
|
|
18
|
+
* rather than a button so the browser's own middle-click / copy-link /
|
|
19
|
+
* open-in-new-tab all work, which is most of what an operator wants from it.
|
|
20
|
+
*
|
|
21
|
+
* ## It draws nothing rather than something dead
|
|
22
|
+
*
|
|
23
|
+
* Four gates, all of which draw nothing:
|
|
24
|
+
*
|
|
25
|
+
* - the device proxy has not resolved, or the cap is not bound (the provider
|
|
26
|
+
* cannot answer for this device at all — a cloud-only vacuum, a Wyze cam);
|
|
27
|
+
* - the query has not answered yet, or failed (a non-admin session loses it,
|
|
28
|
+
* which is the intended outcome — no button beats a button that 403s);
|
|
29
|
+
* - the provider answered `null` (this device HAS no page);
|
|
30
|
+
* - the link is the DEVICE's own page and the device is offline — a web server
|
|
31
|
+
* on a camera that is not answering will not answer a browser either.
|
|
32
|
+
*
|
|
33
|
+
* That last gate is why `target` exists on the payload: an `integration` link
|
|
34
|
+
* (the Home Assistant device page, the UniFi controller) stays put when the
|
|
35
|
+
* device is offline, because the page is served by something else entirely and
|
|
36
|
+
* is very often exactly where the operator wants to go when a device drops.
|
|
37
|
+
*
|
|
38
|
+
* D62's rule holds from the other side: nothing here renders a DISABLED button.
|
|
39
|
+
* A greyed-out link would say "broken", and none of these four states is.
|
|
40
|
+
*/
|
|
41
|
+
import { type ReactNode } from "react";
|
|
42
|
+
import type { DeviceAdminLink } from "@camstack/types";
|
|
43
|
+
import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
|
|
4
44
|
export interface AdminLinkQuickActionProps {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
45
|
+
readonly trpc: UseDeviceProxyTrpc;
|
|
46
|
+
readonly deviceId: number;
|
|
47
|
+
/** Extra classes for the anchor — the detail header uses a larger glyph. */
|
|
48
|
+
readonly className?: string;
|
|
49
|
+
/** Glyph size. The row wants 12px; the header wants 14px. */
|
|
50
|
+
readonly iconClassName?: string;
|
|
11
51
|
}
|
|
12
52
|
/**
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
53
|
+
* Resolve the link, or null, applying every gate. Split out so the row button
|
|
54
|
+
* and the detail-header button share ONE decision — two copies of a four-state
|
|
55
|
+
* gate is how the two surfaces end up disagreeing about the same device.
|
|
56
|
+
*
|
|
57
|
+
* Asked through the DEVICE PROXY (`cap.getAdminLink`), not through the
|
|
58
|
+
* generated tRPC hook. The generated hook reads ui-library's own tRPC react
|
|
59
|
+
* context, which the device row does not have and must not require: the row
|
|
60
|
+
* takes its `trpc` as a PROP precisely so a caller can render it against a
|
|
61
|
+
* different client. Wiring the generated hook in here turned 120 existing
|
|
62
|
+
* device-item tests red with "Unable to find tRPC Context" — and would have
|
|
63
|
+
* done the same to any embedding that does not sit under ui-library's provider.
|
|
64
|
+
*
|
|
65
|
+
* One read per (device, binding). The answer is a configured address: it
|
|
66
|
+
* changes when an operator edits a connection, which respawns the runner and
|
|
67
|
+
* re-resolves the proxy anyway.
|
|
68
|
+
*/
|
|
29
69
|
export declare function useDeviceAdminLink(trpc: UseDeviceProxyTrpc, deviceId: number): DeviceAdminLink | null;
|
|
30
|
-
export declare function AdminLinkQuickAction({ trpc, deviceId, className, iconClassName
|
|
70
|
+
export declare function AdminLinkQuickAction({ trpc, deviceId, className, iconClassName }: AdminLinkQuickActionProps): ReactNode;
|
|
@@ -1,32 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Pure grouping helper for a container's `childLayout`.
|
|
3
|
+
*
|
|
4
|
+
* A CONTAINER device may carry a `childLayout` directive (see
|
|
5
|
+
* `ChildLayoutEntry` in `@camstack/types`) that assigns specific accessory
|
|
6
|
+
* children to named accordion SECTIONS. This module partitions a parent's
|
|
7
|
+
* children into the provider-declared sections plus the remaining
|
|
8
|
+
* (ungrouped) children, which keep their current plain rendering.
|
|
9
|
+
*
|
|
10
|
+
* A child matches an entry when its `stableId` equals
|
|
11
|
+
* `${parentStableId}-${entry.childKey}` — `childKey` is the child's
|
|
12
|
+
* re-sync-stable accessory `stableIdSuffix`.
|
|
13
|
+
*
|
|
14
|
+
* Pure — no I/O, no React. Both the device-detail children list and the
|
|
15
|
+
* DevicesList table-row expansion consume this single helper so the two
|
|
16
|
+
* surfaces share the exact same grouping semantics.
|
|
17
|
+
*/
|
|
18
|
+
import type { ChildLayout } from "@camstack/types";
|
|
19
|
+
import type { DeviceItemDevice } from "./helpers";
|
|
3
20
|
export interface ChildLayoutSection {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
21
|
+
readonly title: string;
|
|
22
|
+
readonly children: readonly DeviceItemDevice[];
|
|
23
|
+
/** Whether the section renders open by default. `false` when any matched
|
|
24
|
+
* layout entry for this section declared `collapsed: true`. */
|
|
25
|
+
readonly defaultOpen: boolean;
|
|
26
|
+
/** When `true`, the section's children render visually de-emphasized
|
|
27
|
+
* (muted). Set only on the synthetic "Disabled" section. */
|
|
28
|
+
readonly muted?: boolean;
|
|
12
29
|
}
|
|
13
30
|
export interface GroupedChildren {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
31
|
+
/** Sections ordered by first appearance in `childLayout`. */
|
|
32
|
+
readonly sections: readonly ChildLayoutSection[];
|
|
33
|
+
/** Children not referenced by any layout entry — render plainly, as today. */
|
|
34
|
+
readonly ungrouped: readonly DeviceItemDevice[];
|
|
35
|
+
/** Trailing synthetic section gathering every child whose CamStack-side
|
|
36
|
+
* `disabled` flag is set. Kept SEPARATE from `sections`/`ungrouped` so
|
|
37
|
+
* consumers render it LAST (after provider sections + ungrouped) and
|
|
38
|
+
* muted. Undefined when no child is disabled. Generic — driven purely by
|
|
39
|
+
* `child.disabled`, no provider/HA-specific input. */
|
|
40
|
+
readonly disabledSection?: ChildLayoutSection;
|
|
24
41
|
}
|
|
25
42
|
/**
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
43
|
+
* Partition a parent's children into provider-declared accordion sections +
|
|
44
|
+
* the remaining (ungrouped) children. A child matches an entry when
|
|
45
|
+
* `child.stableId === ${parentStableId}-${entry.childKey}`. Within a section,
|
|
46
|
+
* children sort by `order ?? Number.MAX_SAFE_INTEGER` then by name. Sections
|
|
47
|
+
* appear in first-seen order across `childLayout`. Pure — no I/O.
|
|
48
|
+
*/
|
|
32
49
|
export declare function groupChildrenByLayout(parentStableId: string, children: readonly DeviceItemDevice[], childLayout: ChildLayout | undefined): GroupedChildren;
|
|
@@ -1,9 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* <ChildSectionAccordion> — a reusable collapsible section for the CARD/LIST
|
|
3
|
+
* context (device-detail children list). Renders a header button (chevron +
|
|
4
|
+
* title + count badge) that toggles a local open state, and the body (the
|
|
5
|
+
* section's children) when open.
|
|
6
|
+
*
|
|
7
|
+
* Open by default. Styling mirrors `children-accordion.tsx` (uppercase
|
|
8
|
+
* text-[10px] section headers, `hover:bg-surface-hover`, subtle dividers) so
|
|
9
|
+
* the device-detail accordions read consistently with the rest of the list.
|
|
10
|
+
*
|
|
11
|
+
* The TABLE context can't reuse this component (rows must be `<tr>`/`<td>`),
|
|
12
|
+
* so it shares the `groupChildrenByLayout` helper + its own section-header
|
|
13
|
+
* `<tr>` instead — see `device-list/table-layout.tsx`.
|
|
14
|
+
*/
|
|
15
|
+
import { type ReactNode } from "react";
|
|
2
16
|
interface ChildSectionAccordionProps {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
17
|
+
readonly title: string;
|
|
18
|
+
readonly count: number;
|
|
19
|
+
readonly children: ReactNode;
|
|
20
|
+
readonly defaultOpen?: boolean;
|
|
7
21
|
}
|
|
8
|
-
export declare function ChildSectionAccordion({ title, count, children, defaultOpen
|
|
22
|
+
export declare function ChildSectionAccordion({ title, count, children, defaultOpen }: ChildSectionAccordionProps): ReactNode;
|
|
9
23
|
export {};
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ReactNode } from
|
|
2
|
-
import { UseDeviceProxyTrpc } from
|
|
3
|
-
import { DeviceItemDevice } from
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
|
|
3
|
+
import type { DeviceItemDevice } from "./helpers";
|
|
4
4
|
interface ChildrenAccordionProps {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
5
|
+
readonly trpc: UseDeviceProxyTrpc;
|
|
6
|
+
readonly accessoryChildren: readonly DeviceItemDevice[];
|
|
7
|
+
readonly adoptedChildren: readonly DeviceItemDevice[];
|
|
8
|
+
readonly onNavigate: (id: number) => void;
|
|
9
|
+
/** Parent row's name — used to strip the redundant baked-in prefix from each
|
|
10
|
+
* child's DISPLAY name (the underlying `child.name` is untouched). */
|
|
11
|
+
readonly parentName: string;
|
|
12
12
|
}
|
|
13
|
-
export declare function ChildrenAccordion({ trpc, accessoryChildren, adoptedChildren, onNavigate, parentName
|
|
13
|
+
export declare function ChildrenAccordion({ trpc, accessoryChildren, adoptedChildren, onNavigate, parentName }: ChildrenAccordionProps): ReactNode;
|
|
14
14
|
export {};
|
|
@@ -1,15 +1,32 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Container-children context — a per-list lookup of `parentId → children`
|
|
3
|
+
* so a row's sub-components (`DeviceItemHeader`, `DeviceItemActions`, the
|
|
4
|
+
* table-row's `effectiveType`) can resolve a Container's children THEMSELVES
|
|
5
|
+
* instead of having the array threaded down as a `containerChildren` prop.
|
|
6
|
+
*
|
|
7
|
+
* A Container row renders AS its primary child (icon + inline control + the
|
|
8
|
+
* effective type badge), which needs the container's children. Previously the
|
|
9
|
+
* owning list passed those children into `<DeviceItem>`, which re-threaded them
|
|
10
|
+
* into every sub-component. The list now publishes the whole `parentId → []`
|
|
11
|
+
* map once via `ContainerChildrenProvider`, and each sub-component reads its
|
|
12
|
+
* own slice with `useContainerChildren(deviceId)`.
|
|
13
|
+
*
|
|
14
|
+
* Outside a provider (e.g. the minimal child list on the device-detail page,
|
|
15
|
+
* or a standalone test) the hook returns a stable empty array — the same
|
|
16
|
+
* graceful default the old optional prop had.
|
|
17
|
+
*/
|
|
18
|
+
import { type ReactNode } from "react";
|
|
19
|
+
import type { DeviceItemDevice } from "./helpers";
|
|
3
20
|
export interface ContainerChildrenProviderProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
21
|
+
/** `parentDeviceId → that parent's children`. Built once by the list. */
|
|
22
|
+
readonly value: ReadonlyMap<number, readonly DeviceItemDevice[]>;
|
|
23
|
+
readonly children: ReactNode;
|
|
7
24
|
}
|
|
8
|
-
export declare function ContainerChildrenProvider({ value, children
|
|
25
|
+
export declare function ContainerChildrenProvider({ value, children }: ContainerChildrenProviderProps): ReactNode;
|
|
9
26
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
27
|
+
* The children of `deviceId` as published by the nearest
|
|
28
|
+
* `ContainerChildrenProvider`. Returns a stable empty array when there is no
|
|
29
|
+
* provider or the device has no children — so a non-container row, or a row
|
|
30
|
+
* rendered outside a list, degrades exactly like the old optional prop.
|
|
31
|
+
*/
|
|
15
32
|
export declare function useContainerChildren(deviceId: number): readonly DeviceItemDevice[];
|
|
@@ -1,8 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* DeviceDeleteAction — built-in confirmed per-row delete trash button.
|
|
3
|
+
*
|
|
4
|
+
* The unified device table owns delete as a first-class action: when a
|
|
5
|
+
* consumer passes `onDelete` to `<DeviceList>`/`<DeviceItem>`, this red trash
|
|
6
|
+
* button renders in the merged previewActions cell. Delete is destructive, so
|
|
7
|
+
* it MUST ask first — clicking the trash opens the shared centered confirm
|
|
8
|
+
* dialog (`useConfirm`, provider mounted app-wide) and only calls `onDelete`
|
|
9
|
+
* once the operator confirms.
|
|
10
|
+
*
|
|
11
|
+
* Cap/feature-agnostic by design: delete is generic and never branches on the
|
|
12
|
+
* device's capabilities. Context gating lives entirely at the call site — a
|
|
13
|
+
* consumer that doesn't pass `onDelete` gets no trash.
|
|
14
|
+
*
|
|
15
|
+
* Encapsulating `useConfirm` here (rather than inline in the row) keeps the
|
|
16
|
+
* presentational `DeviceItemTableRow` free of side-effecting hooks and lets
|
|
17
|
+
* the trash + confirm contract be tested in isolation.
|
|
18
|
+
*/
|
|
19
|
+
import { type ReactNode } from "react";
|
|
20
|
+
import type { DeviceItemDevice } from "./helpers";
|
|
3
21
|
export interface DeviceDeleteActionProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
22
|
+
readonly device: DeviceItemDevice;
|
|
23
|
+
/** Called only after the operator confirms the destructive delete. */
|
|
24
|
+
readonly onDelete: (device: DeviceItemDevice) => void;
|
|
7
25
|
}
|
|
8
26
|
export declare function DeviceDeleteAction({ device, onDelete }: DeviceDeleteActionProps): ReactNode;
|
|
@@ -1,17 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* <DeviceItemFeatures> — children-count badge + optional feature-icon
|
|
3
|
+
* row with hover popover.
|
|
4
|
+
*
|
|
5
|
+
* Battery / charging / sleeping pills moved to <DeviceItemPreview> in
|
|
6
|
+
* Phase 2 (status pills belong with the preview/snapshot, not features).
|
|
7
|
+
*
|
|
8
|
+
* What this renders is now driven by `useDeviceFeatures` — the row
|
|
9
|
+
* shows ONLY features whose corresponding cap is actually registered
|
|
10
|
+
* on the device (or pure informational markers like `battery-operated`
|
|
11
|
+
* / `doorbell-button` that have no cap to interrogate). The popover
|
|
12
|
+
* labels each row `native` / `enhanced` / `marker` based on the live
|
|
13
|
+
* `getBindings` entry's `kind` field. The previous conservative
|
|
14
|
+
* advertised/no-slice/bound trio is gone — it under-reported wired
|
|
15
|
+
* features (only 2 of 8 had a slice mapping) and gave operators
|
|
16
|
+
* misleading "advertised" gray pills on Reolink cameras that fully
|
|
17
|
+
* implement snapshot/reboot/ptz/intercom natively.
|
|
18
|
+
*/
|
|
19
|
+
import { type ReactNode } from "react";
|
|
20
|
+
import type { UseDeviceProxyTrpc } from "../../hooks/use-device-proxy";
|
|
21
|
+
import { type DeviceItemDevice, type VariantDefaults } from "./helpers";
|
|
4
22
|
export interface DeviceItemFeaturesProps {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
23
|
+
readonly trpc: UseDeviceProxyTrpc;
|
|
24
|
+
readonly device: DeviceItemDevice;
|
|
25
|
+
readonly flags: VariantDefaults;
|
|
26
|
+
readonly accessoryCount: number;
|
|
27
|
+
readonly adoptedCount: number;
|
|
28
|
+
/**
|
|
29
|
+
* When true, render the feature-icon row + popover (table view's
|
|
30
|
+
* "Features" column). Off in card view — only battery + +N badge
|
|
31
|
+
* to save horizontal space.
|
|
32
|
+
*/
|
|
33
|
+
readonly showFeatureRow?: boolean;
|
|
16
34
|
}
|
|
17
|
-
export declare function DeviceItemFeatures({ trpc, device, flags, accessoryCount, adoptedCount, showFeatureRow
|
|
35
|
+
export declare function DeviceItemFeatures({ trpc, device, flags, accessoryCount, adoptedCount, showFeatureRow }: DeviceItemFeaturesProps): ReactNode;
|