@camstack/ui-library 0.1.39 → 0.1.40
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/addon-global-settings-form.d.ts +60 -0
- package/dist/composites/addon-page-props.d.ts +12 -0
- package/dist/composites/agent-step-editor.d.ts +15 -0
- package/dist/composites/app-shell/app-shell.d.ts +19 -0
- package/dist/composites/app-shell/index.d.ts +3 -0
- package/dist/composites/app-shell/sidebar-item.d.ts +10 -0
- package/dist/composites/app-shell/sidebar.d.ts +14 -0
- package/dist/composites/audio-classification-list.d.ts +20 -0
- package/dist/composites/audio-level-waveform.d.ts +35 -0
- package/dist/composites/audio-waveform.d.ts +20 -0
- package/dist/composites/battery-badge.d.ts +12 -0
- package/dist/composites/breadcrumb.d.ts +25 -0
- package/dist/composites/camera-stream-player.d.ts +87 -0
- package/dist/composites/code-block.d.ts +6 -0
- package/dist/composites/config-form-builder.d.ts +18 -0
- package/dist/composites/config-form-field.d.ts +70 -0
- package/dist/composites/confirm-action-button.d.ts +41 -0
- package/dist/composites/confirm-dialog.d.ts +13 -0
- package/dist/composites/data-table/data-table-header.d.ts +10 -0
- package/dist/composites/data-table/data-table-pagination.d.ts +9 -0
- package/dist/composites/data-table/data-table-row.d.ts +10 -0
- package/dist/composites/data-table/data-table.d.ts +2 -0
- package/dist/composites/data-table/index.d.ts +2 -0
- package/dist/composites/data-table/types.d.ts +34 -0
- package/dist/composites/data-table.d.ts +37 -0
- package/dist/composites/detection-canvas.d.ts +29 -0
- package/dist/composites/detection-colors.d.ts +15 -0
- package/dist/composites/detection-overlay.d.ts +9 -0
- package/dist/composites/detection-result-tree.d.ts +11 -0
- package/dist/composites/dev-shell.d.ts +20 -0
- package/dist/composites/device-activity-panel.d.ts +29 -0
- package/dist/composites/device-card.d.ts +38 -0
- package/dist/composites/device-grid.d.ts +12 -0
- package/dist/composites/device-item/actions.d.ts +9 -0
- package/dist/composites/device-item/children-accordion.d.ts +11 -0
- package/dist/composites/device-item/features.d.ts +17 -0
- package/dist/composites/device-item/header.d.ts +14 -0
- package/dist/composites/device-item/helpers.d.ts +147 -0
- package/dist/composites/device-item/index.d.ts +5 -0
- package/dist/composites/device-item/preview.d.ts +23 -0
- package/dist/composites/device-item/status-dot.d.ts +5 -0
- package/dist/composites/device-list/empty-state.d.ts +6 -0
- package/dist/composites/device-list/filter-chips.d.ts +19 -0
- package/dist/composites/device-list/group.d.ts +6 -0
- package/dist/composites/device-list/index.d.ts +31 -0
- package/dist/composites/device-list/pagination.d.ts +18 -0
- package/dist/composites/device-list/url-state.d.ts +24 -0
- package/dist/composites/discovery-panel.d.ts +26 -0
- package/dist/composites/doorbell-recent-panel.d.ts +10 -0
- package/dist/composites/empty-state.d.ts +10 -0
- package/dist/composites/event-stream.d.ts +48 -0
- package/dist/composites/filter-bar.d.ts +28 -0
- package/dist/composites/form-field.d.ts +11 -0
- package/dist/composites/image-selector.d.ts +25 -0
- package/dist/composites/index.d.ts +99 -0
- package/dist/composites/inference-config-selector.d.ts +44 -0
- package/dist/composites/kebab-menu.d.ts +39 -0
- package/dist/composites/key-value-list.d.ts +9 -0
- package/dist/composites/log-stream.d.ts +61 -0
- package/dist/composites/login-form.d.ts +8 -0
- package/dist/composites/mount-addon-page.d.ts +16 -0
- package/dist/composites/node-picker.d.ts +15 -0
- package/dist/composites/page-header.d.ts +8 -0
- package/dist/composites/phase-icon.d.ts +5 -0
- package/dist/composites/pipeline-builder.d.ts +43 -0
- package/dist/composites/pipeline-runtime-selector.d.ts +16 -0
- package/dist/composites/pipeline-step.d.ts +65 -0
- package/dist/composites/pipeline-tree-matrix.d.ts +31 -0
- package/dist/composites/provider-badge.d.ts +7 -0
- package/dist/composites/ptz-overlay.d.ts +20 -0
- package/dist/composites/response-log.d.ts +9 -0
- package/dist/composites/slide-over-panel.d.ts +11 -0
- package/dist/composites/snapshot-button.d.ts +25 -0
- package/dist/composites/stat-card.d.ts +10 -0
- package/dist/composites/state-values-stream.d.ts +30 -0
- package/dist/composites/status-badge.d.ts +10 -0
- package/dist/composites/step-timings.d.ts +9 -0
- package/dist/composites/step-tree-master.d.ts +28 -0
- package/dist/composites/stream-panel.d.ts +143 -0
- package/dist/composites/version-badge.d.ts +24 -0
- package/dist/composites/widget-slot.d.ts +20 -0
- package/dist/contexts/custom-field-renderers.d.ts +26 -0
- package/dist/contexts/device-context.d.ts +20 -0
- package/dist/contexts/player-overlays.d.ts +56 -0
- package/dist/contexts/system-context.d.ts +19 -0
- package/dist/contexts/widget-registry.d.ts +68 -0
- package/dist/contexts/zone-editing.d.ts +59 -0
- package/dist/generated/system-hooks.d.ts +933 -0
- package/dist/hooks/index.d.ts +27 -0
- package/dist/hooks/use-cluster-nodes.d.ts +17 -0
- package/dist/hooks/use-debounced-string.d.ts +1 -0
- package/dist/hooks/use-device-battery.d.ts +14 -0
- package/dist/hooks/use-device-capability.d.ts +17 -0
- package/dist/hooks/use-device-detections.d.ts +50 -0
- package/dist/hooks/use-device-features.d.ts +25 -0
- package/dist/hooks/use-device-proxy.d.ts +106 -0
- package/dist/hooks/use-device-snapshot.d.ts +10 -0
- package/dist/hooks/use-device-webrtc.d.ts +108 -0
- package/dist/hooks/use-devices.d.ts +13 -0
- package/dist/hooks/use-doorbell-events.d.ts +20 -0
- package/dist/hooks/use-event-invalidation.d.ts +1 -0
- package/dist/hooks/use-event-stream.d.ts +5 -0
- package/dist/hooks/use-is-mobile.d.ts +8 -0
- package/dist/hooks/use-live-buffer.d.ts +8 -0
- package/dist/hooks/use-live-event.d.ts +3 -0
- package/dist/hooks/use-ptz.d.ts +54 -0
- package/dist/hooks/use-system-query.d.ts +12 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/provider-icons.d.ts +3 -0
- package/dist/icons/status-icons.d.ts +3 -0
- package/dist/index.cjs +23484 -14252
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +14 -3787
- package/dist/index.js +22810 -13741
- package/dist/index.js.map +1 -1
- package/dist/lib/cn.d.ts +2 -0
- package/dist/lib/index.d.ts +8 -0
- package/dist/lib/mf-runtime-init.d.ts +1 -0
- package/dist/lib/phase-config.d.ts +16 -0
- package/dist/lib/pipeline-mirror.d.ts +23 -0
- package/dist/lib/responsive.d.ts +81 -0
- package/dist/lib/shared-context.d.ts +5 -0
- package/dist/lib/validate-template.d.ts +2 -0
- package/dist/primitives/badge.d.ts +11 -0
- package/dist/primitives/bottom-sheet.d.ts +9 -0
- package/dist/primitives/button.d.ts +10 -0
- package/dist/primitives/card.d.ts +9 -0
- package/dist/primitives/checkbox.d.ts +4 -0
- package/dist/primitives/collapsible-card.d.ts +15 -0
- package/dist/primitives/dialog.d.ts +20 -0
- package/dist/primitives/dropdown.d.ts +19 -0
- package/dist/primitives/floating-panel.d.ts +22 -0
- package/dist/primitives/icon-button.d.ts +13 -0
- package/dist/primitives/index.d.ts +21 -0
- package/dist/primitives/input.d.ts +11 -0
- package/dist/primitives/label.d.ts +4 -0
- package/dist/primitives/mobile-drawer.d.ts +10 -0
- package/dist/primitives/popover.d.ts +10 -0
- package/dist/primitives/scroll-area.d.ts +4 -0
- package/dist/primitives/select.d.ts +9 -0
- package/dist/primitives/separator.d.ts +9 -0
- package/dist/primitives/skeleton.d.ts +4 -0
- package/dist/primitives/switch.d.ts +7 -0
- package/dist/primitives/tabs.d.ts +17 -0
- package/dist/primitives/tooltip.d.ts +6 -0
- package/dist/theme/create-theme.d.ts +2 -0
- package/dist/theme/defaults.d.ts +4 -0
- package/dist/theme/index.cjs +228 -248
- package/dist/theme/index.cjs.map +1 -1
- package/dist/theme/index.d.ts +6 -128
- package/dist/theme/index.js +212 -214
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/theme-provider.d.ts +10 -0
- package/dist/theme/theme-to-css.d.ts +2 -0
- package/dist/theme/{index.d.cts → types.d.ts} +5 -27
- package/dist/theme/use-theme-mode.d.ts +2 -0
- package/dist/trpc-react.d.ts +7 -0
- package/package.json +5 -3
- package/dist/index.d.cts +0 -3787
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ImageSelector — chip-style picker for reference media + upload button.
|
|
3
|
+
* Despite the historical name it's media-agnostic: pass `accept` to
|
|
4
|
+
* filter the file picker (defaults to `image/*`). Used by both the
|
|
5
|
+
* Image Tester and the Audio Tester so the two tabs share the exact
|
|
6
|
+
* same selection UI.
|
|
7
|
+
*/
|
|
8
|
+
export interface ReferenceImage {
|
|
9
|
+
readonly id?: string;
|
|
10
|
+
readonly filename: string;
|
|
11
|
+
readonly sizeKB?: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ImageSelectorProps {
|
|
14
|
+
readonly images: readonly ReferenceImage[];
|
|
15
|
+
readonly selectedFilename: string;
|
|
16
|
+
readonly uploadedName?: string;
|
|
17
|
+
readonly onSelect: (filename: string) => void;
|
|
18
|
+
readonly onUpload: (base64: string, filename: string, dataUrl: string) => void;
|
|
19
|
+
readonly className?: string;
|
|
20
|
+
/** File picker `accept` value. Default: `image/*`. */
|
|
21
|
+
readonly accept?: string;
|
|
22
|
+
/** Override the upload button label. Default: `Upload...`. */
|
|
23
|
+
readonly uploadLabel?: string;
|
|
24
|
+
}
|
|
25
|
+
export declare function ImageSelector({ images, selectedFilename, uploadedName, onSelect, onUpload, className, accept, uploadLabel, }: ImageSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
export * from './breadcrumb';
|
|
2
|
+
export { DataTable } from './data-table';
|
|
3
|
+
export type { DataTableProps, DataColumn } from './data-table';
|
|
4
|
+
export { SlideOverPanel } from './slide-over-panel';
|
|
5
|
+
export type { SlideOverPanelProps } from './slide-over-panel';
|
|
6
|
+
export { StepTreeMaster, buildStepTreeFromSchema } from './step-tree-master';
|
|
7
|
+
export type { StepTreeMasterProps, StepTreeNode, StepDotState } from './step-tree-master';
|
|
8
|
+
export { AgentStepEditor } from './agent-step-editor';
|
|
9
|
+
export type { AgentStepEditorProps, EditorMode } from './agent-step-editor';
|
|
10
|
+
export { PipelineTreeMatrix } from './pipeline-tree-matrix';
|
|
11
|
+
export type { PipelineTreeMatrixProps, AgentColumn, CellState } from './pipeline-tree-matrix';
|
|
12
|
+
export { NodePicker } from './node-picker';
|
|
13
|
+
export type { NodePickerProps } from './node-picker';
|
|
14
|
+
export * from './status-badge';
|
|
15
|
+
export * from './provider-badge';
|
|
16
|
+
export * from './version-badge';
|
|
17
|
+
export * from './form-field';
|
|
18
|
+
export * from './page-header';
|
|
19
|
+
export * from './empty-state';
|
|
20
|
+
export * from './confirm-dialog';
|
|
21
|
+
export * from './stat-card';
|
|
22
|
+
export * from './key-value-list';
|
|
23
|
+
export * from './code-block';
|
|
24
|
+
export * from './filter-bar';
|
|
25
|
+
export * from './app-shell';
|
|
26
|
+
export * from './data-table';
|
|
27
|
+
export * from './device-card';
|
|
28
|
+
export * from './device-grid';
|
|
29
|
+
export * from './device-item';
|
|
30
|
+
export * from './device-list';
|
|
31
|
+
export { PipelineStep, ConfigSchemaField } from './pipeline-step';
|
|
32
|
+
export type { PipelineStepDisplayConfig, PipelineStepProps } from './pipeline-step';
|
|
33
|
+
export { PipelineRuntimeSelector } from './pipeline-runtime-selector';
|
|
34
|
+
export type { PipelineRuntimeOption } from './pipeline-runtime-selector';
|
|
35
|
+
export { PipelineBuilder } from './pipeline-builder';
|
|
36
|
+
export type { PipelineBuilderProps } from './pipeline-builder';
|
|
37
|
+
export { CLASS_COLORS, DEFAULT_COLOR, getClassColor } from './detection-colors';
|
|
38
|
+
export { DetectionCanvas } from './detection-canvas';
|
|
39
|
+
export type { Detection, DetectionCanvasProps } from './detection-canvas';
|
|
40
|
+
export { DetectionResultTree } from './detection-result-tree';
|
|
41
|
+
export type { DetectionResultTreeProps } from './detection-result-tree';
|
|
42
|
+
export { StepTimings } from './step-timings';
|
|
43
|
+
export type { StepTimingsProps } from './step-timings';
|
|
44
|
+
export { ImageSelector } from './image-selector';
|
|
45
|
+
export type { ImageSelectorProps, ReferenceImage } from './image-selector';
|
|
46
|
+
export { InferenceConfigSelector } from './inference-config-selector';
|
|
47
|
+
export type { InferenceConfigSelectorProps, InferenceBackendOption, InferenceModelOption, InferenceAgentOption } from './inference-config-selector';
|
|
48
|
+
export type { AddonPageProps } from './addon-page-props';
|
|
49
|
+
export { mountAddonPage } from './mount-addon-page';
|
|
50
|
+
export type { MountAddonPageOptions } from './mount-addon-page';
|
|
51
|
+
export { ConfigFormBuilder } from './config-form-builder';
|
|
52
|
+
export type { TranslationFn } from './config-form-builder';
|
|
53
|
+
export { ConfigFormField, NodeSelectField, NodeMultiSelectField, isFieldVisible } from './config-form-field';
|
|
54
|
+
export { AddonGlobalSettingsForm } from './addon-global-settings-form';
|
|
55
|
+
export type { ProbeState } from './config-form-field';
|
|
56
|
+
export { DetectionOverlay } from './detection-overlay';
|
|
57
|
+
export type { DetectionOverlayProps } from './detection-overlay';
|
|
58
|
+
export { CameraStreamPlayer } from './camera-stream-player';
|
|
59
|
+
export type { CameraStreamPlayerProps, PlayerConnectionState, SignalingResult, ClientStreamHints } from './camera-stream-player';
|
|
60
|
+
export { StreamPanel } from './stream-panel';
|
|
61
|
+
export type { StreamPanelProps, StreamChoice, StreamStats } from './stream-panel';
|
|
62
|
+
export { LoginForm } from './login-form';
|
|
63
|
+
export type { LoginFormProps } from './login-form';
|
|
64
|
+
export { DevShell, useDevShell } from './dev-shell';
|
|
65
|
+
export type { DevShellProps } from './dev-shell';
|
|
66
|
+
export { AudioWaveform } from './audio-waveform';
|
|
67
|
+
export type { AudioWaveformProps } from './audio-waveform';
|
|
68
|
+
export { AudioLevelWaveform } from './audio-level-waveform';
|
|
69
|
+
export type { AudioLevelWaveformProps } from './audio-level-waveform';
|
|
70
|
+
export { AudioClassificationList } from './audio-classification-list';
|
|
71
|
+
export type { AudioClassificationListProps, AudioClassification } from './audio-classification-list';
|
|
72
|
+
export { ResponseLog } from './response-log';
|
|
73
|
+
export type { ResponseLogProps } from './response-log';
|
|
74
|
+
export { PhaseIcon } from './phase-icon';
|
|
75
|
+
export type { PhaseIconProps } from './phase-icon';
|
|
76
|
+
export { LogStream, FloatingLogStream } from './log-stream';
|
|
77
|
+
export type { LogStreamProps, FloatingLogStreamProps } from './log-stream';
|
|
78
|
+
export { EventStream, FloatingEventStream } from './event-stream';
|
|
79
|
+
export type { EventStreamProps, FloatingEventStreamProps } from './event-stream';
|
|
80
|
+
export { DiscoveryPanel } from './discovery-panel';
|
|
81
|
+
export { StateValuesStream } from './state-values-stream';
|
|
82
|
+
export type { StateValuesStreamProps } from './state-values-stream';
|
|
83
|
+
export { DeviceActivityPanel } from './device-activity-panel';
|
|
84
|
+
export type { DeviceActivityPanelProps, ActivityTabId } from './device-activity-panel';
|
|
85
|
+
export { ConfirmActionButton } from './confirm-action-button';
|
|
86
|
+
export type { ConfirmActionButtonProps } from './confirm-action-button';
|
|
87
|
+
export { PTZOverlay } from './ptz-overlay';
|
|
88
|
+
export type { PTZOverlayProps } from './ptz-overlay';
|
|
89
|
+
export { BatteryBadge } from './battery-badge';
|
|
90
|
+
export type { BatteryBadgeProps, BatteryStatusLike } from './battery-badge';
|
|
91
|
+
export { SnapshotButton } from './snapshot-button';
|
|
92
|
+
export type { SnapshotButtonProps, SnapshotButtonTrpc } from './snapshot-button';
|
|
93
|
+
export { DoorbellRecentPanel } from './doorbell-recent-panel';
|
|
94
|
+
export type { DoorbellRecentPanelProps } from './doorbell-recent-panel';
|
|
95
|
+
export { KebabMenu } from './kebab-menu';
|
|
96
|
+
export type { KebabMenuProps, KebabMenuItem } from './kebab-menu';
|
|
97
|
+
export { ConfirmDialogProvider, useConfirm } from './confirm-dialog';
|
|
98
|
+
export { WidgetSlot } from './widget-slot';
|
|
99
|
+
export type { WidgetSlotProps } from './widget-slot';
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* InferenceConfigSelector — cascading selectors for runtime/backend/model.
|
|
3
|
+
*
|
|
4
|
+
* Used by benchmark Engine tab, Image Tester pipeline steps, and admin-ui
|
|
5
|
+
* pipeline configuration. Shows only valid combinations based on capabilities.
|
|
6
|
+
*/
|
|
7
|
+
export interface InferenceBackendOption {
|
|
8
|
+
readonly id: string;
|
|
9
|
+
readonly label: string;
|
|
10
|
+
readonly available: boolean;
|
|
11
|
+
}
|
|
12
|
+
export interface InferenceModelOption {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly downloaded?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export interface InferenceAgentOption {
|
|
18
|
+
readonly id: string;
|
|
19
|
+
readonly name: string;
|
|
20
|
+
readonly status: 'online' | 'offline' | 'busy';
|
|
21
|
+
}
|
|
22
|
+
export interface InferenceConfigSelectorProps {
|
|
23
|
+
readonly runtime: 'node' | 'python';
|
|
24
|
+
readonly backend: string;
|
|
25
|
+
readonly modelId: string;
|
|
26
|
+
readonly agentId?: string;
|
|
27
|
+
readonly runtimes: readonly {
|
|
28
|
+
value: string;
|
|
29
|
+
label: string;
|
|
30
|
+
available: boolean;
|
|
31
|
+
}[];
|
|
32
|
+
readonly backends: readonly InferenceBackendOption[];
|
|
33
|
+
readonly models: readonly InferenceModelOption[];
|
|
34
|
+
readonly agents?: readonly InferenceAgentOption[];
|
|
35
|
+
readonly onRuntimeChange: (rt: 'node' | 'python') => void;
|
|
36
|
+
readonly onBackendChange: (id: string) => void;
|
|
37
|
+
readonly onModelChange: (id: string) => void;
|
|
38
|
+
readonly onAgentChange?: (id: string) => void;
|
|
39
|
+
readonly layout?: 'horizontal' | 'vertical' | 'grid';
|
|
40
|
+
readonly className?: string;
|
|
41
|
+
/** Show agent selector (default: false) */
|
|
42
|
+
readonly showAgent?: boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare function InferenceConfigSelector({ runtime, backend, modelId, agentId, runtimes, backends, models, agents, onRuntimeChange, onBackendChange, onModelChange, onAgentChange, layout, className, showAgent, }: InferenceConfigSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { ComponentType, ReactNode } from 'react';
|
|
2
|
+
export interface KebabMenuItem {
|
|
3
|
+
/** Stable id for React keys + analytics. */
|
|
4
|
+
readonly id: string;
|
|
5
|
+
/** Visible label. */
|
|
6
|
+
readonly label: string;
|
|
7
|
+
/** Icon component (lucide-react etc.). */
|
|
8
|
+
readonly icon?: ComponentType<{
|
|
9
|
+
className?: string;
|
|
10
|
+
}>;
|
|
11
|
+
/** Render an inline subtitle / hint under the label. */
|
|
12
|
+
readonly description?: string;
|
|
13
|
+
/** Click handler — menu auto-closes after invocation. */
|
|
14
|
+
readonly onClick: () => void;
|
|
15
|
+
/** When true, the item is hidden entirely (gated by feature etc.). */
|
|
16
|
+
readonly hidden?: boolean;
|
|
17
|
+
/** When true, the item is rendered greyed out and non-clickable. */
|
|
18
|
+
readonly disabled?: boolean;
|
|
19
|
+
/** Renders the item with the destructive accent (red text + hover). */
|
|
20
|
+
readonly danger?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Optional separator BEFORE this item — useful to group destructive
|
|
23
|
+
* actions visually at the bottom of the menu.
|
|
24
|
+
*/
|
|
25
|
+
readonly separatorBefore?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export interface KebabMenuProps {
|
|
28
|
+
readonly items: readonly KebabMenuItem[];
|
|
29
|
+
/**
|
|
30
|
+
* Optional content rendered ABOVE the items (e.g. an explanatory
|
|
31
|
+
* label or a status line). Hidden when no header is provided.
|
|
32
|
+
*/
|
|
33
|
+
readonly header?: ReactNode;
|
|
34
|
+
/** Optional class on the trigger button (sizing, alignment). */
|
|
35
|
+
readonly triggerClassName?: string;
|
|
36
|
+
/** Tooltip text on the trigger (defaults to "More actions"). */
|
|
37
|
+
readonly title?: string;
|
|
38
|
+
}
|
|
39
|
+
export declare function KebabMenu({ items, header, triggerClassName, title }: KebabMenuProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface KeyValueListProps {
|
|
3
|
+
items: {
|
|
4
|
+
key: string;
|
|
5
|
+
value: ReactNode;
|
|
6
|
+
}[];
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function KeyValueList({ items, className }: KeyValueListProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { LiveBuffer } from '../hooks/use-live-buffer';
|
|
2
|
+
interface LogEntry {
|
|
3
|
+
readonly timestamp: string;
|
|
4
|
+
readonly level: string;
|
|
5
|
+
readonly message: string;
|
|
6
|
+
readonly scope?: string;
|
|
7
|
+
readonly tags?: Record<string, string | undefined>;
|
|
8
|
+
readonly meta?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface LogStreamProps {
|
|
11
|
+
/** Lock to a specific agent. When set, the agent selector is hidden. */
|
|
12
|
+
readonly agentId?: string;
|
|
13
|
+
/** Lock to a specific addon. When set, the addon selector is hidden. */
|
|
14
|
+
readonly addonId?: string;
|
|
15
|
+
/** Lock to a specific device. When set, the device selector is hidden. */
|
|
16
|
+
readonly deviceId?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Lock to a specific integration. Filter is ALWAYS applied when
|
|
19
|
+
* provided — current providers don't yet tag loggers with
|
|
20
|
+
* `integrationId`, so the result will be empty until they do, but
|
|
21
|
+
* the filter lets us light up integration-scoped logs incrementally
|
|
22
|
+
* without changing the call sites here.
|
|
23
|
+
*/
|
|
24
|
+
readonly integrationId?: string;
|
|
25
|
+
/**
|
|
26
|
+
* Correlation id for short-lived operations that have no `deviceId`
|
|
27
|
+
* yet (e.g. a creation-field probe). The matching surface (the
|
|
28
|
+
* Add-Device modal) generates the id once per dialog open and the
|
|
29
|
+
* provider plumbs it into its own scoped logger so the user sees
|
|
30
|
+
* live socket / handshake lines streaming during the test.
|
|
31
|
+
*/
|
|
32
|
+
readonly requestId?: string;
|
|
33
|
+
/** Initial log level filter. */
|
|
34
|
+
readonly level?: 'debug' | 'info' | 'warn' | 'error';
|
|
35
|
+
/** Max height CSS class (default: 'max-h-96'). */
|
|
36
|
+
readonly maxHeight?: string;
|
|
37
|
+
/** Show the scope column. */
|
|
38
|
+
readonly showScope?: boolean;
|
|
39
|
+
/** Show the filter bar with selectors. Set false for compact inline use. */
|
|
40
|
+
readonly showFilters?: boolean;
|
|
41
|
+
/** Initial number of historical entries to fetch (default: 100). */
|
|
42
|
+
readonly limit?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Optional controlled live buffer. When provided, the stream reads
|
|
45
|
+
* + appends to this external store rather than its own `useState`,
|
|
46
|
+
* so visible logs survive an unmount/remount of the component
|
|
47
|
+
* (used by `DeviceActivityPanel` to preserve content across tab
|
|
48
|
+
* switches without keeping subscriptions open in inactive tabs).
|
|
49
|
+
*/
|
|
50
|
+
readonly liveBuffer?: LiveBuffer<LogEntry>;
|
|
51
|
+
/** Close button handler — when provided, renders a close button. */
|
|
52
|
+
readonly onClose?: () => void;
|
|
53
|
+
readonly className?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function LogStream({ agentId: propsAgentId, addonId: propsAddonId, deviceId: propsDeviceId, integrationId: propsIntegrationId, requestId: propsRequestId, level: initialLevel, maxHeight, showScope, showFilters, limit, liveBuffer: externalBuffer, onClose, className, }: LogStreamProps): import("react/jsx-runtime").JSX.Element;
|
|
56
|
+
export interface FloatingLogStreamProps extends LogStreamProps {
|
|
57
|
+
/** Position: 'bottom' anchors to parent bottom, 'overlay' is absolute positioned. */
|
|
58
|
+
readonly position?: 'bottom' | 'overlay';
|
|
59
|
+
}
|
|
60
|
+
export declare function FloatingLogStream({ position, className, ...props }: FloatingLogStreamProps): import("react/jsx-runtime").JSX.Element;
|
|
61
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface LoginFormProps {
|
|
2
|
+
onLogin: (username: string, password: string) => Promise<void>;
|
|
3
|
+
serverUrl?: string;
|
|
4
|
+
logoSrc?: string;
|
|
5
|
+
error?: string;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function LoginForm({ onLogin, serverUrl, logoSrc, error: externalError, className, }: LoginFormProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AddonPageProps } from './addon-page-props';
|
|
2
|
+
export interface MountAddonPageOptions {
|
|
3
|
+
/** Backend server URL (default: 'https://localhost:4443') */
|
|
4
|
+
serverUrl?: string;
|
|
5
|
+
/** Title shown in the dev toolbar */
|
|
6
|
+
title?: string;
|
|
7
|
+
/** Root element ID (default: 'root') */
|
|
8
|
+
rootId?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Mount an addon page component with the full dev shell.
|
|
12
|
+
*
|
|
13
|
+
* @param PageComponent - The addon page component (must accept AddonPageProps)
|
|
14
|
+
* @param options - Configuration options
|
|
15
|
+
*/
|
|
16
|
+
export declare function mountAddonPage(PageComponent: (props: AddonPageProps) => React.ReactNode, options?: MountAddonPageOptions): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface NodePickerProps {
|
|
2
|
+
readonly selectedNodeId: string;
|
|
3
|
+
readonly onSelect: (nodeId: string) => void;
|
|
4
|
+
/** Caption shown before the pill bar. Defaults to `Node`. */
|
|
5
|
+
readonly label?: string;
|
|
6
|
+
/** Hide the leading `Server` icon (compact toolbars). */
|
|
7
|
+
readonly hideIcon?: boolean;
|
|
8
|
+
/**
|
|
9
|
+
* When true, render even when only the hub is online. Useful when
|
|
10
|
+
* the surrounding UI relies on the picker as a layout anchor; the
|
|
11
|
+
* default hides the picker since there's nothing to choose.
|
|
12
|
+
*/
|
|
13
|
+
readonly alwaysShow?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function NodePicker({ selectedNodeId, onSelect, label, hideIcon, alwaysShow, }: NodePickerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface PageHeaderProps {
|
|
3
|
+
title: string;
|
|
4
|
+
subtitle?: string;
|
|
5
|
+
actions?: ReactNode;
|
|
6
|
+
className?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function PageHeader({ title, subtitle, actions, className }: PageHeaderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { PipelineSchema, PipelineTemplate } from '@camstack/types';
|
|
2
|
+
import { PipelineStepDisplayConfig } from './pipeline-step';
|
|
3
|
+
export interface PipelineBuilderProps {
|
|
4
|
+
readonly schema: PipelineSchema;
|
|
5
|
+
readonly steps: readonly PipelineStepDisplayConfig[];
|
|
6
|
+
readonly onChange: (steps: readonly PipelineStepDisplayConfig[]) => void;
|
|
7
|
+
readonly templates: readonly PipelineTemplate[];
|
|
8
|
+
readonly selectedTemplateId: string | null;
|
|
9
|
+
readonly onSelectTemplate: (id: string | null) => void;
|
|
10
|
+
readonly onSaveTemplate: (name: string, steps: readonly PipelineStepDisplayConfig[]) => void;
|
|
11
|
+
readonly onUpdateTemplate: (id: string, steps: readonly PipelineStepDisplayConfig[]) => void;
|
|
12
|
+
readonly onDeleteTemplate: (id: string) => void;
|
|
13
|
+
readonly readOnly?: boolean;
|
|
14
|
+
/** Addon IDs to exclude from the pipeline (e.g. 'motion-detection' for benchmark) */
|
|
15
|
+
readonly excludeAddons?: readonly string[];
|
|
16
|
+
/** Hide the template bar (save/load/delete) */
|
|
17
|
+
readonly hideTemplates?: boolean;
|
|
18
|
+
/** Only show enabled steps (hide disabled addons and placeholders) */
|
|
19
|
+
readonly showOnlyEnabled?: boolean;
|
|
20
|
+
/** Show "Slot: ..." labels above step groups (default: false) */
|
|
21
|
+
readonly showSlotLabels?: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Toggle mode passed through to every `PipelineStep`:
|
|
24
|
+
* - `'simple'` (default) — single on/off switch, edits `step.enabled` directly.
|
|
25
|
+
* - `'threeState'` — segmented `[Inherit | On | Off]` control that emits
|
|
26
|
+
* override changes via `onOverrideChange` (per addonId). `step.enabled`
|
|
27
|
+
* still reflects the effective state (agent default OR override).
|
|
28
|
+
*/
|
|
29
|
+
readonly toggleMode?: 'simple' | 'threeState';
|
|
30
|
+
/** Current override map keyed on `addonId` when `toggleMode === 'threeState'`. */
|
|
31
|
+
readonly overrides?: Readonly<Record<string, boolean>>;
|
|
32
|
+
/** Fires when the user flips a per-addon 3-state toggle. `null` = inherit. */
|
|
33
|
+
readonly onOverrideChange?: (addonId: string, next: boolean | null) => void;
|
|
34
|
+
/** Agent default enabled state per addonId, shown as annotation in `'threeState'` mode. */
|
|
35
|
+
readonly inheritedEnabledByAddon?: Readonly<Record<string, boolean>>;
|
|
36
|
+
/**
|
|
37
|
+
* Hide the Model dropdown + dynamic configSchema controls on every
|
|
38
|
+
* step (passes through to `PipelineStep.hideModelAndSettings`). Used
|
|
39
|
+
* on the camera page where these knobs are agent-level.
|
|
40
|
+
*/
|
|
41
|
+
readonly hideModelAndSettings?: boolean;
|
|
42
|
+
}
|
|
43
|
+
export declare function PipelineBuilder({ schema, steps, onChange, templates, selectedTemplateId, onSelectTemplate, onSaveTemplate, onUpdateTemplate, onDeleteTemplate, readOnly, excludeAddons, hideTemplates, showOnlyEnabled, showSlotLabels, toggleMode, overrides, onOverrideChange, inheritedEnabledByAddon, hideModelAndSettings, }: PipelineBuilderProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface PipelineRuntimeOption {
|
|
2
|
+
readonly id: string;
|
|
3
|
+
readonly label: string;
|
|
4
|
+
readonly available: boolean;
|
|
5
|
+
/** Platform score for this backend (higher = better) */
|
|
6
|
+
readonly platformScore?: number;
|
|
7
|
+
/** Whether this is the best-scored backend */
|
|
8
|
+
readonly isBest?: boolean;
|
|
9
|
+
}
|
|
10
|
+
interface PipelineRuntimeSelectorProps {
|
|
11
|
+
readonly options: readonly PipelineRuntimeOption[];
|
|
12
|
+
readonly value: string;
|
|
13
|
+
readonly onChange: (value: string) => void;
|
|
14
|
+
}
|
|
15
|
+
export declare function PipelineRuntimeSelector({ options, value, onChange }: PipelineRuntimeSelectorProps): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { PipelineSlot, PipelineAddonSchema, PipelineEngineChoice, ConfigField } from '@camstack/types';
|
|
2
|
+
export interface PipelineStepDisplayConfig {
|
|
3
|
+
readonly addonId: string;
|
|
4
|
+
readonly addonName: string;
|
|
5
|
+
readonly slot: PipelineSlot;
|
|
6
|
+
readonly inputClasses: readonly string[];
|
|
7
|
+
readonly outputClasses: readonly string[];
|
|
8
|
+
readonly enabled: boolean;
|
|
9
|
+
readonly modelId: string;
|
|
10
|
+
readonly children: readonly PipelineStepDisplayConfig[];
|
|
11
|
+
/** Independent engine override — only used by audio-classifier steps */
|
|
12
|
+
readonly engine?: PipelineEngineChoice;
|
|
13
|
+
/** UI grouping — steps with the same group are displayed under one heading */
|
|
14
|
+
readonly group?: string;
|
|
15
|
+
/** Current values for the step's configSchema fields */
|
|
16
|
+
readonly settings?: Record<string, unknown>;
|
|
17
|
+
}
|
|
18
|
+
export interface PipelineStepProps {
|
|
19
|
+
readonly step: PipelineStepDisplayConfig;
|
|
20
|
+
readonly schema: PipelineAddonSchema | null;
|
|
21
|
+
/** Full schema map so children can look up their own schema */
|
|
22
|
+
readonly allSchemas: ReadonlyMap<string, PipelineAddonSchema>;
|
|
23
|
+
readonly depth?: number;
|
|
24
|
+
readonly onChange: (updated: PipelineStepDisplayConfig) => void;
|
|
25
|
+
readonly onDelete?: (addonId: string) => void;
|
|
26
|
+
readonly readOnly?: boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Toggle mode:
|
|
29
|
+
* - `'simple'` (default) — header shows a single on/off switch that drives
|
|
30
|
+
* `step.enabled` directly. Used on the agent page (`NodePipelineTab`)
|
|
31
|
+
* where toggling IS the final state.
|
|
32
|
+
* - `'threeState'` — header shows a 3-button segmented control
|
|
33
|
+
* `[Inherit | On | Off]`. `overrideState` is the current override value
|
|
34
|
+
* (`true` / `false` / `null` for inherit). When the override changes,
|
|
35
|
+
* `onOverrideChange` fires. `step.enabled` still renders the effective
|
|
36
|
+
* state (inherited agent default OR override). Used on the camera page
|
|
37
|
+
* where the user edits a SPARSE override over the agent baseline.
|
|
38
|
+
*/
|
|
39
|
+
readonly toggleMode?: 'simple' | 'threeState';
|
|
40
|
+
/**
|
|
41
|
+
* 3-state override value when `toggleMode === 'threeState'`. `null` or
|
|
42
|
+
* `undefined` means "inherit" (no override active). Ignored in `'simple'` mode.
|
|
43
|
+
*/
|
|
44
|
+
readonly overrideState?: boolean | null;
|
|
45
|
+
/** Fired when the user flips the 3-state toggle in `'threeState'` mode. */
|
|
46
|
+
readonly onOverrideChange?: (next: boolean | null) => void;
|
|
47
|
+
/** Agent's default enabled value, shown as an annotation in `'threeState'` mode. */
|
|
48
|
+
readonly inheritedEnabled?: boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Hide the Model dropdown + dynamic configSchema controls inside the
|
|
51
|
+
* expanded config panel. Used on the camera page where the step's
|
|
52
|
+
* model + settings are agent-level — a camera can land on any agent,
|
|
53
|
+
* so exposing agent-level knobs here would be misleading. Agent I/O
|
|
54
|
+
* tags, engine selector (audio), and the step name stay visible.
|
|
55
|
+
*/
|
|
56
|
+
readonly hideModelAndSettings?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export declare function PipelineStep({ step, schema, allSchemas: _allSchemas, depth: _depth, onChange, onDelete: _onDelete, readOnly, toggleMode, overrideState, onOverrideChange, inheritedEnabled, hideModelAndSettings, }: PipelineStepProps): import("react/jsx-runtime").JSX.Element;
|
|
59
|
+
export declare function ConfigSchemaField({ field, allFields, step, disabled, onChange }: {
|
|
60
|
+
field: ConfigField;
|
|
61
|
+
allFields: readonly ConfigField[];
|
|
62
|
+
step: PipelineStepDisplayConfig;
|
|
63
|
+
disabled: boolean;
|
|
64
|
+
onChange: (updated: PipelineStepDisplayConfig) => void;
|
|
65
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { StepTreeNode } from './step-tree-master';
|
|
2
|
+
export interface AgentColumn {
|
|
3
|
+
readonly agentNodeId: string;
|
|
4
|
+
readonly engineLabel: string;
|
|
5
|
+
}
|
|
6
|
+
export type CellState = {
|
|
7
|
+
readonly kind: 'enabled';
|
|
8
|
+
readonly modelId: string;
|
|
9
|
+
} | {
|
|
10
|
+
readonly kind: 'disabled';
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'na';
|
|
13
|
+
};
|
|
14
|
+
export interface PipelineTreeMatrixProps {
|
|
15
|
+
readonly tree: readonly StepTreeNode[];
|
|
16
|
+
readonly agents: readonly AgentColumn[];
|
|
17
|
+
readonly getCellState: (addonId: string, agentNodeId: string) => CellState;
|
|
18
|
+
readonly onCellClick: (addonId: string, agentNodeId: string) => void;
|
|
19
|
+
readonly selectedCell: {
|
|
20
|
+
readonly addonId: string;
|
|
21
|
+
readonly agentNodeId: string;
|
|
22
|
+
} | null;
|
|
23
|
+
/**
|
|
24
|
+
* Optional inline on/off toggle next to each step name. Only useful
|
|
25
|
+
* in single-agent mode (per-node pipeline tab) where the row already
|
|
26
|
+
* targets one (agent, addon) pair unambiguously. The matrix renders
|
|
27
|
+
* the toggle when this callback is set AND `agents.length === 1`.
|
|
28
|
+
*/
|
|
29
|
+
readonly onToggleEnabled?: (addonId: string, next: boolean) => void;
|
|
30
|
+
}
|
|
31
|
+
export declare function PipelineTreeMatrix({ tree, agents, getCellState, onCellClick, selectedCell, onToggleEnabled, }: PipelineTreeMatrixProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { ProviderType } from '../icons';
|
|
2
|
+
export interface ProviderBadgeProps {
|
|
3
|
+
provider: ProviderType;
|
|
4
|
+
showLabel?: boolean;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function ProviderBadge({ provider, showLabel, className, }: ProviderBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { UsePTZResult } from '../hooks/use-ptz';
|
|
2
|
+
export interface PTZOverlayProps {
|
|
3
|
+
/** Result of `usePTZ(trpc, deviceId)`. */
|
|
4
|
+
readonly controls: UsePTZResult;
|
|
5
|
+
/**
|
|
6
|
+
* Visual variant. `'overlay'` floats over the camera viewport with
|
|
7
|
+
* a translucent dark pill; `'panel'` lays out flat inside its
|
|
8
|
+
* container with no inner chrome — use that when hosting inside a
|
|
9
|
+
* floating panel that already provides the dark surface.
|
|
10
|
+
*/
|
|
11
|
+
readonly mode?: 'overlay' | 'panel';
|
|
12
|
+
/** Show the presets dropdown (default: true when presets > 0). */
|
|
13
|
+
readonly showPresets?: boolean;
|
|
14
|
+
/** Show the zoom buttons (default: true). */
|
|
15
|
+
readonly showZoom?: boolean;
|
|
16
|
+
/** Show the home button (default: true). */
|
|
17
|
+
readonly showHome?: boolean;
|
|
18
|
+
readonly className?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function PTZOverlay({ controls, mode, showPresets, showZoom, showHome, className, }: PTZOverlayProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ResponseLogProps {
|
|
2
|
+
readonly data: unknown;
|
|
3
|
+
readonly label?: string;
|
|
4
|
+
readonly className?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Expandable log box showing the raw JSON response from a pipeline run.
|
|
8
|
+
*/
|
|
9
|
+
export declare function ResponseLog({ data, label, className }: ResponseLogProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export interface SlideOverPanelProps {
|
|
3
|
+
readonly open: boolean;
|
|
4
|
+
readonly onClose: () => void;
|
|
5
|
+
readonly title: ReactNode;
|
|
6
|
+
readonly subtitle?: ReactNode;
|
|
7
|
+
readonly footer?: ReactNode;
|
|
8
|
+
readonly children: ReactNode;
|
|
9
|
+
readonly widthClass?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function SlideOverPanel({ open, onClose, title, subtitle, footer, children, widthClass, }: SlideOverPanelProps): import("react/jsx-runtime").JSX.Element | null;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
interface QueryFn<I, O> {
|
|
2
|
+
query(input: I): Promise<O>;
|
|
3
|
+
}
|
|
4
|
+
export interface SnapshotButtonTrpc {
|
|
5
|
+
readonly snapshot: {
|
|
6
|
+
readonly getSnapshot: QueryFn<{
|
|
7
|
+
deviceId: number;
|
|
8
|
+
streamId?: string;
|
|
9
|
+
force?: boolean;
|
|
10
|
+
}, {
|
|
11
|
+
base64: string;
|
|
12
|
+
contentType: string;
|
|
13
|
+
} | null>;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export interface SnapshotButtonProps {
|
|
17
|
+
readonly trpc: SnapshotButtonTrpc;
|
|
18
|
+
readonly deviceId: number;
|
|
19
|
+
readonly deviceName: string;
|
|
20
|
+
/** Visual size — `'sm'` for header / tile, `'md'` for prominent CTA. */
|
|
21
|
+
readonly size?: 'sm' | 'md';
|
|
22
|
+
readonly className?: string;
|
|
23
|
+
}
|
|
24
|
+
export declare function SnapshotButton({ trpc, deviceId, deviceName, size, className, }: SnapshotButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface StatCardProps {
|
|
2
|
+
value: string | number;
|
|
3
|
+
label: string;
|
|
4
|
+
trend?: {
|
|
5
|
+
value: number;
|
|
6
|
+
direction: 'up' | 'down';
|
|
7
|
+
};
|
|
8
|
+
className?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare function StatCard({ value, label, trend, className }: StatCardProps): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { LiveBuffer } from '../hooks/use-live-buffer';
|
|
2
|
+
interface StateChangeEntry {
|
|
3
|
+
readonly id: string;
|
|
4
|
+
readonly timestamp: string;
|
|
5
|
+
readonly capName: string;
|
|
6
|
+
readonly slice: Record<string, unknown>;
|
|
7
|
+
}
|
|
8
|
+
export interface StateValuesStreamProps {
|
|
9
|
+
/** Device whose runtime-state changes we want to track. Required. */
|
|
10
|
+
readonly deviceId: number;
|
|
11
|
+
/** Initial cap-name filter — empty = all caps visible. */
|
|
12
|
+
readonly defaultCaps?: readonly string[];
|
|
13
|
+
/** Max height CSS class. */
|
|
14
|
+
readonly maxHeight?: string;
|
|
15
|
+
/** Initial number of historical entries to fetch. */
|
|
16
|
+
readonly limit?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Optional controlled live buffer. When provided the stream appends
|
|
19
|
+
* to this external store instead of its own internal `useState`,
|
|
20
|
+
* so the entries survive an unmount/remount of the component (used
|
|
21
|
+
* by `DeviceActivityPanel` to keep tab content visible across
|
|
22
|
+
* tab switches without leaving subscriptions alive in inactive
|
|
23
|
+
* tabs).
|
|
24
|
+
*/
|
|
25
|
+
readonly liveBuffer?: LiveBuffer<StateChangeEntry>;
|
|
26
|
+
readonly onClose?: () => void;
|
|
27
|
+
readonly className?: string;
|
|
28
|
+
}
|
|
29
|
+
export declare function StateValuesStream({ deviceId, defaultCaps, maxHeight, limit, liveBuffer: externalBuffer, onClose, className, }: StateValuesStreamProps): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
type Status = 'online' | 'offline' | 'degraded' | 'unknown';
|
|
2
|
+
export interface StatusBadgeProps {
|
|
3
|
+
status: Status;
|
|
4
|
+
showDot?: boolean;
|
|
5
|
+
showLabel?: boolean;
|
|
6
|
+
size?: 'sm' | 'md';
|
|
7
|
+
className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function StatusBadge({ status, showDot, showLabel, size, className, }: StatusBadgeProps): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StepTimings — displays pipeline execution timings per step.
|
|
3
|
+
*/
|
|
4
|
+
export interface StepTimingsProps {
|
|
5
|
+
readonly timings: Readonly<Record<string, number>>;
|
|
6
|
+
readonly totalMs?: number;
|
|
7
|
+
readonly className?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function StepTimings({ timings, totalMs, className }: StepTimingsProps): import("react/jsx-runtime").JSX.Element | null;
|