@camstack/ui-library 0.1.58 → 0.2.0

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 (138) hide show
  1. package/dist/composites/addon-global-settings-form.d.ts +1 -1
  2. package/dist/composites/agent-step-editor.d.ts +1 -1
  3. package/dist/composites/app-shell/app-shell.d.ts +1 -1
  4. package/dist/composites/app-shell/sidebar-item.d.ts +1 -1
  5. package/dist/composites/app-shell/sidebar.d.ts +1 -1
  6. package/dist/composites/audio-classification-list.d.ts +1 -1
  7. package/dist/composites/audio-level-waveform.d.ts +1 -1
  8. package/dist/composites/audio-waveform.d.ts +1 -1
  9. package/dist/composites/battery-badge.d.ts +1 -1
  10. package/dist/composites/breadcrumb.d.ts +2 -1
  11. package/dist/composites/camera-stream-player.d.ts +33 -1
  12. package/dist/composites/cap-settings/AutotrackSection.d.ts +1 -1
  13. package/dist/composites/cap-settings/ConsumablesPanel.d.ts +1 -1
  14. package/dist/composites/cap-settings/CoverageTrack.d.ts +1 -1
  15. package/dist/composites/cap-settings/EventBucketStrip.d.ts +1 -1
  16. package/dist/composites/cap-settings/EventHeatmap.d.ts +1 -1
  17. package/dist/composites/cap-settings/MaskShapeCanvas.d.ts +1 -1
  18. package/dist/composites/cap-settings/MotionZonesSettings.d.ts +1 -1
  19. package/dist/composites/cap-settings/PrivacyMaskSettings.d.ts +1 -1
  20. package/dist/composites/cap-settings/PtzPanel.d.ts +1 -1
  21. package/dist/composites/cap-settings/RecordingPanel.d.ts +1 -1
  22. package/dist/composites/cap-settings/RecordingRulesEditor.d.ts +1 -1
  23. package/dist/composites/cap-settings/RecordingSettings.d.ts +1 -1
  24. package/dist/composites/cap-settings/RecordingTimeline.d.ts +1 -1
  25. package/dist/composites/cap-settings/ScheduleBandsEditor.d.ts +7 -0
  26. package/dist/composites/cap-settings/TimelineControls.d.ts +1 -1
  27. package/dist/composites/cap-settings/event-thumb.d.ts +3 -3
  28. package/dist/composites/cap-settings/recording-config-form.d.ts +30 -1
  29. package/dist/composites/code-block.d.ts +1 -1
  30. package/dist/composites/config-form-builder.d.ts +1 -1
  31. package/dist/composites/config-form-field.d.ts +3 -3
  32. package/dist/composites/confirm-action-button.d.ts +1 -1
  33. package/dist/composites/confirm-dialog.d.ts +1 -1
  34. package/dist/composites/data-table/data-table-header.d.ts +1 -1
  35. package/dist/composites/data-table/data-table-pagination.d.ts +1 -1
  36. package/dist/composites/data-table/data-table-row.d.ts +1 -1
  37. package/dist/composites/data-table/data-table.d.ts +1 -1
  38. package/dist/composites/data-table.d.ts +1 -1
  39. package/dist/composites/detection-canvas.d.ts +1 -1
  40. package/dist/composites/detection-overlay.d.ts +1 -1
  41. package/dist/composites/detection-result-tree.d.ts +1 -1
  42. package/dist/composites/dev-shell.d.ts +1 -1
  43. package/dist/composites/device-activity-panel.d.ts +1 -1
  44. package/dist/composites/device-card.d.ts +1 -1
  45. package/dist/composites/device-controls/brightness-panel.d.ts +1 -1
  46. package/dist/composites/device-controls/climate-panel.d.ts +1 -1
  47. package/dist/composites/device-controls/control-panel.d.ts +1 -1
  48. package/dist/composites/device-controls/cover-hero-card.d.ts +1 -1
  49. package/dist/composites/device-controls/fan-hero-card.d.ts +1 -1
  50. package/dist/composites/device-controls/fan-panel.d.ts +1 -1
  51. package/dist/composites/device-controls/humidifier-control.d.ts +1 -1
  52. package/dist/composites/device-controls/index.d.ts +5 -5
  53. package/dist/composites/device-controls/light-hero-card.d.ts +1 -1
  54. package/dist/composites/device-controls/lock-hero-card.d.ts +1 -1
  55. package/dist/composites/device-controls/lock-panel.d.ts +1 -1
  56. package/dist/composites/device-controls/media-player-hero-card.d.ts +1 -1
  57. package/dist/composites/device-controls/media-player-panel.d.ts +1 -1
  58. package/dist/composites/device-controls/panel-controls.d.ts +8 -8
  59. package/dist/composites/device-controls/popover-row-action.d.ts +1 -1
  60. package/dist/composites/device-controls/radial-gauge.d.ts +1 -1
  61. package/dist/composites/device-controls/thermostat-hero-card.d.ts +1 -1
  62. package/dist/composites/device-controls/valve-control.d.ts +1 -1
  63. package/dist/composites/device-controls/water-heater-control.d.ts +1 -1
  64. package/dist/composites/device-export-panel.d.ts +1 -1
  65. package/dist/composites/device-grid.d.ts +1 -1
  66. package/dist/composites/device-item/actions.d.ts +1 -1
  67. package/dist/composites/device-item/children-accordion.d.ts +1 -1
  68. package/dist/composites/device-item/reboot-quick-action.d.ts +1 -1
  69. package/dist/composites/device-list/icon-action.d.ts +1 -1
  70. package/dist/composites/device-list/index.d.ts +2 -2
  71. package/dist/composites/device-list/multi-select.d.ts +1 -1
  72. package/dist/composites/device-list/type-filter.d.ts +1 -1
  73. package/dist/composites/discovery-panel.d.ts +1 -1
  74. package/dist/composites/doorbell-recent-panel.d.ts +1 -1
  75. package/dist/composites/empty-state.d.ts +1 -1
  76. package/dist/composites/error-box.d.ts +1 -1
  77. package/dist/composites/event-stream.d.ts +2 -2
  78. package/dist/composites/filter-bar.d.ts +1 -1
  79. package/dist/composites/form-field.d.ts +1 -1
  80. package/dist/composites/hls-video.d.ts +1 -1
  81. package/dist/composites/image-selector.d.ts +1 -1
  82. package/dist/composites/index.d.ts +4 -4
  83. package/dist/composites/inference-config-selector.d.ts +1 -1
  84. package/dist/composites/kebab-menu.d.ts +1 -1
  85. package/dist/composites/key-value-list.d.ts +1 -1
  86. package/dist/composites/log-stream.d.ts +2 -2
  87. package/dist/composites/login-form.d.ts +1 -1
  88. package/dist/composites/node-picker.d.ts +1 -1
  89. package/dist/composites/page-header.d.ts +1 -1
  90. package/dist/composites/phase-icon.d.ts +1 -1
  91. package/dist/composites/pipeline-builder.d.ts +1 -1
  92. package/dist/composites/pipeline-runtime-selector.d.ts +1 -1
  93. package/dist/composites/pipeline-step.d.ts +3 -3
  94. package/dist/composites/pipeline-tree-matrix.d.ts +1 -1
  95. package/dist/composites/provider-badge.d.ts +1 -1
  96. package/dist/composites/ptz-overlay.d.ts +1 -1
  97. package/dist/composites/qr-code.d.ts +1 -1
  98. package/dist/composites/response-log.d.ts +1 -1
  99. package/dist/composites/scope-picker.d.ts +1 -1
  100. package/dist/composites/slide-over-panel.d.ts +1 -1
  101. package/dist/composites/snapshot-button.d.ts +1 -1
  102. package/dist/composites/stat-card.d.ts +1 -1
  103. package/dist/composites/state-values-stream.d.ts +1 -1
  104. package/dist/composites/status-badge.d.ts +1 -1
  105. package/dist/composites/step-timings.d.ts +1 -1
  106. package/dist/composites/step-tree-master.d.ts +1 -1
  107. package/dist/composites/stream-panel.d.ts +1 -1
  108. package/dist/composites/timezone-selector.d.ts +1 -1
  109. package/dist/composites/version-badge.d.ts +2 -2
  110. package/dist/composites/widget-panel.d.ts +2 -2
  111. package/dist/contexts/custom-field-renderers.d.ts +1 -1
  112. package/dist/contexts/device-context.d.ts +1 -1
  113. package/dist/contexts/player-overlays.d.ts +1 -1
  114. package/dist/contexts/system-context.d.ts +1 -1
  115. package/dist/contexts/vod-playback.d.ts +1 -1
  116. package/dist/contexts/widget-registry.d.ts +1 -1
  117. package/dist/contexts/zone-editing.d.ts +1 -1
  118. package/dist/generated/system-hooks.d.ts +56 -0
  119. package/dist/hooks/index.d.ts +2 -2
  120. package/dist/index.cjs +2757 -366
  121. package/dist/index.js +2730 -366
  122. package/dist/primitives/bottom-sheet.d.ts +1 -1
  123. package/dist/primitives/collapsible-card.d.ts +1 -1
  124. package/dist/primitives/dialog.d.ts +6 -6
  125. package/dist/primitives/dropdown.d.ts +3 -3
  126. package/dist/primitives/floating-panel.d.ts +1 -1
  127. package/dist/primitives/mobile-drawer.d.ts +1 -1
  128. package/dist/primitives/popover.d.ts +3 -3
  129. package/dist/primitives/tabs.d.ts +4 -4
  130. package/dist/primitives/tooltip.d.ts +3 -3
  131. package/dist/theme/index.cjs +0 -3
  132. package/dist/theme/index.js +0 -2
  133. package/dist/theme/theme-provider.d.ts +1 -1
  134. package/package.json +11 -5
  135. package/dist/index.cjs.map +0 -1
  136. package/dist/index.js.map +0 -1
  137. package/dist/theme/index.cjs.map +0 -1
  138. package/dist/theme/index.js.map +0 -1
