@camstack/ui-library 1.2.256 → 1.2.258
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composites/accelerator-label.d.ts +9 -9
- package/dist/composites/adaptive-downlink.d.ts +141 -143
- package/dist/composites/addon-global-settings-form.d.ts +73 -60
- package/dist/composites/addon-page-props.d.ts +34 -10
- package/dist/composites/agent-step-editor.d.ts +48 -47
- package/dist/composites/app-shell/app-shell.d.ts +17 -17
- package/dist/composites/app-shell/index.d.ts +3 -3
- package/dist/composites/app-shell/sidebar-item.d.ts +9 -8
- package/dist/composites/app-shell/sidebar.d.ts +10 -10
- package/dist/composites/audio-classification-list.d.ts +16 -15
- package/dist/composites/audio-level-waveform.d.ts +31 -30
- package/dist/composites/audio-waveform.d.ts +18 -17
- package/dist/composites/battery-badge.d.ts +27 -13
- package/dist/composites/breadcrumb.d.ts +21 -21
- package/dist/composites/camera-stream-player.d.ts +309 -309
- package/dist/composites/cap-settings/AutotrackSection.d.ts +19 -2
- package/dist/composites/cap-settings/CameraGridLayoutEditor.d.ts +24 -2
- package/dist/composites/cap-settings/ConsumablesPanel.d.ts +21 -2
- package/dist/composites/cap-settings/CoverageTrack.d.ts +21 -20
- package/dist/composites/cap-settings/EventBucketStrip.d.ts +21 -20
- package/dist/composites/cap-settings/EventHeatmap.d.ts +8 -7
- package/dist/composites/cap-settings/HomePresetPicker.d.ts +2 -2
- package/dist/composites/cap-settings/MaskShapeCanvas.d.ts +143 -41
- package/dist/composites/cap-settings/MotionZonesSettings.d.ts +41 -2
- package/dist/composites/cap-settings/NavigationPanel.d.ts +14 -2
- package/dist/composites/cap-settings/PrivacyMaskSettings.d.ts +3 -2
- package/dist/composites/cap-settings/PtzPanel.d.ts +15 -2
- package/dist/composites/cap-settings/RecordingBandsEditor.d.ts +33 -32
- package/dist/composites/cap-settings/RecordingPanel.d.ts +3 -2
- package/dist/composites/cap-settings/RecordingSettings.d.ts +11 -10
- package/dist/composites/cap-settings/RecordingTimeline.d.ts +3 -2
- package/dist/composites/cap-settings/SceneMonitorEditor.d.ts +3 -51
- package/dist/composites/cap-settings/SceneReferenceGallery.d.ts +62 -23
- package/dist/composites/cap-settings/SceneSettingsForm.d.ts +52 -16
- package/dist/composites/cap-settings/TimelineControls.d.ts +21 -20
- package/dist/composites/cap-settings/camera-grid-layout.d.ts +95 -95
- package/dist/composites/cap-settings/event-thumb.d.ts +9 -8
- package/dist/composites/cap-settings/index.d.ts +20 -20
- package/dist/composites/cap-settings/privacy-mask-audio.d.ts +47 -47
- package/dist/composites/cap-settings/recording-config-form.d.ts +25 -25
- package/dist/composites/cap-settings/recording-spans.d.ts +14 -14
- package/dist/composites/cap-settings/recording-timeline-model.d.ts +57 -57
- package/dist/composites/cap-settings/scene-monitor-copy.d.ts +58 -49
- package/dist/composites/client-network-sample.d.ts +41 -41
- package/dist/composites/clips/ClipBandBar.d.ts +44 -14
- package/dist/composites/clips/ClipPanel.d.ts +30 -6
- package/dist/composites/clips/ClipTile.d.ts +26 -5
- package/dist/composites/clips/ClipsSection.d.ts +107 -2
- package/dist/composites/clips/clip-band.d.ts +72 -38
- package/dist/composites/clips/clip-day-window.d.ts +7 -30
- package/dist/composites/clips/clip-source-state.d.ts +55 -26
- package/dist/composites/clips/clip-still-retry.d.ts +39 -39
- package/dist/composites/clips/clip-thumbnail-fetch.d.ts +9 -9
- package/dist/composites/clips/clip-tile-media.d.ts +64 -32
- package/dist/composites/clips/clip-view-state.d.ts +76 -46
- package/dist/composites/code-block.d.ts +5 -4
- package/dist/composites/config-form-builder.d.ts +14 -13
- package/dist/composites/config-form-field.d.ts +63 -62
- package/dist/composites/config-icon-field.d.ts +10 -9
- package/dist/composites/config-secret-field.d.ts +51 -27
- package/dist/composites/confirm-action-button.d.ts +52 -39
- package/dist/composites/confirm-dialog.d.ts +110 -48
- package/dist/composites/copy-button.d.ts +25 -19
- package/dist/composites/data-table/data-table-header.d.ts +8 -7
- package/dist/composites/data-table/data-table-pagination.d.ts +7 -6
- package/dist/composites/data-table/data-table-row.d.ts +8 -7
- package/dist/composites/data-table/data-table.d.ts +3 -2
- package/dist/composites/data-table/index.d.ts +2 -2
- package/dist/composites/data-table/types.d.ts +29 -29
- package/dist/composites/data-table-filter-bar.d.ts +30 -29
- package/dist/composites/data-table-filter.d.ts +34 -34
- package/dist/composites/data-table-layout.d.ts +24 -24
- package/dist/composites/data-table-pager.d.ts +5 -5
- package/dist/composites/data-table-pagination.d.ts +23 -23
- package/dist/composites/data-table-selection.d.ts +10 -10
- package/dist/composites/data-table.d.ts +167 -118
- package/dist/composites/detection-canvas.d.ts +34 -25
- package/dist/composites/detection-colors.d.ts +9 -9
- package/dist/composites/detection-overlay.d.ts +33 -32
- package/dist/composites/detection-result-tree.d.ts +22 -9
- package/dist/composites/dev-shell.d.ts +15 -14
- package/dist/composites/device-activity-panel.d.ts +37 -31
- package/dist/composites/device-card.d.ts +32 -32
- package/dist/composites/device-controls/ac-panel.d.ts +2 -2
- package/dist/composites/device-controls/alarm-hero-card.d.ts +42 -42
- package/dist/composites/device-controls/atoms.d.ts +50 -50
- package/dist/composites/device-controls/brightness-panel.d.ts +3 -3
- package/dist/composites/device-controls/button-control.d.ts +14 -14
- package/dist/composites/device-controls/climate-panel.d.ts +12 -12
- package/dist/composites/device-controls/container-primary-hero.d.ts +33 -16
- package/dist/composites/device-controls/container-primary.d.ts +68 -39
- package/dist/composites/device-controls/control-panel.d.ts +4 -4
- package/dist/composites/device-controls/control-registry.d.ts +81 -70
- package/dist/composites/device-controls/cover-hero-card.d.ts +26 -26
- package/dist/composites/device-controls/cover-inline.d.ts +20 -20
- package/dist/composites/device-controls/cover-panel.d.ts +2 -2
- package/dist/composites/device-controls/dummy-hero-card.d.ts +2 -2
- package/dist/composites/device-controls/fan-hero-card.d.ts +20 -20
- package/dist/composites/device-controls/fan-panel.d.ts +3 -3
- package/dist/composites/device-controls/humidifier-control.d.ts +46 -29
- package/dist/composites/device-controls/image-control.d.ts +41 -27
- package/dist/composites/device-controls/index.d.ts +34 -34
- package/dist/composites/device-controls/lawn-mower-control.d.ts +30 -16
- package/dist/composites/device-controls/light-hero-card.d.ts +15 -15
- package/dist/composites/device-controls/lock-hero-card.d.ts +14 -14
- package/dist/composites/device-controls/lock-panel.d.ts +3 -3
- package/dist/composites/device-controls/media-player-hero-card.d.ts +16 -16
- package/dist/composites/device-controls/media-player-panel.d.ts +7 -7
- package/dist/composites/device-controls/offline-badge.d.ts +23 -8
- package/dist/composites/device-controls/panel-controls.d.ts +39 -20
- package/dist/composites/device-controls/pet-feeder-panel.d.ts +27 -9
- package/dist/composites/device-controls/popover-row-action.d.ts +18 -6
- package/dist/composites/device-controls/primary-child-picker.d.ts +31 -15
- package/dist/composites/device-controls/primary-child.d.ts +14 -25
- package/dist/composites/device-controls/radial-gauge.d.ts +17 -17
- package/dist/composites/device-controls/script-automation-controls.d.ts +9 -9
- package/dist/composites/device-controls/sensor-hero-card.d.ts +26 -8
- package/dist/composites/device-controls/sensor-inline-control.d.ts +21 -9
- package/dist/composites/device-controls/sensor-value-atom.d.ts +97 -76
- package/dist/composites/device-controls/switch-hero-card.d.ts +11 -11
- package/dist/composites/device-controls/switch-panel.d.ts +2 -2
- package/dist/composites/device-controls/tap-toggle.d.ts +13 -13
- package/dist/composites/device-controls/thermostat-hero-card.d.ts +16 -16
- package/dist/composites/device-controls/types.d.ts +11 -11
- package/dist/composites/device-controls/update-control.d.ts +20 -7
- package/dist/composites/device-controls/vacuum-control.d.ts +41 -25
- package/dist/composites/device-controls/valve-control.d.ts +51 -35
- package/dist/composites/device-controls/water-heater-control.d.ts +48 -31
- package/dist/composites/device-controls/weather-control.d.ts +46 -28
- package/dist/composites/device-export-panel.d.ts +34 -34
- package/dist/composites/device-grid.d.ts +10 -10
- package/dist/composites/device-item/actions.d.ts +40 -18
- package/dist/composites/device-item/admin-link-quick-action.d.ts +66 -26
- package/dist/composites/device-item/child-layout.d.ts +43 -26
- package/dist/composites/device-item/child-section-accordion.d.ts +20 -6
- package/dist/composites/device-item/children-accordion.d.ts +11 -11
- package/dist/composites/device-item/container-children-context.d.ts +28 -11
- package/dist/composites/device-item/device-delete-action.d.ts +23 -5
- package/dist/composites/device-item/features.d.ts +33 -15
- package/dist/composites/device-item/header.d.ts +53 -31
- package/dist/composites/device-item/helpers.d.ts +291 -274
- package/dist/composites/device-item/index.d.ts +18 -9
- package/dist/composites/device-item/preview.d.ts +41 -21
- package/dist/composites/device-item/quick-detail-action.d.ts +4 -4
- package/dist/composites/device-item/reboot-quick-action.d.ts +28 -7
- package/dist/composites/device-item/role-display-defaults-context.d.ts +28 -12
- package/dist/composites/device-item/status-dot.d.ts +24 -6
- package/dist/composites/device-list/batch-actions-bar.d.ts +23 -12
- package/dist/composites/device-list/batch-toolbar.d.ts +13 -13
- package/dist/composites/device-list/columns.d.ts +108 -108
- package/dist/composites/device-list/device-integration.d.ts +48 -58
- package/dist/composites/device-list/device-mode.d.ts +121 -121
- package/dist/composites/device-list/empty-state.d.ts +14 -3
- package/dist/composites/device-list/filter-chips.d.ts +42 -29
- package/dist/composites/device-list/fuzzy-match.d.ts +22 -22
- package/dist/composites/device-list/generic-mode.d.ts +88 -88
- package/dist/composites/device-list/group.d.ts +62 -35
- package/dist/composites/device-list/hardware-cell.d.ts +14 -3
- package/dist/composites/device-list/hardware.d.ts +29 -11
- package/dist/composites/device-list/icon-action.d.ts +27 -15
- package/dist/composites/device-list/index.d.ts +46 -23
- package/dist/composites/device-list/multi-select.d.ts +17 -17
- package/dist/composites/device-list/page-size-select.d.ts +13 -7
- package/dist/composites/device-list/pagination.d.ts +19 -12
- package/dist/composites/device-list/sort.d.ts +28 -15
- package/dist/composites/device-list/sortable-header.d.ts +20 -7
- package/dist/composites/device-list/table-layout.d.ts +44 -44
- package/dist/composites/device-list/type-filter.d.ts +16 -16
- package/dist/composites/device-list/url-state.d.ts +35 -35
- package/dist/composites/device-meta.d.ts +43 -43
- package/dist/composites/device-picker/DevicePicker.d.ts +72 -33
- package/dist/composites/device-picker/SelectedChip.d.ts +10 -9
- package/dist/composites/device-picker/device-filter-bar.d.ts +19 -18
- package/dist/composites/device-picker/device-fleet-view.d.ts +11 -3
- package/dist/composites/device-picker/device-parent.d.ts +27 -27
- package/dist/composites/device-picker/device-picker-grouping.d.ts +3 -3
- package/dist/composites/device-picker/device-picker-model.d.ts +140 -140
- package/dist/composites/device-picker/device-selection-rows.d.ts +31 -24
- package/dist/composites/device-picker/device-selection.d.ts +43 -43
- package/dist/composites/device-picker/index.d.ts +9 -9
- package/dist/composites/device-select-field.d.ts +17 -16
- package/dist/composites/device-select-filter.d.ts +78 -78
- package/dist/composites/device-selector-picker.d.ts +25 -25
- package/dist/composites/device-step-matrix.d.ts +54 -28
- package/dist/composites/discovery-panel.d.ts +22 -22
- package/dist/composites/doorbell-recent-panel.d.ts +9 -8
- package/dist/composites/empty-state.d.ts +8 -8
- package/dist/composites/error-box.d.ts +32 -17
- package/dist/composites/event-kind-visuals.d.ts +29 -18
- package/dist/composites/event-stream.d.ts +59 -42
- package/dist/composites/extensions/AssociationSlotCard.d.ts +45 -24
- package/dist/composites/extensions/ExtensionsPanel.d.ts +41 -18
- package/dist/composites/extensions/extensions-view-state.d.ts +71 -53
- package/dist/composites/filter-bar.d.ts +22 -21
- package/dist/composites/form-field.d.ts +9 -9
- package/dist/composites/format-state-value.d.ts +23 -51
- package/dist/composites/grouped-model-selector.d.ts +7 -6
- package/dist/composites/hls-quality.d.ts +26 -26
- package/dist/composites/hls-video.d.ts +62 -39
- package/dist/composites/hover-zoom-image.d.ts +35 -16
- package/dist/composites/icon-picker.d.ts +86 -50
- package/dist/composites/image-selector.d.ts +21 -20
- package/dist/composites/index.d.ts +204 -204
- package/dist/composites/inference-config-selector.d.ts +36 -35
- package/dist/composites/kebab-menu.d.ts +53 -35
- package/dist/composites/key-value-list.d.ts +14 -14
- package/dist/composites/log-stream-scroll.d.ts +24 -24
- package/dist/composites/log-stream.d.ts +81 -70
- package/dist/composites/login-form.d.ts +7 -6
- package/dist/composites/model-bound-slider.d.ts +46 -26
- package/dist/composites/model-picker.d.ts +20 -19
- package/dist/composites/mount-addon-page.d.ts +12 -12
- package/dist/composites/network-link-badge.d.ts +7 -6
- package/dist/composites/node-picker.d.ts +14 -13
- package/dist/composites/notification-targets-field.d.ts +76 -58
- package/dist/composites/notification-targets-options.d.ts +9 -6
- package/dist/composites/option-select/OptionSelect.d.ts +23 -22
- package/dist/composites/option-select/index.d.ts +4 -4
- package/dist/composites/option-select/option-select-model.d.ts +35 -35
- package/dist/composites/page-header.d.ts +6 -6
- package/dist/composites/peer-connection-config.d.ts +9 -9
- package/dist/composites/phase-icon.d.ts +10 -3
- package/dist/composites/pipeline-builder.d.ts +21 -13
- package/dist/composites/pipeline-matrix-shared.d.ts +159 -150
- package/dist/composites/pipeline-runtime-selector.d.ts +12 -11
- package/dist/composites/pipeline-step.d.ts +39 -31
- package/dist/composites/placeholder-field/PlaceholderChipField.d.ts +23 -22
- package/dist/composites/placeholder-field/index.d.ts +1 -1
- package/dist/composites/provider-badge.d.ts +6 -5
- package/dist/composites/ptz-overlay.d.ts +38 -18
- package/dist/composites/qr-code.d.ts +24 -10
- package/dist/composites/reconnect-schedule.d.ts +22 -22
- package/dist/composites/resolve-step-default-model.d.ts +94 -94
- package/dist/composites/response-log.d.ts +7 -6
- package/dist/composites/root-model-source.d.ts +21 -10
- package/dist/composites/scope-picker.d.ts +49 -25
- package/dist/composites/section-card.d.ts +19 -11
- package/dist/composites/setting-row.d.ts +39 -21
- package/dist/composites/snapshot-button.d.ts +23 -19
- package/dist/composites/sort-header-button.d.ts +25 -8
- package/dist/composites/stat-card.d.ts +20 -8
- package/dist/composites/state-values-stream.d.ts +49 -24
- package/dist/composites/status-badge.d.ts +10 -8
- package/dist/composites/step-inspector/gate-control.d.ts +13 -12
- package/dist/composites/step-inspector/index.d.ts +8 -8
- package/dist/composites/step-inspector/layered-settings-form.d.ts +41 -30
- package/dist/composites/step-inspector/segmented-choice.d.ts +8 -7
- package/dist/composites/step-inspector/setting-values.d.ts +13 -8
- package/dist/composites/step-inspector/step-detail-dock.d.ts +39 -23
- package/dist/composites/step-inspector/step-inspector-panel.d.ts +34 -28
- package/dist/composites/step-inspector/step-model-row.d.ts +29 -24
- package/dist/composites/step-inspector/step-search.d.ts +11 -11
- package/dist/composites/step-timings.d.ts +7 -6
- package/dist/composites/step-tree.d.ts +17 -12
- package/dist/composites/stream-broker-selector.d.ts +29 -8
- package/dist/composites/stream-debug/stream-debug-overlay.d.ts +40 -40
- package/dist/composites/stream-debug/webrtc-debug-stats.d.ts +144 -129
- package/dist/composites/stream-panel.d.ts +212 -201
- package/dist/composites/table-sort.d.ts +61 -61
- package/dist/composites/timezone-selector.d.ts +15 -13
- package/dist/composites/training/send-frame-to-training.d.ts +5 -4
- package/dist/composites/training/training-collection-picker.d.ts +4 -3
- package/dist/composites/training/training-refusal-text.d.ts +6 -6
- package/dist/composites/unit-picker/UnitPicker.d.ts +19 -14
- package/dist/composites/unit-picker/index.d.ts +1 -1
- package/dist/composites/use-data-table-filter.d.ts +19 -19
- package/dist/composites/version-badge.d.ts +19 -18
- package/dist/composites/webrtc-diagnostics/EndpointTestCard.d.ts +7 -7
- package/dist/composites/webrtc-diagnostics/HubSessionTestCard.d.ts +14 -14
- package/dist/composites/webrtc-diagnostics/RunReport.d.ts +10 -5
- package/dist/composites/webrtc-diagnostics/endpoint-probe.d.ts +41 -21
- package/dist/composites/webrtc-diagnostics/endpoint-test.d.ts +37 -32
- package/dist/composites/webrtc-diagnostics/format.d.ts +3 -3
- package/dist/composites/webrtc-diagnostics/ice-candidates.d.ts +49 -49
- package/dist/composites/webrtc-diagnostics/nat-mapping.d.ts +36 -36
- package/dist/composites/webrtc-diagnostics/session-run.d.ts +108 -95
- package/dist/composites/webrtc-diagnostics/session-verdict.d.ts +29 -20
- package/dist/composites/widget-panel.d.ts +23 -23
- package/dist/composites/widget-slot.d.ts +35 -17
- package/dist/contexts/custom-field-renderers.d.ts +53 -17
- package/dist/contexts/device-context.d.ts +32 -12
- package/dist/contexts/device-quick-detail.d.ts +13 -4
- package/dist/contexts/player-overlays.d.ts +82 -42
- package/dist/contexts/recorded-playback.d.ts +40 -18
- package/dist/contexts/system-context.d.ts +28 -13
- package/dist/contexts/vod-playback.d.ts +39 -22
- package/dist/contexts/widget-registry.d.ts +139 -102
- package/dist/contexts/zone-editing.d.ts +69 -46
- package/dist/generated/system-hooks.d.ts +17 -1
- package/dist/hooks/index.d.ts +43 -43
- package/dist/hooks/turn-server-cache.d.ts +69 -69
- package/dist/hooks/use-capability-presence.d.ts +65 -28
- package/dist/hooks/use-cluster-nodes.d.ts +54 -27
- package/dist/hooks/use-device-autotrack.d.ts +7 -7
- package/dist/hooks/use-device-battery.d.ts +24 -11
- package/dist/hooks/use-device-cap-slice.d.ts +15 -15
- package/dist/hooks/use-device-capability.d.ts +61 -27
- package/dist/hooks/use-device-detections.d.ts +32 -32
- package/dist/hooks/use-device-features.d.ts +18 -18
- package/dist/hooks/use-device-list-page-size.d.ts +19 -6
- package/dist/hooks/use-device-network-link.d.ts +15 -7
- package/dist/hooks/use-device-proxy.d.ts +98 -92
- package/dist/hooks/use-device-snapshot.d.ts +23 -23
- package/dist/hooks/use-device-webrtc.d.ts +211 -205
- package/dist/hooks/use-devices.d.ts +9 -9
- package/dist/hooks/use-doorbell-events.d.ts +13 -13
- package/dist/hooks/use-event-stream.d.ts +6 -3
- package/dist/hooks/use-is-mobile.d.ts +5 -5
- package/dist/hooks/use-live-buffer.d.ts +5 -5
- package/dist/hooks/use-live-event.d.ts +1 -1
- package/dist/hooks/use-navigation.d.ts +20 -20
- package/dist/hooks/use-optimistic-slice.d.ts +13 -13
- package/dist/hooks/use-persisted-page-size.d.ts +10 -10
- package/dist/hooks/use-ptz.d.ts +108 -108
- package/dist/hooks/use-stationary-overlay.d.ts +37 -37
- package/dist/hooks/use-system-query.d.ts +33 -10
- package/dist/hooks/use-url-query.d.ts +3 -3
- package/dist/icons/index.d.ts +2 -2
- package/dist/icons/provider-icons.d.ts +2 -2
- package/dist/icons/status-icons.d.ts +2 -2
- package/dist/index.cjs +123 -69
- package/dist/index.d.ts +31 -27
- package/dist/index.js +123 -69
- package/dist/lib/cap-error.d.ts +18 -39
- package/dist/lib/cn.d.ts +1 -1
- package/dist/lib/fleet-query-defaults.d.ts +68 -34
- package/dist/lib/format-control-datetime.d.ts +16 -16
- package/dist/lib/format-duration.d.ts +12 -12
- package/dist/lib/format-last-seen.d.ts +5 -18
- package/dist/lib/format-numeric.d.ts +7 -7
- package/dist/lib/hub-mount.d.ts +8 -42
- package/dist/lib/index.d.ts +21 -21
- package/dist/lib/phase-config.d.ts +24 -11
- package/dist/lib/pipeline-mirror.d.ts +16 -16
- package/dist/lib/recorded-control-protocol.d.ts +41 -43
- package/dist/lib/resolve-sensor-display.d.ts +36 -20
- package/dist/lib/responsive.d.ts +54 -54
- package/dist/lib/scrub-controller.d.ts +75 -78
- package/dist/lib/shared-context.d.ts +27 -2
- package/dist/lib/tailwind-variants.d.ts +20 -20
- package/dist/primitives/badge.d.ts +5 -10
- package/dist/primitives/bottom-sheet.d.ts +7 -7
- package/dist/primitives/button.d.ts +5 -9
- package/dist/primitives/card.d.ts +4 -8
- package/dist/primitives/checkbox.d.ts +3 -4
- package/dist/primitives/collapsible-card.d.ts +23 -13
- package/dist/primitives/dialog.d.ts +33 -59
- package/dist/primitives/dropdown.d.ts +13 -13
- package/dist/primitives/floating-panel.d.ts +41 -20
- package/dist/primitives/icon-button.d.ts +8 -12
- package/dist/primitives/index.d.ts +22 -22
- package/dist/primitives/input.d.ts +6 -16
- package/dist/primitives/label.d.ts +3 -4
- package/dist/primitives/mobile-drawer.d.ts +8 -8
- package/dist/primitives/password-input.d.ts +18 -18
- package/dist/primitives/popover.d.ts +7 -7
- package/dist/primitives/scroll-area.d.ts +3 -4
- package/dist/primitives/select.d.ts +20 -20
- package/dist/primitives/separator.d.ts +4 -8
- package/dist/primitives/skeleton.d.ts +3 -4
- package/dist/primitives/switch.d.ts +6 -6
- package/dist/primitives/tabs.d.ts +26 -26
- package/dist/primitives/tooltip.d.ts +12 -12
- package/dist/theme/create-theme.d.ts +1 -1
- package/dist/theme/defaults.d.ts +1 -1
- package/dist/theme/index.d.ts +6 -6
- package/dist/theme/theme-provider.d.ts +8 -7
- package/dist/theme/theme-to-css.d.ts +1 -1
- package/dist/theme/types.d.ts +98 -100
- package/dist/theme/use-theme-mode.d.ts +1 -1
- package/dist/trpc-react.d.ts +23 -3
- package/dist/widgets/host-widgets.d.ts +4 -4
- package/package.json +8 -4
- package/src/tailwind/camstack-theme.css +11 -0
- package/dist/composites/unit-picker/UnitPicker.spec.d.ts +0 -1
|
@@ -1,45 +1,77 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* What a clip tile SHOWS — and why, when it shows nothing.
|
|
3
|
+
*
|
|
4
|
+
* Three mutually exclusive shapes arrive on a `Clip` (D549 decision 5):
|
|
5
|
+
*
|
|
6
|
+
* - `thumbnail` — VOUCHED. A JPEG is already on disk. Stamping this from a
|
|
7
|
+
* URL template once pointed 35 % of one camera's tiles at a 404, which is
|
|
8
|
+
* why it now means "confirmed", not "probably".
|
|
9
|
+
* - `thumbnailMint` — an OFFER. A route that MAY produce a still, asked only
|
|
10
|
+
* for rows actually on screen. It answers 200 with the image, or **204**
|
|
11
|
+
* with a refusal.
|
|
12
|
+
* - `thumbnailUnavailable.reason` — the provider already knows no mint can
|
|
13
|
+
* succeed now, so the tile draws the reason instead of firing a request.
|
|
14
|
+
*
|
|
15
|
+
* A clip that carries NONE of the three is its own case and says so. Falling
|
|
16
|
+
* through to an empty grey box is the "we did not look" ambiguity the whole
|
|
17
|
+
* vouching rule exists to remove, and a box is indistinguishable from a
|
|
18
|
+
* loading one.
|
|
19
|
+
*
|
|
20
|
+
* ## "Not yet" and "never" are two answers (D563)
|
|
21
|
+
*
|
|
22
|
+
* The 204 carries a CODE (`x-camstack-reason-code`), the camera's own PROSE
|
|
23
|
+
* (`x-camstack-reason`) and a DISPOSITION (`x-camstack-disposition`). Only the
|
|
24
|
+
* disposition decides whether the tile comes back — this file does not
|
|
25
|
+
* classify codes, because a client that pattern-matches a server's words
|
|
26
|
+
* drifts the first time a word changes, and it already had: the route sends
|
|
27
|
+
* `queue-full: 16 thumbnail mints already waiting for host …` while the table
|
|
28
|
+
* below was keyed by the bare token, so on the live hub EVERY refusal rendered
|
|
29
|
+
* as `Refused: <prose>` — measured on 592, 43 of the 60 tiles of one page.
|
|
30
|
+
*
|
|
31
|
+
* A missing or unrecognised disposition is FINAL. That is not a guess, it is
|
|
32
|
+
* the old behaviour: an addon built before D563 sends no such header and its
|
|
33
|
+
* tiles latch exactly as they used to, instead of gaining a retry loop nobody
|
|
34
|
+
* tested against that build.
|
|
35
|
+
*/
|
|
36
|
+
import type { Clip } from "@camstack/types";
|
|
2
37
|
/** The five things a tile can be. */
|
|
3
38
|
export type ClipTileMedia = {
|
|
4
|
-
|
|
5
|
-
|
|
39
|
+
readonly kind: "vouched";
|
|
40
|
+
readonly url: string;
|
|
6
41
|
} | {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
readonly reason: string;
|
|
15
|
-
readonly text: string;
|
|
16
|
-
readonly retryAfterMs: number | null;
|
|
42
|
+
readonly kind: "mint";
|
|
43
|
+
readonly url: string;
|
|
44
|
+
} | {
|
|
45
|
+
readonly kind: "deferred";
|
|
46
|
+
readonly reason: string;
|
|
47
|
+
readonly text: string;
|
|
48
|
+
readonly retryAfterMs: number | null;
|
|
17
49
|
} | {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
50
|
+
readonly kind: "unavailable";
|
|
51
|
+
readonly reason: string;
|
|
52
|
+
readonly text: string;
|
|
21
53
|
} | {
|
|
22
|
-
|
|
23
|
-
|
|
54
|
+
readonly kind: "none";
|
|
55
|
+
readonly text: string;
|
|
24
56
|
};
|
|
25
57
|
/** A 204, as its three headers arrived. `undefined` where a header was absent
|
|
26
|
-
|
|
27
|
-
|
|
58
|
+
* — which is a real case, not a defect: an addon older than D563 sends only
|
|
59
|
+
* the prose. */
|
|
28
60
|
export interface MintRefusalHeaders {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
61
|
+
readonly code: string | undefined;
|
|
62
|
+
readonly reason: string;
|
|
63
|
+
readonly disposition: string | undefined;
|
|
64
|
+
readonly retryAfterMs?: number | null;
|
|
33
65
|
}
|
|
34
66
|
/** What to draw for one clip's tile. */
|
|
35
67
|
export declare function resolveTileMedia(clip: Clip): ClipTileMedia;
|
|
36
68
|
/**
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
69
|
+
* A 204, as something the tile can draw.
|
|
70
|
+
*
|
|
71
|
+
* `deferred` is the ONLY answer that comes back, and only because the server
|
|
72
|
+
* said so. Everything else — an unknown disposition, an absent one, a code
|
|
73
|
+
* this build has never heard of — is final, so the failure mode of a
|
|
74
|
+
* vocabulary that moves is a tile that stops early, never one that asks for
|
|
75
|
+
* ever.
|
|
76
|
+
*/
|
|
45
77
|
export declare function describeRefusal(headers: MintRefusalHeaders): ClipTileMedia;
|
|
@@ -1,56 +1,86 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
/**
|
|
2
|
+
* The clips browser's on-screen state, decided once, in one place.
|
|
3
|
+
*
|
|
4
|
+
* Four states have to be TELLABLE APART on screen, and that is the whole point
|
|
5
|
+
* of the external-videoclips line (D549 § 7b):
|
|
6
|
+
*
|
|
7
|
+
* - `loading` — never rendered as empty. A list drawn while a query is still
|
|
8
|
+
* pending is a claim the data does not support.
|
|
9
|
+
* - `empty` — a band with no rows, carrying the BAND and the sources that
|
|
10
|
+
* answered for it. "No clips" with neither of those is the lie this whole
|
|
11
|
+
* surface exists to stop telling.
|
|
12
|
+
* - `refused` — the selected band is wider than the bound `clip-band.ts`
|
|
13
|
+
* sets, so nothing was asked. Added with the timebar (D564): a band can be
|
|
14
|
+
* made arbitrarily wide and a day could not, and a range that answered
|
|
15
|
+
* partly would read as the whole of it.
|
|
16
|
+
* - `listed` — rows, plus every source that could NOT contribute, named with
|
|
17
|
+
* its reason verbatim. One unreachable source never empties the others
|
|
18
|
+
* (the dispatcher's rule 2), and the operator must see both halves: today
|
|
19
|
+
* a hub child lists `onboard` and shows `native:reolink:hub` unreachable.
|
|
20
|
+
* - `failed` — the read itself failed. Not an answer, so not "empty" either.
|
|
21
|
+
*
|
|
22
|
+
* There is no client-side source filter here, and that is a decision, not an
|
|
23
|
+
* omission. `listClips` is asked of ONE provider at a time, and NAMING it is
|
|
24
|
+
* required (`provider`, D554 amended) — the operator settled it on 2026-09-20,
|
|
25
|
+
* *"l'utilizzatore è uno solo"* [there is only one user] — so what arrives is already the answer for
|
|
26
|
+
* the provider on screen and there is nothing to filter out of it. What
|
|
27
|
+
* survives unchanged is the rule the old filter existed to protect: every
|
|
28
|
+
* source a camera HAS is still described here, with its availability,
|
|
29
|
+
* whichever provider was asked.
|
|
30
|
+
*/
|
|
31
|
+
import type { Clip, ClipSource } from "@camstack/types";
|
|
32
|
+
import type { ClipBand, ClipBandPlan } from "./clip-band.js";
|
|
33
|
+
import { type ClipSourceNotice } from "./clip-source-state.js";
|
|
4
34
|
/** React Query's settled-ness, narrowed to what this decision needs. */
|
|
5
|
-
export type ClipQueryStatus =
|
|
35
|
+
export type ClipQueryStatus = "pending" | "error" | "success";
|
|
6
36
|
export interface ClipsViewInput {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
/**
|
|
38
|
+
* The period the list is about, and whether it may be asked for at all
|
|
39
|
+
* (`clip-band.ts`). A refused plan means NO query was fired, which is why
|
|
40
|
+
* the refusal has to be decided here rather than inferred from a query that
|
|
41
|
+
* will stay `pending` for ever.
|
|
42
|
+
*/
|
|
43
|
+
readonly plan: ClipBandPlan;
|
|
44
|
+
/**
|
|
45
|
+
* The provider the clip list was asked of, or `null` when the camera lists
|
|
46
|
+
* NO source to ask.
|
|
47
|
+
*
|
|
48
|
+
* Naming one is required (D554 amended), so "nobody to ask" is a real state and it
|
|
49
|
+
* has to be told apart from "not answered yet": the query never fires, its
|
|
50
|
+
* status stays `pending` for ever, and a surface that only consults the
|
|
51
|
+
* status spins against a question with no addressee. Exactly the trap
|
|
52
|
+
* `too-wide` has, arriving from the other end.
|
|
53
|
+
*/
|
|
54
|
+
readonly provider: string | null;
|
|
55
|
+
readonly clipsStatus: ClipQueryStatus;
|
|
56
|
+
readonly clips: readonly Clip[];
|
|
57
|
+
readonly sourcesStatus: ClipQueryStatus;
|
|
58
|
+
readonly sources: readonly ClipSource[];
|
|
59
|
+
readonly clipsError?: string;
|
|
60
|
+
readonly sourcesError?: string;
|
|
31
61
|
}
|
|
32
62
|
export type ClipsViewState = {
|
|
33
|
-
|
|
63
|
+
readonly kind: "loading";
|
|
34
64
|
} | {
|
|
35
|
-
|
|
36
|
-
|
|
65
|
+
readonly kind: "failed";
|
|
66
|
+
readonly message: string;
|
|
37
67
|
} | {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
68
|
+
/** The band is wider than the bound, so nothing was asked. */
|
|
69
|
+
readonly kind: "refused";
|
|
70
|
+
readonly band: ClipBand;
|
|
71
|
+
readonly localDays: number;
|
|
72
|
+
readonly maxLocalDays: number;
|
|
43
73
|
} | {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
74
|
+
readonly kind: "empty";
|
|
75
|
+
readonly band: ClipBand;
|
|
76
|
+
readonly answered: readonly ClipSourceNotice[];
|
|
77
|
+
readonly silent: readonly ClipSourceNotice[];
|
|
78
|
+
/** No source could answer at all — a different fact from a quiet day. */
|
|
79
|
+
readonly nobodyAnswered: boolean;
|
|
50
80
|
} | {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
81
|
+
readonly kind: "listed";
|
|
82
|
+
readonly clips: readonly Clip[];
|
|
83
|
+
readonly answered: readonly ClipSourceNotice[];
|
|
84
|
+
readonly silent: readonly ClipSourceNotice[];
|
|
55
85
|
};
|
|
56
86
|
export declare function resolveClipsView(input: ClipsViewInput): ClipsViewState;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import { type JSX } from "react";
|
|
1
2
|
export interface CodeBlockProps {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
children: string;
|
|
4
|
+
maxHeight?: number;
|
|
5
|
+
className?: string;
|
|
5
6
|
}
|
|
6
|
-
export declare function CodeBlock({ children, maxHeight, className }: CodeBlockProps):
|
|
7
|
+
export declare function CodeBlock({ children, maxHeight, className }: CodeBlockProps): JSX.Element;
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { type JSX } from "react";
|
|
2
|
+
import type { ConfigUISchema, FieldProbeResult } from "@camstack/types";
|
|
3
|
+
import type { ProbeState } from "./config-form-field";
|
|
3
4
|
export type TranslationFn = (key: string) => string;
|
|
4
5
|
export declare function resolveLabel(value: string | undefined, t?: TranslationFn): string | undefined;
|
|
5
6
|
interface FormBuilderProps {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
schema: ConfigUISchema;
|
|
8
|
+
values: Record<string, unknown>;
|
|
9
|
+
onChange: (values: Record<string, unknown>) => void;
|
|
10
|
+
disabled?: boolean;
|
|
11
|
+
translationFn?: TranslationFn;
|
|
12
|
+
onTestField?: (key: string, value: unknown) => Promise<FieldProbeResult>;
|
|
13
|
+
/** External probe results from useProbeAll hook */
|
|
14
|
+
probeResults?: Record<string, ProbeState>;
|
|
15
|
+
/** Callback to clear a probe result when a field value changes */
|
|
16
|
+
onClearProbe?: (key: string) => void;
|
|
16
17
|
}
|
|
17
|
-
export declare function ConfigFormBuilder({ schema, values, onChange, disabled, translationFn, onTestField, probeResults, onClearProbe
|
|
18
|
+
export declare function ConfigFormBuilder({ schema, values, onChange, disabled, translationFn, onTestField, probeResults, onClearProbe }: FormBuilderProps): JSX.Element;
|
|
18
19
|
export {};
|
|
@@ -1,70 +1,71 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { type JSX } from "react";
|
|
2
|
+
import type { ConfigField, ConfigNodeSelectField, ConfigNodeMultiSelectField, FieldProbeResult } from "@camstack/types";
|
|
3
|
+
import type { TranslationFn } from "./config-form-builder";
|
|
3
4
|
/** Probe state for a single field — exported for callers that need to track probe lifecycle externally. */
|
|
4
5
|
export interface ProbeState {
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
status: "probing" | "ok" | "error";
|
|
7
|
+
result?: FieldProbeResult;
|
|
7
8
|
}
|
|
8
9
|
interface FormFieldProps {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
10
|
+
field: ConfigField;
|
|
11
|
+
values: Record<string, unknown>;
|
|
12
|
+
onChange: (key: string, value: unknown) => void;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
translationFn?: TranslationFn;
|
|
15
|
+
/**
|
|
16
|
+
* Dedicated probe callback — used by the device-creation dialog where
|
|
17
|
+
* the device doesn't exist yet so the generic `onAction` routing
|
|
18
|
+
* cannot resolve an addon owner. For existing-device forms prefer
|
|
19
|
+
* `onAction` with action `'test-probe'`: the probe field falls back
|
|
20
|
+
* to it when `onTestField` is absent, so the two paths converge.
|
|
21
|
+
*/
|
|
22
|
+
onTestField?: (key: string, value: unknown) => Promise<FieldProbeResult>;
|
|
23
|
+
/** External probe result (from "Test All" button) */
|
|
24
|
+
externalProbe?: {
|
|
25
|
+
status: "probing" | "ok" | "error";
|
|
26
|
+
result?: FieldProbeResult;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Inline-action callback. Fired by icon buttons on any field
|
|
30
|
+
* (copy-value, regenerate-rtsp-token, …) and by the probe field's
|
|
31
|
+
* Test button when `onTestField` is not provided — in that case the
|
|
32
|
+
* action name is `'test-probe'` and the current field value flows
|
|
33
|
+
* through the third arg so the handler can probe it.
|
|
34
|
+
*
|
|
35
|
+
* Returns `Promise<unknown>` (not `void`) because some actions yield
|
|
36
|
+
* a result the caller wants (the probe returns a `FieldProbeResult`).
|
|
37
|
+
*/
|
|
38
|
+
onAction?: (action: string, key: string, value?: unknown) => Promise<unknown>;
|
|
39
|
+
/** All fields in the section — used to resolve defaults for showWhen conditions */
|
|
40
|
+
allFields?: readonly ConfigField[];
|
|
40
41
|
}
|
|
41
|
-
export declare function NodeSelectField({ field, value, onChange, disabled, translationFn
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
}):
|
|
48
|
-
export declare function NodeMultiSelectField({ field, value, onChange, disabled, translationFn
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}):
|
|
42
|
+
export declare function NodeSelectField({ field, value, onChange, disabled, translationFn }: {
|
|
43
|
+
field: ConfigNodeSelectField;
|
|
44
|
+
value: unknown;
|
|
45
|
+
onChange: (v: unknown) => void;
|
|
46
|
+
disabled?: boolean;
|
|
47
|
+
translationFn?: TranslationFn;
|
|
48
|
+
}): JSX.Element | null;
|
|
49
|
+
export declare function NodeMultiSelectField({ field, value, onChange, disabled, translationFn }: {
|
|
50
|
+
field: ConfigNodeMultiSelectField;
|
|
51
|
+
value: unknown;
|
|
52
|
+
onChange: (v: unknown) => void;
|
|
53
|
+
disabled?: boolean;
|
|
54
|
+
translationFn?: TranslationFn;
|
|
55
|
+
}): JSX.Element | null;
|
|
55
56
|
/**
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
57
|
+
* Resolve a `ConfigCondition` against the form's flat values bag and the
|
|
58
|
+
* sibling-field list (used to recover schema defaults when the
|
|
59
|
+
* referenced field hasn't been touched yet). Returns `true` for fields
|
|
60
|
+
* with no `showWhen` — i.e. always visible — and for fields whose
|
|
61
|
+
* condition is missing a recognised operator (forward-compat: a future
|
|
62
|
+
* operator added to `ConfigCondition` won't accidentally hide every
|
|
63
|
+
* field on older clients).
|
|
64
|
+
*
|
|
65
|
+
* Exported so callers (FormBuilder section renderer, future
|
|
66
|
+
* sub-tab visibility checks, …) can pre-evaluate which fields would be
|
|
67
|
+
* rendered without instantiating a React subtree.
|
|
68
|
+
*/
|
|
68
69
|
export declare function isFieldVisible(field: ConfigField, values: Record<string, unknown>, allFields?: readonly ConfigField[]): boolean;
|
|
69
|
-
export declare function FormField({ field, values, onChange, disabled, translationFn, onTestField, externalProbe, allFields, onAction
|
|
70
|
+
export declare function FormField({ field, values, onChange, disabled, translationFn, onTestField, externalProbe, allFields, onAction }: FormFieldProps): JSX.Element | null;
|
|
70
71
|
export { FormField as ConfigFormField };
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { type JSX } from "react";
|
|
1
2
|
export interface ConfigIconFieldControlProps {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
/** The field's label — names the picker for assistive tech. */
|
|
4
|
+
readonly label: string;
|
|
5
|
+
/** The stored value (anything — only a vocabulary key is honoured). */
|
|
6
|
+
readonly value: unknown;
|
|
7
|
+
/** The field's default key; `''` when the schema declares none. */
|
|
8
|
+
readonly defaultKey: string;
|
|
9
|
+
readonly disabled?: boolean;
|
|
10
|
+
readonly onChange: (key: string) => void;
|
|
10
11
|
}
|
|
11
|
-
export declare function ConfigIconFieldControl({ label, value, defaultKey, disabled, onChange
|
|
12
|
+
export declare function ConfigIconFieldControl({ label, value, defaultKey, disabled, onChange }: ConfigIconFieldControlProps): JSX.Element;
|
|
@@ -1,41 +1,65 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* A keychain-stored secret in a settings form (D787, D789) — drawn as ONE
|
|
3
|
+
* password input with an eye.
|
|
4
|
+
*
|
|
5
|
+
* The form never holds the value. It receives the field's VIEW —
|
|
6
|
+
* `{ $secret, v, set: true }` when something is stored, `null` when nothing
|
|
7
|
+
* is — and sends back exactly one of three things:
|
|
8
|
+
*
|
|
9
|
+
* - the view, unchanged ........ KEEP (an untouched field sends nothing, so
|
|
10
|
+
* the hydrated view stays the value; a revealed
|
|
11
|
+
* value left as it was sends the view again);
|
|
12
|
+
* - a non-empty typed string ... CHANGE (the owner stores it in the keychain);
|
|
13
|
+
* - `{ $secretClear: true }` ... CLEAR — only when the operator emptied a box
|
|
14
|
+
* that showed a value they revealed or typed.
|
|
15
|
+
*
|
|
16
|
+
* `''` is never sent for "remove": the save path reads it as KEEP, because an
|
|
17
|
+
* empty string is what a defaults fallback writes back. An untouched field
|
|
18
|
+
* looks empty (a masked placeholder) and so can never clear by accident.
|
|
19
|
+
*
|
|
20
|
+
* The eye on an untouched stored secret asks the host's audited
|
|
21
|
+
* `keychain-admin.reveal` (provided with {@link SecretRevealProvider}) for the
|
|
22
|
+
* value; a host that provides none, or a pre-keychain inline value (no ref),
|
|
23
|
+
* cannot reveal — the eye then only shows what the operator types.
|
|
24
|
+
*/
|
|
25
|
+
import { type ConfigField, type SecretFieldView } from "@camstack/types";
|
|
26
|
+
import { type ReactNode, type JSX } from "react";
|
|
3
27
|
/** Returns the stored value of a ref (audited by the host). */
|
|
4
28
|
export type SecretRevealFn = (ref: string) => Promise<string>;
|
|
5
29
|
/** How long the System → Secrets page shows a revealed value. */
|
|
6
|
-
export declare const SECRET_REVEAL_MS =
|
|
30
|
+
export declare const SECRET_REVEAL_MS = 1e4;
|
|
7
31
|
/** What an untouched stored secret shows in place of its value. */
|
|
8
|
-
export declare const SECRET_MASK_PLACEHOLDER = "
|
|
9
|
-
export declare function SecretRevealProvider({ reveal, children
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
}):
|
|
32
|
+
export declare const SECRET_MASK_PLACEHOLDER = "••••••••";
|
|
33
|
+
export declare function SecretRevealProvider({ reveal, children }: {
|
|
34
|
+
readonly reveal: SecretRevealFn;
|
|
35
|
+
readonly children: ReactNode;
|
|
36
|
+
}): JSX.Element;
|
|
13
37
|
/** Does this value belong to the keychain rendering (a view, or "not set")? */
|
|
14
38
|
export declare function isKeychainFieldValue(value: unknown): boolean;
|
|
15
39
|
/**
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
40
|
+
* What the operator has done to the field. `untouched` shows nothing and
|
|
41
|
+
* sends nothing; `visible` holds text the operator can see — revealed (then
|
|
42
|
+
* `revealed` is the stored value) or typed.
|
|
43
|
+
*/
|
|
20
44
|
export type SecretEntry = {
|
|
21
|
-
|
|
45
|
+
readonly kind: "untouched";
|
|
22
46
|
} | {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
47
|
+
readonly kind: "visible";
|
|
48
|
+
readonly text: string;
|
|
49
|
+
readonly revealed: string | null;
|
|
26
50
|
};
|
|
27
51
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
52
|
+
* The value the form sends for an entry. `stored` — something is stored (or
|
|
53
|
+
* already marked for removal) — is what makes an emptied box a CLEAR.
|
|
54
|
+
*/
|
|
31
55
|
export declare function secretSubmitValue(entry: SecretEntry, original: SecretFieldView | null, stored: boolean): unknown;
|
|
32
56
|
export interface SecretFieldProps {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
57
|
+
readonly field: ConfigField;
|
|
58
|
+
/** The view (or null) the form was hydrated with, or what the operator has done since. */
|
|
59
|
+
readonly value: unknown;
|
|
60
|
+
readonly onChange: (value: unknown) => void;
|
|
61
|
+
readonly disabled?: boolean;
|
|
62
|
+
/** Multi-line entry (a PEM key). */
|
|
63
|
+
readonly multiline?: boolean;
|
|
40
64
|
}
|
|
41
|
-
export declare function SecretFieldControl({ field, value, onChange, disabled, multiline
|
|
65
|
+
export declare function SecretFieldControl({ field, value, onChange, disabled, multiline }: SecretFieldProps): JSX.Element;
|
|
@@ -1,41 +1,54 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* ConfirmActionButton — destructive-action button with a modal confirm.
|
|
3
|
+
*
|
|
4
|
+
* Two-step UX for any operation operators shouldn't trigger by accident:
|
|
5
|
+
* reboot device, restart addon, regenerate token, etc. The trigger is a
|
|
6
|
+
* normal Button that opens a Dialog; confirming runs the async action,
|
|
7
|
+
* the trigger spinner-disables itself for the duration, and the dialog
|
|
8
|
+
* closes on success. Errors surface inline at the dialog's bottom.
|
|
9
|
+
*
|
|
10
|
+
* Generic on `TResult` so callers don't have to discard the return
|
|
11
|
+
* value. Pass an `icon` to render it inside the trigger (e.g. RotateCw
|
|
12
|
+
* for reboot, RefreshCw for restart).
|
|
13
|
+
*/
|
|
14
|
+
import { type ReactNode, type ComponentType, type JSX } from "react";
|
|
15
|
+
import { type ButtonProps } from "../primitives/button";
|
|
3
16
|
export interface ConfirmActionButtonProps<TResult> {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
17
|
+
/** Visible label on the trigger button. */
|
|
18
|
+
readonly label: string;
|
|
19
|
+
/** Icon component (lucide-react) rendered inside the trigger. */
|
|
20
|
+
readonly icon?: ComponentType<{
|
|
21
|
+
className?: string;
|
|
22
|
+
}>;
|
|
23
|
+
/** Dialog title. Defaults to "Confirm action". */
|
|
24
|
+
readonly title?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Dialog body — accepts either a string (rendered as DialogDescription)
|
|
27
|
+
* or arbitrary ReactNode for callers that need lists, code blocks, etc.
|
|
28
|
+
*/
|
|
29
|
+
readonly description?: ReactNode;
|
|
30
|
+
/** Label on the confirm button inside the dialog. Defaults to `label`. */
|
|
31
|
+
readonly confirmLabel?: string;
|
|
32
|
+
/** Visual variant for the trigger button (defaults to `outline`). */
|
|
33
|
+
readonly triggerVariant?: ButtonProps["variant"];
|
|
34
|
+
/**
|
|
35
|
+
* Visual variant for the confirm button inside the dialog. Defaults to
|
|
36
|
+
* `danger` since this component is meant for destructive actions.
|
|
37
|
+
*/
|
|
38
|
+
readonly confirmVariant?: ButtonProps["variant"];
|
|
39
|
+
/** Trigger button size — propagated to the underlying Button. */
|
|
40
|
+
readonly size?: ButtonProps["size"];
|
|
41
|
+
/** Disable the trigger entirely (gates rendering instead of UX state). */
|
|
42
|
+
readonly disabled?: boolean;
|
|
43
|
+
/** Optional extra class name on the trigger. */
|
|
44
|
+
readonly className?: string;
|
|
45
|
+
/**
|
|
46
|
+
* The async action to run on confirm. Must throw on failure so this
|
|
47
|
+
* component can surface the error inline. The result is returned to
|
|
48
|
+
* `onSuccess` for callers that need it (e.g. to invalidate queries).
|
|
49
|
+
*/
|
|
50
|
+
readonly action: () => Promise<TResult>;
|
|
51
|
+
/** Called after `action` resolves, with the result. */
|
|
52
|
+
readonly onSuccess?: (result: TResult) => void;
|
|
40
53
|
}
|
|
41
|
-
export declare function ConfirmActionButton<TResult>({ label, icon: Icon, title, description, confirmLabel, triggerVariant, confirmVariant, size, disabled, className, action, onSuccess
|
|
54
|
+
export declare function ConfirmActionButton<TResult>({ label, icon: Icon, title, description, confirmLabel, triggerVariant, confirmVariant, size, disabled, className, action, onSuccess }: ConfirmActionButtonProps<TResult>): JSX.Element;
|