@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.
Files changed (159) hide show
  1. package/dist/composites/addon-global-settings-form.d.ts +60 -0
  2. package/dist/composites/addon-page-props.d.ts +12 -0
  3. package/dist/composites/agent-step-editor.d.ts +15 -0
  4. package/dist/composites/app-shell/app-shell.d.ts +19 -0
  5. package/dist/composites/app-shell/index.d.ts +3 -0
  6. package/dist/composites/app-shell/sidebar-item.d.ts +10 -0
  7. package/dist/composites/app-shell/sidebar.d.ts +14 -0
  8. package/dist/composites/audio-classification-list.d.ts +20 -0
  9. package/dist/composites/audio-level-waveform.d.ts +35 -0
  10. package/dist/composites/audio-waveform.d.ts +20 -0
  11. package/dist/composites/battery-badge.d.ts +12 -0
  12. package/dist/composites/breadcrumb.d.ts +25 -0
  13. package/dist/composites/camera-stream-player.d.ts +87 -0
  14. package/dist/composites/code-block.d.ts +6 -0
  15. package/dist/composites/config-form-builder.d.ts +18 -0
  16. package/dist/composites/config-form-field.d.ts +70 -0
  17. package/dist/composites/confirm-action-button.d.ts +41 -0
  18. package/dist/composites/confirm-dialog.d.ts +13 -0
  19. package/dist/composites/data-table/data-table-header.d.ts +10 -0
  20. package/dist/composites/data-table/data-table-pagination.d.ts +9 -0
  21. package/dist/composites/data-table/data-table-row.d.ts +10 -0
  22. package/dist/composites/data-table/data-table.d.ts +2 -0
  23. package/dist/composites/data-table/index.d.ts +2 -0
  24. package/dist/composites/data-table/types.d.ts +34 -0
  25. package/dist/composites/data-table.d.ts +37 -0
  26. package/dist/composites/detection-canvas.d.ts +29 -0
  27. package/dist/composites/detection-colors.d.ts +15 -0
  28. package/dist/composites/detection-overlay.d.ts +9 -0
  29. package/dist/composites/detection-result-tree.d.ts +11 -0
  30. package/dist/composites/dev-shell.d.ts +20 -0
  31. package/dist/composites/device-activity-panel.d.ts +29 -0
  32. package/dist/composites/device-card.d.ts +38 -0
  33. package/dist/composites/device-grid.d.ts +12 -0
  34. package/dist/composites/device-item/actions.d.ts +9 -0
  35. package/dist/composites/device-item/children-accordion.d.ts +11 -0
  36. package/dist/composites/device-item/features.d.ts +17 -0
  37. package/dist/composites/device-item/header.d.ts +14 -0
  38. package/dist/composites/device-item/helpers.d.ts +147 -0
  39. package/dist/composites/device-item/index.d.ts +5 -0
  40. package/dist/composites/device-item/preview.d.ts +23 -0
  41. package/dist/composites/device-item/status-dot.d.ts +5 -0
  42. package/dist/composites/device-list/empty-state.d.ts +6 -0
  43. package/dist/composites/device-list/filter-chips.d.ts +19 -0
  44. package/dist/composites/device-list/group.d.ts +6 -0
  45. package/dist/composites/device-list/index.d.ts +31 -0
  46. package/dist/composites/device-list/pagination.d.ts +18 -0
  47. package/dist/composites/device-list/url-state.d.ts +24 -0
  48. package/dist/composites/discovery-panel.d.ts +26 -0
  49. package/dist/composites/doorbell-recent-panel.d.ts +10 -0
  50. package/dist/composites/empty-state.d.ts +10 -0
  51. package/dist/composites/event-stream.d.ts +48 -0
  52. package/dist/composites/filter-bar.d.ts +28 -0
  53. package/dist/composites/form-field.d.ts +11 -0
  54. package/dist/composites/image-selector.d.ts +25 -0
  55. package/dist/composites/index.d.ts +99 -0
  56. package/dist/composites/inference-config-selector.d.ts +44 -0
  57. package/dist/composites/kebab-menu.d.ts +39 -0
  58. package/dist/composites/key-value-list.d.ts +9 -0
  59. package/dist/composites/log-stream.d.ts +61 -0
  60. package/dist/composites/login-form.d.ts +8 -0
  61. package/dist/composites/mount-addon-page.d.ts +16 -0
  62. package/dist/composites/node-picker.d.ts +15 -0
  63. package/dist/composites/page-header.d.ts +8 -0
  64. package/dist/composites/phase-icon.d.ts +5 -0
  65. package/dist/composites/pipeline-builder.d.ts +43 -0
  66. package/dist/composites/pipeline-runtime-selector.d.ts +16 -0
  67. package/dist/composites/pipeline-step.d.ts +65 -0
  68. package/dist/composites/pipeline-tree-matrix.d.ts +31 -0
  69. package/dist/composites/provider-badge.d.ts +7 -0
  70. package/dist/composites/ptz-overlay.d.ts +20 -0
  71. package/dist/composites/response-log.d.ts +9 -0
  72. package/dist/composites/slide-over-panel.d.ts +11 -0
  73. package/dist/composites/snapshot-button.d.ts +25 -0
  74. package/dist/composites/stat-card.d.ts +10 -0
  75. package/dist/composites/state-values-stream.d.ts +30 -0
  76. package/dist/composites/status-badge.d.ts +10 -0
  77. package/dist/composites/step-timings.d.ts +9 -0
  78. package/dist/composites/step-tree-master.d.ts +28 -0
  79. package/dist/composites/stream-panel.d.ts +143 -0
  80. package/dist/composites/version-badge.d.ts +24 -0
  81. package/dist/composites/widget-slot.d.ts +20 -0
  82. package/dist/contexts/custom-field-renderers.d.ts +26 -0
  83. package/dist/contexts/device-context.d.ts +20 -0
  84. package/dist/contexts/player-overlays.d.ts +56 -0
  85. package/dist/contexts/system-context.d.ts +19 -0
  86. package/dist/contexts/widget-registry.d.ts +68 -0
  87. package/dist/contexts/zone-editing.d.ts +59 -0
  88. package/dist/generated/system-hooks.d.ts +933 -0
  89. package/dist/hooks/index.d.ts +27 -0
  90. package/dist/hooks/use-cluster-nodes.d.ts +17 -0
  91. package/dist/hooks/use-debounced-string.d.ts +1 -0
  92. package/dist/hooks/use-device-battery.d.ts +14 -0
  93. package/dist/hooks/use-device-capability.d.ts +17 -0
  94. package/dist/hooks/use-device-detections.d.ts +50 -0
  95. package/dist/hooks/use-device-features.d.ts +25 -0
  96. package/dist/hooks/use-device-proxy.d.ts +106 -0
  97. package/dist/hooks/use-device-snapshot.d.ts +10 -0
  98. package/dist/hooks/use-device-webrtc.d.ts +108 -0
  99. package/dist/hooks/use-devices.d.ts +13 -0
  100. package/dist/hooks/use-doorbell-events.d.ts +20 -0
  101. package/dist/hooks/use-event-invalidation.d.ts +1 -0
  102. package/dist/hooks/use-event-stream.d.ts +5 -0
  103. package/dist/hooks/use-is-mobile.d.ts +8 -0
  104. package/dist/hooks/use-live-buffer.d.ts +8 -0
  105. package/dist/hooks/use-live-event.d.ts +3 -0
  106. package/dist/hooks/use-ptz.d.ts +54 -0
  107. package/dist/hooks/use-system-query.d.ts +12 -0
  108. package/dist/icons/index.d.ts +2 -0
  109. package/dist/icons/provider-icons.d.ts +3 -0
  110. package/dist/icons/status-icons.d.ts +3 -0
  111. package/dist/index.cjs +23484 -14252
  112. package/dist/index.cjs.map +1 -1
  113. package/dist/index.d.ts +14 -3787
  114. package/dist/index.js +22810 -13741
  115. package/dist/index.js.map +1 -1
  116. package/dist/lib/cn.d.ts +2 -0
  117. package/dist/lib/index.d.ts +8 -0
  118. package/dist/lib/mf-runtime-init.d.ts +1 -0
  119. package/dist/lib/phase-config.d.ts +16 -0
  120. package/dist/lib/pipeline-mirror.d.ts +23 -0
  121. package/dist/lib/responsive.d.ts +81 -0
  122. package/dist/lib/shared-context.d.ts +5 -0
  123. package/dist/lib/validate-template.d.ts +2 -0
  124. package/dist/primitives/badge.d.ts +11 -0
  125. package/dist/primitives/bottom-sheet.d.ts +9 -0
  126. package/dist/primitives/button.d.ts +10 -0
  127. package/dist/primitives/card.d.ts +9 -0
  128. package/dist/primitives/checkbox.d.ts +4 -0
  129. package/dist/primitives/collapsible-card.d.ts +15 -0
  130. package/dist/primitives/dialog.d.ts +20 -0
  131. package/dist/primitives/dropdown.d.ts +19 -0
  132. package/dist/primitives/floating-panel.d.ts +22 -0
  133. package/dist/primitives/icon-button.d.ts +13 -0
  134. package/dist/primitives/index.d.ts +21 -0
  135. package/dist/primitives/input.d.ts +11 -0
  136. package/dist/primitives/label.d.ts +4 -0
  137. package/dist/primitives/mobile-drawer.d.ts +10 -0
  138. package/dist/primitives/popover.d.ts +10 -0
  139. package/dist/primitives/scroll-area.d.ts +4 -0
  140. package/dist/primitives/select.d.ts +9 -0
  141. package/dist/primitives/separator.d.ts +9 -0
  142. package/dist/primitives/skeleton.d.ts +4 -0
  143. package/dist/primitives/switch.d.ts +7 -0
  144. package/dist/primitives/tabs.d.ts +17 -0
  145. package/dist/primitives/tooltip.d.ts +6 -0
  146. package/dist/theme/create-theme.d.ts +2 -0
  147. package/dist/theme/defaults.d.ts +4 -0
  148. package/dist/theme/index.cjs +228 -248
  149. package/dist/theme/index.cjs.map +1 -1
  150. package/dist/theme/index.d.ts +6 -128
  151. package/dist/theme/index.js +212 -214
  152. package/dist/theme/index.js.map +1 -1
  153. package/dist/theme/theme-provider.d.ts +10 -0
  154. package/dist/theme/theme-to-css.d.ts +2 -0
  155. package/dist/theme/{index.d.cts → types.d.ts} +5 -27
  156. package/dist/theme/use-theme-mode.d.ts +2 -0
  157. package/dist/trpc-react.d.ts +7 -0
  158. package/package.json +5 -3
  159. 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,5 @@
1
+ import { LucideProps } from 'lucide-react';
2
+ export interface PhaseIconProps extends LucideProps {
3
+ readonly phase: string;
4
+ }
5
+ export declare function PhaseIcon({ phase, ...props }: PhaseIconProps): 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;