@@ -56,5 +56,5 @@ interface AddonGlobalSettingsFormProps {
56
56
  */
57
57
  readonly onOverrideChange?: (patch: Record<string, unknown>, effective: Record<string, unknown>) => void;
58
58
  }
59
- export declare function AddonGlobalSettingsForm({ trpc, addonId, nodeId, title, disabled, onAfterChange, refreshToken, collapsible, defaultOpen, mode, onOverrideChange, }: AddonGlobalSettingsFormProps): import("react/jsx-runtime").JSX.Element;
59
+ export declare function AddonGlobalSettingsForm({ trpc, addonId, nodeId, title, disabled, onAfterChange, refreshToken, collapsible, defaultOpen, mode, onOverrideChange, }: AddonGlobalSettingsFormProps): import("react").JSX.Element;
60
60
  export {};
@@ -12,4 +12,4 @@ export interface AgentStepEditorProps {
12
12
  readonly onChangePatch?: (next: CameraStepOverridePatch | null) => void;
13
13
  readonly engineFormat: string;
14
14
  }
15
- export declare function AgentStepEditor(props: AgentStepEditorProps): import("react/jsx-runtime").JSX.Element;
15
+ export declare function AgentStepEditor(props: AgentStepEditorProps): import("react").JSX.Element;
@@ -16,4 +16,4 @@ export interface AppShellProps {
16
16
  children: ReactNode;
17
17
  className?: string;
18
18
  }
19
- export declare function AppShell({ sidebar, header, mobileLogo, mobileActions, children, className }: AppShellProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function AppShell({ sidebar, header, mobileLogo, mobileActions, children, className, }: AppShellProps): import("react").JSX.Element;
@@ -7,4 +7,4 @@ export interface SidebarItemProps {
7
7
  active?: boolean;
8
8
  className?: string;
9
9
  }
10
- export declare function SidebarItem({ label, icon: Icon, href, badge, active, className, }: SidebarItemProps): import("react/jsx-runtime").JSX.Element;
10
+ export declare function SidebarItem({ label, icon: Icon, href, badge, active, className, }: SidebarItemProps): import("react").JSX.Element;
@@ -11,4 +11,4 @@ export interface SidebarProps {
11
11
  onNavigate?: () => void;
12
12
  className?: string;
13
13
  }
14
- export declare function Sidebar({ logo, sections, footer, onNavigate, className }: SidebarProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function Sidebar({ logo, sections, footer, onNavigate, className }: SidebarProps): import("react").JSX.Element;
@@ -17,4 +17,4 @@ export interface AudioClassificationListProps {
17
17
  /**
18
18
  * Displays audio classification results as a ranked list with score bars.
19
19
  */
20
- export declare function AudioClassificationList({ classifications, processing, inferenceMs, maxItems, className, }: AudioClassificationListProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function AudioClassificationList({ classifications, processing, inferenceMs, maxItems, className, }: AudioClassificationListProps): import("react").JSX.Element;
@@ -32,4 +32,4 @@ export interface AudioLevelWaveformProps {
32
32
  * Designed to be fed from the `pipeline.audio-inference-result` event
33
33
  * (each chunk, ~0.5s, produces one sample via `frame.level.dbfs`).
34
34
  */
35
- export declare function AudioLevelWaveform({ currentDbfs, durationSec, maxSamples, height, className, color, clipColor, clipThreshold, minDbfs, }: AudioLevelWaveformProps): import("react/jsx-runtime").JSX.Element;
35
+ export declare function AudioLevelWaveform({ currentDbfs, durationSec, maxSamples, height, className, color, clipColor, clipThreshold, minDbfs, }: AudioLevelWaveformProps): import("react").JSX.Element;
@@ -17,4 +17,4 @@ export interface AudioWaveformProps {
17
17
  * Renders a waveform from Float32Array audio samples.
18
18
  * Downsamples to pixel resolution for performance.
19
19
  */
20
- export declare function AudioWaveform({ samples, sampleRate, height, className, color, bgColor, }: AudioWaveformProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function AudioWaveform({ samples, sampleRate, height, className, color, bgColor, }: AudioWaveformProps): import("react").JSX.Element;
@@ -12,4 +12,4 @@ export interface BatteryBadgeProps {
12
12
  readonly variant?: 'compact' | 'full';
13
13
  readonly className?: string;
14
14
  }
15
- export declare function BatteryBadge({ status, variant, className }: BatteryBadgeProps): import("react/jsx-runtime").JSX.Element | null;
15
+ export declare function BatteryBadge({ status, variant, className }: BatteryBadgeProps): import("react").JSX.Element | null;
@@ -1,3 +1,4 @@
1
+ import { default as React } from 'react';
1
2
  export interface BreadcrumbItem {
2
3
  /** Display label */
3
4
  label: string;
@@ -22,4 +23,4 @@ export interface BreadcrumbProps {
22
23
  * ]} />
23
24
  * ```
24
25
  */
25
- export declare function Breadcrumb({ items, className }: BreadcrumbProps): import("react/jsx-runtime").JSX.Element;
26
+ export declare function Breadcrumb({ items, className }: BreadcrumbProps): React.JSX.Element;
@@ -102,6 +102,15 @@ export interface CameraStreamPlayerProps {
102
102
  muted?: boolean;
103
103
  /** Show toolbar controls (default: true) */
104
104
  showControls?: boolean;
105
+ /** Show a live client-side WebRTC stats overlay (bitrate/fps/res/RTT),
106
+ * computed from the PeerConnection's getStats(). Default: false. */
107
+ showStats?: boolean;
108
+ /** DEBUG: when provided, polls inbound-video getStats() ~1 Hz during playback
109
+ * and reports per-window health metrics (frames received/decoded/dropped,
110
+ * freezes, jitter, playback-clock advance). The embed forwards these over the
111
+ * existing host log bridge (`{type:'log'}`), so they respect the app's
112
+ * debug-mode flag. Used to diagnose recorded VOD-over-WebRTC stutter. */
113
+ onPlaybackStats?: (data: Record<string, unknown>) => void;
105
114
  /** Additional CSS classes for the root container */
106
115
  className?: string;
107
116
  /** Called on connection state change */
@@ -182,6 +191,29 @@ export interface CameraStreamPlayerProps {
182
191
  * Use for network simulation (benchmark) or manual tier forcing.
183
192
  */
184
193
  hintsOverride?: Partial<ClientStreamHints>;
194
+ /**
195
+ * Host-driven fast reconnect. Bump this number (monotonic) to force a
196
+ * full reconnect WITHOUT remounting the player — used by the embed when
197
+ * the native shell detects a network change (Wi-Fi↔cellular) or returns
198
+ * from background. Because `cleanup()` no longer clears `srcObject`, the
199
+ * LAST DECODED FRAME stays on screen across the reconnect (no black
200
+ * flash, no covering loader). The initial value is ignored — only
201
+ * changes trigger a reconnect. Distinct from remounting via `streamKey`,
202
+ * which blanks the element.
203
+ */
204
+ reconnectSignal?: number;
205
+ /**
206
+ * Optional control data-channel hook (client-offer mode only). When
207
+ * provided, the player opens a `camstack-control` `RTCDataChannel` on the
208
+ * PeerConnection BEFORE building the offer (so it is negotiated into the
209
+ * m=application section) and hands the channel to this callback for each new
210
+ * connection. Used by the recorded-playback timeline embed to drive the
211
+ * broker's `TimelineSession` (seek / scrub-commit / play-rate / go-live) and
212
+ * receive server state/position over the SAME WebRTC session that carries the
213
+ * unified live-or-recorded `<video>` track. Omit it (the default) for a plain
214
+ * live player — no data channel is created and behaviour is unchanged.
215
+ */
216
+ onControlChannel?: (channel: RTCDataChannel) => void;
185
217
  }
186
- export declare function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay, muted: initialMuted, showControls, className, onStateChange, onError, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, }: CameraStreamPlayerProps): import("react/jsx-runtime").JSX.Element;
218
+ export declare function CameraStreamPlayer({ serverUrl, streamKey, label, autoPlay, muted: initialMuted, showControls, showStats, onPlaybackStats, className, onStateChange, onError, overlay, createSession, sendAnswer, handleOffer, getIceServers, addIceCandidate, getIceCandidates, closeSession, getSessionState, reoffer, posterUrl, hintsOverride, reconnectSignal, onControlChannel, }: CameraStreamPlayerProps): import("react").JSX.Element;
187
219
  export {};
@@ -1,5 +1,5 @@
1
1
  interface AutotrackSectionProps {
2
2
  readonly deviceId: number;
3
3
  }
4
- export declare function AutotrackSection({ deviceId }: AutotrackSectionProps): import("react/jsx-runtime").JSX.Element;
4
+ export declare function AutotrackSection({ deviceId }: AutotrackSectionProps): import("react").JSX.Element;
5
5
  export {};
@@ -1,2 +1,2 @@
1
1
  import { CapSettingsComponentProps } from './index';
2
- export declare function ConsumablesPanel({ deviceId }: CapSettingsComponentProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function ConsumablesPanel({ deviceId }: CapSettingsComponentProps): import("react").JSX.Element;
@@ -8,5 +8,5 @@ interface CoverageTrackProps {
8
8
  /** Called with the absolute ms a click maps to within the window. */
9
9
  readonly onSeek: (clickMs: number) => void;
10
10
  }
11
- export declare function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek, }: CoverageTrackProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function CoverageTrack({ windowFrom, windowTo, spans, playheadMs, onSeek, }: CoverageTrackProps): import("react").JSX.Element;
12
12
  export {};
@@ -21,5 +21,5 @@ interface EventBucketStripProps {
21
21
  /** Called when the user clicks "Load more". */
22
22
  readonly onLoadMore: () => void;
23
23
  }
24
- export declare function EventBucketStrip({ clips, loading, busyKey, onPlay, enabledKinds, onToggleKind, hasMore, onLoadMore }: EventBucketStripProps): import("react/jsx-runtime").JSX.Element;
24
+ export declare function EventBucketStrip({ clips, loading, busyKey, onPlay, enabledKinds, onToggleKind, hasMore, onLoadMore, }: EventBucketStripProps): import("react").JSX.Element;
25
25
  export {};
@@ -6,5 +6,5 @@ interface EventHeatmapProps {
6
6
  readonly selectedIndex: number | null;
7
7
  readonly onSelectBucket: (index: number) => void;
8
8
  }
9
- export declare function EventHeatmap({ windowFrom, windowTo, buckets, selectedIndex, onSelectBucket }: EventHeatmapProps): import("react/jsx-runtime").JSX.Element;
9
+ export declare function EventHeatmap({ windowFrom, windowTo, buckets, selectedIndex, onSelectBucket, }: EventHeatmapProps): import("react").JSX.Element;
10
10
  export {};
@@ -38,7 +38,7 @@ export interface MaskShapeCanvasProps {
38
38
  readonly height: number;
39
39
  };
40
40
  }
41
- declare function MaskShapeCanvasImpl({ items, selectedId, onSelect, onShapeChange, onDrawComplete, drawingKind, supportedShapes, transparent, backdrop, polygonVertices, grid, }: MaskShapeCanvasProps): import("react/jsx-runtime").JSX.Element;
41
+ declare function MaskShapeCanvasImpl({ items, selectedId, onSelect, onShapeChange, onDrawComplete, drawingKind, supportedShapes, transparent, backdrop, polygonVertices, grid, }: MaskShapeCanvasProps): import("react").JSX.Element;
42
42
  /**
43
43
  * Memoised export. The Konva scene is expensive to re-evaluate (many nodes per
44
44
  * item + per-item drag-bound closures) and overlay parents re-render on every
@@ -1,2 +1,2 @@
1
1
  import { CapSettingsComponentProps } from './index';
2
- export declare function MotionZonesSettings({ deviceId }: CapSettingsComponentProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function MotionZonesSettings({ deviceId }: CapSettingsComponentProps): import("react").JSX.Element | null;
@@ -1,2 +1,2 @@
1
1
  import { CapSettingsComponentProps } from './index';
2
- export declare function PrivacyMaskSettings({ deviceId }: CapSettingsComponentProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export declare function PrivacyMaskSettings({ deviceId }: CapSettingsComponentProps): import("react").JSX.Element | null;
@@ -1,2 +1,2 @@
1
1
  import { CapSettingsComponentProps } from './index';
2
- export declare function PtzPanel({ deviceId }: CapSettingsComponentProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function PtzPanel({ deviceId }: CapSettingsComponentProps): import("react").JSX.Element;
@@ -1,2 +1,2 @@
1
1
  import { HostWidgetProps } from '../../widgets/host-widgets';
2
- export declare function RecordingPanel({ deviceId }: HostWidgetProps): import("react/jsx-runtime").JSX.Element;
2
+ export declare function RecordingPanel({ deviceId }: HostWidgetProps): import("react").JSX.Element;
@@ -3,5 +3,5 @@ interface RecordingRulesEditorProps {
3
3
  readonly rules: readonly RecordingRule[];
4
4
  readonly onChange: (rules: RecordingRule[]) => void;
5
5
  }
6
- export declare function RecordingRulesEditor({ rules, onChange }: RecordingRulesEditorProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function RecordingRulesEditor({ rules, onChange }: RecordingRulesEditorProps): import("react").JSX.Element;
7
7
  export {};
@@ -4,5 +4,5 @@ interface RecordingSettingsProps {
4
4
  readonly saving: boolean;
5
5
  readonly onSave: (config: RecordingConfig) => void;
6
6
  }
7
- export declare function RecordingSettings({ initial, saving, onSave }: RecordingSettingsProps): import("react/jsx-runtime").JSX.Element;
7
+ export declare function RecordingSettings({ initial, saving, onSave }: RecordingSettingsProps): import("react").JSX.Element;
8
8
  export {};
@@ -1,5 +1,5 @@
1
1
  interface RecordingTimelineProps {
2
2
  readonly deviceId: number;
3
3
  }
4
- export declare function RecordingTimeline({ deviceId }: RecordingTimelineProps): import("react/jsx-runtime").JSX.Element;
4
+ export declare function RecordingTimeline({ deviceId }: RecordingTimelineProps): import("react").JSX.Element;
5
5
  export {};
@@ -0,0 +1,7 @@
1
+ import { RecordingSchedule } from '@camstack/types';
2
+ interface ScheduleBandsEditorProps {
3
+ readonly schedules: readonly RecordingSchedule[];
4
+ readonly onChange: (schedules: RecordingSchedule[]) => void;
5
+ }
6
+ export declare function ScheduleBandsEditor({ schedules, onChange }: ScheduleBandsEditorProps): import("react").JSX.Element;
7
+ export {};
@@ -17,5 +17,5 @@ interface TimelineControlsProps {
17
17
  * current view midpoint. Horizontal pan is wired via wheel events in
18
18
  * RecordingTimeline directly.
19
19
  */
20
- export declare function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange, }: TimelineControlsProps): import("react/jsx-runtime").JSX.Element;
20
+ export declare function TimelineControls({ day, onDayChange, view, dayBounds, onViewChange, }: TimelineControlsProps): import("react").JSX.Element;
21
21
  export {};
@@ -3,9 +3,9 @@ interface EventThumbProps {
3
3
  readonly mediaUrl?: string;
4
4
  readonly kind: ClipKind;
5
5
  }
6
- export declare function EventThumb({ mediaUrl, kind }: EventThumbProps): import("react/jsx-runtime").JSX.Element;
7
- export declare function EventKindIcon({ kind, large }: {
6
+ export declare function EventThumb({ mediaUrl, kind }: EventThumbProps): import("react").JSX.Element;
7
+ export declare function EventKindIcon({ kind, large, }: {
8
8
  readonly kind: ClipKind;
9
9
  readonly large?: boolean;
10
- }): import("react/jsx-runtime").JSX.Element;
10
+ }): import("react").JSX.Element;
11
11
  export {};
@@ -1,5 +1,34 @@
1
- import { RecordingRule, RecordingMode } from '@camstack/types';
1
+ import { RecordingRule, RecordingMode, RecordingConfig, RecordingStorageMode, RecordingSchedule, RecordingTriggers, RecordingRetention, CamProfile } from '@camstack/types';
2
2
  export declare function emptyRule(): RecordingRule;
3
3
  export declare function isTriggerMode(mode: RecordingMode): boolean;
4
4
  export declare function withRuleAt(rules: readonly RecordingRule[], index: number, patch: Partial<RecordingRule>): RecordingRule[];
5
5
  export declare function removeRuleAt(rules: readonly RecordingRule[], index: number): RecordingRule[];
6
+ /**
7
+ * The editable shape of the Basic recording form: the authoritative `mode` plus
8
+ * its mode-specific parameters. `schedules` are the recording time-bands (empty
9
+ * = always); `triggers`/buffers apply to `events`. Never carries `rules` — Base
10
+ * is mode-authoritative and the backend compiles `rules` from `mode`.
11
+ */
12
+ export interface RecordingFormState {
13
+ readonly mode: RecordingStorageMode;
14
+ readonly profiles?: readonly CamProfile[];
15
+ readonly segmentSeconds?: number;
16
+ readonly schedules: readonly RecordingSchedule[];
17
+ readonly triggers: RecordingTriggers;
18
+ readonly preBufferSec?: number;
19
+ readonly postBufferSec?: number;
20
+ readonly retention?: RecordingRetention;
21
+ }
22
+ /** Read a persisted/migrated config into the Basic form state. `mode` is read
23
+ * directly; a legacy mode-less config falls back to continuous/off by `enabled`. */
24
+ export declare function formStateFromConfig(cfg: RecordingConfig): RecordingFormState;
25
+ /** Serialize the Basic form state back to the wire config. `enabled` is derived
26
+ * from `mode`; `rules`/singular `schedule` are never emitted. Schedules,
27
+ * triggers and buffers are preserved even when off so they survive a re-enable. */
28
+ export declare function configFromFormState(state: RecordingFormState): RecordingConfig;
29
+ /**
30
+ * A config is "advanced" when it carries `rules[]` that the backend could NOT
31
+ * cleanly collapse to a `mode` (the non-destructive `migrateRulesToMode` leaves
32
+ * `mode` absent). The settings UI opens such a config in the Advanced rules tab.
33
+ */
34
+ export declare function isAdvancedConfig(cfg: RecordingConfig): boolean;
@@ -3,4 +3,4 @@ export interface CodeBlockProps {
3
3
  maxHeight?: number;
4
4
  className?: string;
5
5
  }
6
- export declare function CodeBlock({ children, maxHeight, className }: CodeBlockProps): import("react/jsx-runtime").JSX.Element;
6
+ export declare function CodeBlock({ children, maxHeight, className }: CodeBlockProps): import("react").JSX.Element;
@@ -14,5 +14,5 @@ interface FormBuilderProps {
14
14
  /** Callback to clear a probe result when a field value changes */
15
15
  onClearProbe?: (key: string) => void;
16
16
  }
17
- export declare function ConfigFormBuilder({ schema, values, onChange, disabled, translationFn, onTestField, probeResults, onClearProbe }: FormBuilderProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function ConfigFormBuilder({ schema, values, onChange, disabled, translationFn, onTestField, probeResults, onClearProbe, }: FormBuilderProps): import("react").JSX.Element;
18
18
  export {};
@@ -44,14 +44,14 @@ export declare function NodeSelectField({ field, value, onChange, disabled, tran
44
44
  onChange: (v: unknown) => void;
45
45
  disabled?: boolean;
46
46
  translationFn?: TranslationFn;
47
- }): import("react/jsx-runtime").JSX.Element;
47
+ }): import("react").JSX.Element;
48
48
  export declare function NodeMultiSelectField({ field, value, onChange, disabled, translationFn, }: {
49
49
  field: ConfigNodeMultiSelectField;
50
50
  value: unknown;
51
51
  onChange: (v: unknown) => void;
52
52
  disabled?: boolean;
53
53
  translationFn?: TranslationFn;
54
- }): import("react/jsx-runtime").JSX.Element;
54
+ }): import("react").JSX.Element;
55
55
  /**
56
56
  * Resolve a `ConfigCondition` against the form's flat values bag and the
57
57
  * sibling-field list (used to recover schema defaults when the
@@ -66,5 +66,5 @@ export declare function NodeMultiSelectField({ field, value, onChange, disabled,
66
66
  * rendered without instantiating a React subtree.
67
67
  */
68
68
  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 }: FormFieldProps): import("react/jsx-runtime").JSX.Element | null;
69
+ export declare function FormField({ field, values, onChange, disabled, translationFn, onTestField, externalProbe, allFields, onAction, }: FormFieldProps): import("react").JSX.Element | null;
70
70
  export { FormField as ConfigFormField };
@@ -38,4 +38,4 @@ export interface ConfirmActionButtonProps<TResult> {
38
38
  /** Called after `action` resolves, with the result. */
39
39
  readonly onSuccess?: (result: TResult) => void;
40
40
  }
41
- export declare function ConfirmActionButton<TResult>({ label, icon: Icon, title, description, confirmLabel, triggerVariant, confirmVariant, size, disabled, className, action, onSuccess, }: ConfirmActionButtonProps<TResult>): import("react/jsx-runtime").JSX.Element;
41
+ export declare function ConfirmActionButton<TResult>({ label, icon: Icon, title, description, confirmLabel, triggerVariant, confirmVariant, size, disabled, className, action, onSuccess, }: ConfirmActionButtonProps<TResult>): import("react").JSX.Element;
@@ -9,5 +9,5 @@ interface ConfirmOptions {
9
9
  export declare function useConfirm(): (options: ConfirmOptions) => Promise<boolean>;
10
10
  export declare function ConfirmDialogProvider({ children }: {
11
11
  children: ReactNode;
12
- }): import("react/jsx-runtime").JSX.Element;
12
+ }): import("react").JSX.Element;
13
13
  export {};
@@ -6,5 +6,5 @@ interface DataTableHeaderProps<T> {
6
6
  stickyHeader?: boolean;
7
7
  flexRender: typeof flexRender;
8
8
  }
9
- export declare function DataTableHeader<T>({ headerGroups, onSortingChange, stickyHeader, flexRender: render, }: DataTableHeaderProps<T>): import("react/jsx-runtime").JSX.Element;
9
+ export declare function DataTableHeader<T>({ headerGroups, onSortingChange, stickyHeader, flexRender: render, }: DataTableHeaderProps<T>): import("react").JSX.Element;
10
10
  export {};
@@ -5,5 +5,5 @@ interface DataTablePaginationProps {
5
5
  total: number;
6
6
  onPaginationChange?: (pagination: PaginationState) => void;
7
7
  }
8
- export declare function DataTablePagination({ page, pageSize, total, onPaginationChange, }: DataTablePaginationProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function DataTablePagination({ page, pageSize, total, onPaginationChange, }: DataTablePaginationProps): import("react").JSX.Element;
9
9
  export {};
@@ -6,5 +6,5 @@ interface DataTableRowProps<T> {
6
6
  rowActions?: (row: T) => DataTableAction[];
7
7
  flexRender: typeof flexRender;
8
8
  }
9
- export declare function DataTableRow<T>({ row, onRowClick, rowActions, flexRender: render, }: DataTableRowProps<T>): import("react/jsx-runtime").JSX.Element;
9
+ export declare function DataTableRow<T>({ row, onRowClick, rowActions, flexRender: render, }: DataTableRowProps<T>): import("react").JSX.Element;
10
10
  export {};
@@ -1,2 +1,2 @@
1
1
  import { DataTableProps } from './types';
2
- export declare function DataTable<T>({ data, columns: userColumns, sorting, onSortingChange, filtering, onFilteringChange, pagination, onPaginationChange, loading, emptyState, rowActions, onRowClick, selectable, compact, stickyHeader, className, mobileMode, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element;
2
+ export declare function DataTable<T>({ data, columns: userColumns, sorting, onSortingChange, filtering, onFilteringChange, pagination, onPaginationChange, loading, emptyState, rowActions, onRowClick, selectable, compact, stickyHeader, className, mobileMode, }: DataTableProps<T>): import("react").JSX.Element;
@@ -34,4 +34,4 @@ export interface DataTableProps<T> {
34
34
  /** Per-row className resolver (e.g. status-coloured backgrounds). */
35
35
  readonly rowClassName?: (row: T, rowIndex: number) => string | undefined;
36
36
  }
37
- export declare function DataTable<T>({ columns, rows, rowKey, onRowClick, minWidthPx, emptyMessage, className, bordered, rowClassName, }: DataTableProps<T>): import("react/jsx-runtime").JSX.Element | null;
37
+ export declare function DataTable<T>({ columns, rows, rowKey, onRowClick, minWidthPx, emptyMessage, className, bordered, rowClassName, }: DataTableProps<T>): import("react").JSX.Element | null;
@@ -26,4 +26,4 @@ export interface DetectionCanvasProps {
26
26
  /** Border width for bboxes in px (default: 2) */
27
27
  readonly borderWidth?: number;
28
28
  }
29
- export declare function DetectionCanvas({ src, imageWidth, imageHeight, detections, classColors, aspectRatio, className, placeholder, showConfidence, minConfidence, borderWidth, }: DetectionCanvasProps): import("react/jsx-runtime").JSX.Element;
29
+ export declare function DetectionCanvas({ src, imageWidth, imageHeight, detections, classColors, aspectRatio, className, placeholder, showConfidence, minConfidence, borderWidth, }: DetectionCanvasProps): import("react").JSX.Element;
@@ -6,4 +6,4 @@ export interface DetectionOverlayProps {
6
6
  readonly showDetections?: boolean;
7
7
  readonly showPhaseIndicator?: boolean;
8
8
  }
9
- export declare function DetectionOverlay({ detections: { motion, motionRaw, detection, phase }, showMotionZones, showMotionRaw, showDetections, showPhaseIndicator, }: DetectionOverlayProps): import("react/jsx-runtime").JSX.Element | null;
9
+ export declare function DetectionOverlay({ detections: { motion, motionRaw, detection, phase }, showMotionZones, showMotionRaw, showDetections, showPhaseIndicator, }: DetectionOverlayProps): import("react").JSX.Element | null;
@@ -8,4 +8,4 @@ export interface DetectionResultTreeProps {
8
8
  /** Callback when a detection's visibility is toggled */
9
9
  readonly onToggleVisibility?: (key: string, visible: boolean) => void;
10
10
  }
11
- export declare function DetectionResultTree({ detections, classColors, className, hiddenKeys, onToggleVisibility, }: DetectionResultTreeProps): import("react/jsx-runtime").JSX.Element;
11
+ export declare function DetectionResultTree({ detections, classColors, className, hiddenKeys, onToggleVisibility, }: DetectionResultTreeProps): import("react").JSX.Element;
@@ -16,5 +16,5 @@ interface DevShellContextValue {
16
16
  logout: () => void;
17
17
  }
18
18
  export declare function useDevShell(): DevShellContextValue;
19
- export declare function DevShell({ children, serverUrl, title, }: DevShellProps): import("react/jsx-runtime").JSX.Element;
19
+ export declare function DevShell({ children, serverUrl, title }: DevShellProps): import("react").JSX.Element;
20
20
  export {};
@@ -29,5 +29,5 @@ declare const TABS: readonly [{
29
29
  readonly icon: import('react').ForwardRefExoticComponent<Omit<import('lucide-react').LucideProps, "ref"> & import('react').RefAttributes<SVGSVGElement>>;
30
30
  }];
31
31
  export type ActivityTabId = (typeof TABS)[number]['id'];
32
- export declare function DeviceActivityPanel({ deviceId, containerDeviceId, defaultEventCategories, defaultStateCaps, initialTab, className, maxHeight, }: DeviceActivityPanelProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function DeviceActivityPanel({ deviceId, containerDeviceId, defaultEventCategories, defaultStateCaps, initialTab, className, maxHeight, }: DeviceActivityPanelProps): import("react").JSX.Element;
33
33
  export {};
@@ -35,4 +35,4 @@ export interface DeviceCardProps {
35
35
  /** Additional CSS classes */
36
36
  className?: string;
37
37
  }
38
- export declare function DeviceCard({ title, subtitle, status, selected, onClick, badges, actions, offlineAction, className, }: DeviceCardProps): import("react/jsx-runtime").JSX.Element;
38
+ export declare function DeviceCard({ title, subtitle, status, selected, onClick, badges, actions, offlineAction, className, }: DeviceCardProps): import("react").JSX.Element;
@@ -1,3 +1,3 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ControlPanelProps } from './types';
3
- export declare function BrightnessPanel({ trpc, deviceId, layout, optimistic }: ControlPanelProps): ReactNode;
3
+ export declare function BrightnessPanel({ trpc, deviceId, layout, optimistic, }: ControlPanelProps): ReactNode;
@@ -13,4 +13,4 @@ export declare const MODE_COLOR: Record<HvacMode, string>;
13
13
  * matches the borderless cover/lock inline visual language.
14
14
  */
15
15
  export declare const MODE_TEXT_COLOR: Record<HvacMode, string>;
16
- export declare function ClimatePanel({ trpc, deviceId, features: _features, layout, optimistic }: ControlPanelProps): ReactNode;
16
+ export declare function ClimatePanel({ trpc, deviceId, features: _features, layout, optimistic, }: ControlPanelProps): ReactNode;
@@ -7,4 +7,4 @@ export declare function toTimeInput(value: string): string;
7
7
  /** Trim an HA datetime value to the `<input type=datetime-local>` shape
8
8
  * ('YYYY-MM-DDTHH:MM'). Accepts both 'T'- and space-separated forms. */
9
9
  export declare function toDateTimeInput(value: string): string;
10
- export declare function ControlPanel({ trpc, deviceId, features: _features, layout, optimistic }: ControlPanelProps): ReactNode;
10
+ export declare function ControlPanel({ trpc, deviceId, features: _features, layout, optimistic, }: ControlPanelProps): ReactNode;
@@ -24,4 +24,4 @@ import { DeviceControlProps } from './control-registry';
24
24
  * Only hides when the device truly has no cover cap — a transient undefined slice
25
25
  * renders a neutral "unknown" state with all buttons still mounted.
26
26
  */
27
- export declare function CoverHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
27
+ export declare function CoverHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
@@ -18,4 +18,4 @@ import { DeviceControlProps } from './control-registry';
18
18
  * Composes two caps: `switch` (on/off) + `fan-control` (speed / oscillate).
19
19
  * Cap-gated on `switch` (always present on a Fan) — returns null without it.
20
20
  */
21
- export declare function FanHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
21
+ export declare function FanHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
@@ -1,3 +1,3 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ControlPanelProps } from './types';
3
- export declare function FanPanel({ trpc, deviceId, features, layout, optimistic }: ControlPanelProps): ReactNode;
3
+ export declare function FanPanel({ trpc, deviceId, features, layout, optimistic, }: ControlPanelProps): ReactNode;
@@ -24,7 +24,7 @@ export declare function humidifierTint(on: boolean, action: string | null): Humi
24
24
  * HumidifierInlineControl — compact on/off toggle + current→target readout
25
25
  * for a device-list row. Must NOT blow out the row width.
26
26
  */
27
- export declare function HumidifierInlineControl({ trpc, deviceId, optimistic }: DeviceControlProps): ReactNode;
27
+ export declare function HumidifierInlineControl({ trpc, deviceId, optimistic, }: DeviceControlProps): ReactNode;
28
28
  /**
29
29
  * HumidifierHeroCard — full control surface for the device-detail hero.
30
30
  *
@@ -1,4 +1,4 @@
1
- export { ControlColumn, ValueReadout, FILL, RIGHT, CENTER, type ControlAlign, Stepper, SlideToggle, ArcKnob, GripTrack } from './atoms';
1
+ export { ControlColumn, ValueReadout, FILL, RIGHT, CENTER, type ControlAlign, Stepper, SlideToggle, ArcKnob, GripTrack, } from './atoms';
2
2
  export { RadialGauge, type RadialGaugeProps } from './radial-gauge';
3
3
  export { TapToggle, type TapToggleProps } from './tap-toggle';
4
4
  export { ButtonControl, ButtonHeroCard } from './button-control';
@@ -12,14 +12,14 @@ export { MediaPlayerPanel, STATE_COLOR } from './media-player-panel';
12
12
  export { ControlPanel } from './control-panel';
13
13
  export { CONTROL_CAP_NAMES, type ControlCapName, type ControlPanelProps } from './types';
14
14
  export { PopoverRowAction } from './popover-row-action';
15
- export { SensorValueAtom, ROLE_DESCRIPTOR, type SensorDescriptor, type SensorValueAtomProps } from './sensor-value-atom';
15
+ export { SensorValueAtom, ROLE_DESCRIPTOR, type SensorDescriptor, type SensorValueAtomProps, } from './sensor-value-atom';
16
16
  export { DEVICE_TYPE_CONTROL, CONTROL_FILLS, resolveDeviceControl, resolveControlAlign, coverHighlight, type DeviceTypeControl, type DeviceControlProps, type ControlPlacement, } from './control-registry';
17
17
  export { OfflineBadge, type OfflineBadgeProps } from './offline-badge';
18
- export { CoverInlineControl, type CoverHighlightVariant, type CoverButtonHighlight } from './cover-inline';
18
+ export { CoverInlineControl, type CoverHighlightVariant, type CoverButtonHighlight, } from './cover-inline';
19
19
  export { CoverHeroCard } from './cover-hero-card';
20
20
  export { VacuumInlineControl, VacuumHeroCard, vacuumStateMeta, tankAlert, type VacuumStateMeta, type TankKind, type TankAlert, } from './vacuum-control';
21
- export { LawnMowerInlineControl, LawnMowerHeroCard, lawnMowerActivityMeta, type LawnMowerActivityMeta } from './lawn-mower-control';
22
- export { ValveInlineControl, ValveHeroCard, valveStateMeta, type ValveStateMeta } from './valve-control';
21
+ export { LawnMowerInlineControl, LawnMowerHeroCard, lawnMowerActivityMeta, type LawnMowerActivityMeta, } from './lawn-mower-control';
22
+ export { ValveInlineControl, ValveHeroCard, valveStateMeta, type ValveStateMeta, } from './valve-control';
23
23
  export { HumidifierInlineControl, HumidifierHeroCard, humidifierTint, type HumidifierTint, type HumidifierAction, } from './humidifier-control';
24
24
  export { WaterHeaterInlineControl, WaterHeaterHeroCard, waterHeaterTint, waterHeaterPhase, type WaterHeaterTint, type WaterHeaterPhase, } from './water-heater-control';
25
25
  export { WeatherInlineControl, WeatherHeroCard, weatherTint, weatherConditionMeta, type WeatherTint, type WeatherConditionMeta, type WeatherGlyph, } from './weather-control';
@@ -13,4 +13,4 @@ import { DeviceControlProps } from './control-registry';
13
13
  * Composes three caps: `switch` (on/off), `brightness` (level), `color` (CT).
14
14
  * Cap-gated on `switch` (always present on a Light) — returns null without it.
15
15
  */
16
- export declare function LightHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
16
+ export declare function LightHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
@@ -12,4 +12,4 @@ import { DeviceControlProps } from './control-registry';
12
12
  *
13
13
  * Cap-gated: returns null when the device has no lockControl cap.
14
14
  */
15
- export declare function LockHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
15
+ export declare function LockHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
@@ -1,3 +1,3 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { ControlPanelProps } from './types';
3
- export declare function LockPanel({ trpc, deviceId, layout, optimistic, features }: ControlPanelProps): ReactNode;
3
+ export declare function LockPanel({ trpc, deviceId, layout, optimistic, features, }: ControlPanelProps): ReactNode;
@@ -14,4 +14,4 @@ import { DeviceControlProps } from './control-registry';
14
14
  *
15
15
  * Cap-gated on `media-player` — returns null when the device lacks the cap.
16
16
  */
17
- export declare function MediaPlayerHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
17
+ export declare function MediaPlayerHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
@@ -6,4 +6,4 @@ import { MediaPlayerState } from '@camstack/types';
6
6
  * Build fails if a state is added and not reflected here.
7
7
  */
8
8
  export declare const STATE_COLOR: Record<MediaPlayerState, string>;
9
- export declare function MediaPlayerPanel({ trpc, deviceId, features: _features, layout, optimistic }: ControlPanelProps): ReactNode;
9
+ export declare function MediaPlayerPanel({ trpc, deviceId, features: _features, layout, optimistic, }: ControlPanelProps): ReactNode;
@@ -7,11 +7,11 @@ export { FanHeroCard } from './fan-hero-card';
7
7
  export { SwitchHeroCard } from './switch-hero-card';
8
8
  export { MediaPlayerHeroCard } from './media-player-hero-card';
9
9
  export { AlarmHeroCard, AlarmInlineControl as AlarmPanelInlineControl } from './alarm-hero-card';
10
- export declare function SwitchInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
11
- export declare function LockInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
12
- export declare function LightInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
13
- export declare function FanInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
14
- export declare function ThermostatInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
15
- export declare function MediaPlayerInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
16
- export declare function ControlInlineControl({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
17
- export declare function ControlHeroCard({ trpc, deviceId, features, optimistic }: DeviceControlProps): ReactNode;
10
+ export declare function SwitchInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
11
+ export declare function LockInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
12
+ export declare function LightInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
13
+ export declare function FanInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
14
+ export declare function ThermostatInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
15
+ export declare function MediaPlayerInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
16
+ export declare function ControlInlineControl({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
17
+ export declare function ControlHeroCard({ trpc, deviceId, features, optimistic, }: DeviceControlProps): ReactNode;
@@ -5,5 +5,5 @@ interface PopoverRowActionProps {
5
5
  readonly title: string;
6
6
  readonly children: ReactNode;
7
7
  }
8
- export declare function PopoverRowAction({ icon: Icon, title, children }: PopoverRowActionProps): ReactNode;
8
+ export declare function PopoverRowAction({ icon: Icon, title, children, }: PopoverRowActionProps): ReactNode;
9
9
  export {};
@@ -17,4 +17,4 @@ export interface RadialGaugeProps {
17
17
  * Circular gauge with an ArcKnob at `fraction` and centered children.
18
18
  * The knob wrapper carries `data-testid="arc-knob"` for test assertions.
19
19
  */
20
- export declare function RadialGauge({ fraction, color, children, onDragFraction }: RadialGaugeProps): ReactNode;
20
+ export declare function RadialGauge({ fraction, color, children, onDragFraction, }: RadialGaugeProps): ReactNode;