@arbidocs/react 0.3.174 → 0.3.176

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/index.d.cts CHANGED
@@ -3164,6 +3164,140 @@ declare function InlineMicButton({ focused, onTranscript, onError, transcribe, c
3164
3164
  /** Formats a duration in milliseconds as "mm:ss", clamped to non-negative. */
3165
3165
  declare function formatElapsed(ms: number): string;
3166
3166
 
3167
+ /**
3168
+ * useCameraStream
3169
+ *
3170
+ * Shared camera-acquisition engine for photo and video capture — requests
3171
+ * `getUserMedia`, hands back the live `MediaStream` for a host to bind to a
3172
+ * `<video>` element, and tears the tracks down on stop()/unmount. Mirrors
3173
+ * `useAudioRecorder`'s permission/error handling (same DOMException
3174
+ * classification, via `classifyMediaError`) but stays a separate hook rather
3175
+ * than folding into it: audio's state machine centers on an AnalyserNode
3176
+ * level meter with no visual preview, while camera capture centers on a live
3177
+ * video preview with no metering — sharing "here is a device stream and an
3178
+ * error string" is the useful overlap, not the recording state machine
3179
+ * itself. `useVideoRecorder` layers MediaRecorder on top of the stream this
3180
+ * returns; photo capture reads a frame off it directly (see capture-frame.ts).
3181
+ *
3182
+ * REUSE-FIRST: no app coupling, failures surface via `error` rather than a
3183
+ * toast call — same contract as useAudioRecorder.
3184
+ */
3185
+ interface UseCameraStreamResult {
3186
+ /** The live camera stream, or null before start()/after stop(). */
3187
+ stream: MediaStream | null;
3188
+ /** True while the getUserMedia() prompt/negotiation is in flight. */
3189
+ isStarting: boolean;
3190
+ /** A human-readable message from the last failed start() attempt. */
3191
+ error: string | null;
3192
+ start: () => Promise<void>;
3193
+ /** Stops all tracks and clears the stream. Safe to call repeatedly. */
3194
+ stop: () => void;
3195
+ }
3196
+ /**
3197
+ * @param constraints The `video`/`audio` constraints passed to getUserMedia.
3198
+ * Defaults to video-only (photo capture never needs a mic); video capture
3199
+ * passes `{ video: true, audio: true }` to record sound with the picture.
3200
+ */
3201
+ declare function useCameraStream(constraints?: MediaStreamConstraints): UseCameraStreamResult;
3202
+
3203
+ /**
3204
+ * useVideoRecorder
3205
+ *
3206
+ * MediaRecorder lifecycle for video capture, layered on top of an
3207
+ * already-live camera `MediaStream` (see useCameraStream — this hook does
3208
+ * NOT call getUserMedia itself, so the same stream stays open across a
3209
+ * stop()/reset() "record again" without re-prompting for permission).
3210
+ *
3211
+ * Deliberately simpler than useAudioRecorder: no pause/resume (tap-to-start,
3212
+ * tap-to-stop is the whole interaction — see MediaCaptureRecorder) and no
3213
+ * level meter (there's a live video preview instead; a bar-graph loudness
3214
+ * meter would be redundant chrome on top of it).
3215
+ */
3216
+ type VideoRecorderState = 'idle' | 'recording' | 'stopped';
3217
+ interface UseVideoRecorderResult {
3218
+ state: VideoRecorderState;
3219
+ /** Recorded duration so far (ms). Frozen at its final value once stopped. */
3220
+ elapsedMs: number;
3221
+ /** The finished recording. Only set once state === 'stopped'. */
3222
+ blob: Blob | null;
3223
+ /** The MediaRecorder MIME type used (e.g. 'video/webm'). */
3224
+ mimeType: string | null;
3225
+ start: () => void;
3226
+ stop: () => void;
3227
+ /** Back to idle: clears blob/elapsedMs, ready to record again on the same stream. */
3228
+ reset: () => void;
3229
+ }
3230
+ /** @param stream The live camera stream to record — null while the camera
3231
+ * hasn't started yet; start() is a no-op until it's set. */
3232
+ declare function useVideoRecorder(stream: MediaStream | null): UseVideoRecorderResult;
3233
+
3234
+ /**
3235
+ * Captures the current frame of a live `<video>` element (bound to a camera
3236
+ * `MediaStream`, e.g. via useCameraStream) as an image Blob — the shutter
3237
+ * action for photo capture. Draws to an off-screen canvas rather than reading
3238
+ * pixels any other way, since `HTMLCanvasElement.toBlob` is the one
3239
+ * cross-browser path from "a decoded video frame" to "an encoded image file".
3240
+ */
3241
+ declare function captureFrameAsBlob(video: HTMLVideoElement, mimeType?: string): Promise<Blob>;
3242
+
3243
+ /**
3244
+ * PhotoCapture
3245
+ *
3246
+ * Camera capture UI: live preview → shutter → review (retake or save).
3247
+ * Shares its shape (onSave/onDiscard/onError/isSaving) with VoiceNoteRecorder
3248
+ * so a host app wires them identically — see MediaCaptureRecorder.tsx (the
3249
+ * ARBI-frontend wrapper) for how the three capture modes plug into the same
3250
+ * draft/save contract.
3251
+ *
3252
+ * REUSE-FIRST: no app coupling. This component owns only the capture UI and
3253
+ * in-memory blob, never persistence — nothing is uploaded until the host's
3254
+ * `onSave` is called.
3255
+ */
3256
+ interface PhotoCaptureProps {
3257
+ /** Called with the captured photo when the user hits Save. Resolve to let
3258
+ * the host close/replace this capture UI; shows a saving spinner while
3259
+ * the promise is pending. */
3260
+ onSave: (blob: Blob, mimeType: string | null) => Promise<void> | void;
3261
+ /** Called when the user discards the draft. */
3262
+ onDiscard: () => void;
3263
+ /** Surfaces camera failures (e.g. denied permission) — wire this to the
3264
+ * host's own notification system. Without it, failures are silent. */
3265
+ onError?: (message: string) => void;
3266
+ isSaving?: boolean;
3267
+ }
3268
+ declare function PhotoCapture({ onSave, onDiscard, onError, isSaving }: PhotoCaptureProps): React$1.JSX.Element;
3269
+
3270
+ /**
3271
+ * VideoCapture
3272
+ *
3273
+ * Camera capture UI: live preview → tap to record / tap to stop → review
3274
+ * (playback, retake, or save). Shares its shape (onSave/onDiscard/onError/
3275
+ * isSaving) with VoiceNoteRecorder and PhotoCapture — see
3276
+ * MediaCaptureRecorder.tsx (the ARBI-frontend wrapper) for how the three
3277
+ * capture modes plug into the same draft/save contract.
3278
+ *
3279
+ * Deliberately a simple tap-to-start/tap-to-stop toggle rather than a
3280
+ * press-and-hold gesture — matches VoiceNoteRecorder's toggle interaction
3281
+ * and needs no extra gesture handling for a first cut of camera video.
3282
+ *
3283
+ * REUSE-FIRST: no app coupling. This component owns only the capture UI and
3284
+ * in-memory blob, never persistence — nothing is uploaded until the host's
3285
+ * `onSave` is called.
3286
+ */
3287
+ interface VideoCaptureProps {
3288
+ /** Called with the recorded clip when the user hits Save. Resolve to let
3289
+ * the host close/replace this capture UI; shows a saving spinner while
3290
+ * the promise is pending. */
3291
+ onSave: (blob: Blob, mimeType: string | null) => Promise<void> | void;
3292
+ /** Called when the user discards the draft. */
3293
+ onDiscard: () => void;
3294
+ /** Surfaces camera failures (e.g. denied permission) — wire this to the
3295
+ * host's own notification system. Without it, failures are silent. */
3296
+ onError?: (message: string) => void;
3297
+ isSaving?: boolean;
3298
+ }
3299
+ declare function VideoCapture({ onSave, onDiscard, onError, isSaving }: VideoCaptureProps): React$1.JSX.Element;
3300
+
3167
3301
  /**
3168
3302
  * Content-based audio-vs-video detection for containers that don't tell you
3169
3303
  * from the extension alone. WebM in particular can hold audio-only, video-only,
@@ -3196,4 +3330,4 @@ interface ArbiUiState {
3196
3330
  }
3197
3331
  declare const useArbiUiStore: zustand.UseBoundStore<zustand.StoreApi<ArbiUiState>>;
3198
3332
 
3199
- export { type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, AgentBadge, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, type AppNotification, AppleIcon, ArbiBotHeadIcon, ArbiBotIcon, ArbiChat, type ArbiChatLabels, ArbiChatPanel, type ArbiChatPanelProps, type ArbiChatProps, type ArbiChatTheme, ArbiIcon, ArbiProvider, type ArbiProviderProps, type ArbiUiState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AspectOption, AudIcon, type AudioRecorderState, BASE_COLORS, ChatBubble, type ChatBubbleProps, type Chunk, type ChunkActivation, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, ConversationList, type ConversationListProps, type CropArea, type CropOutput, type CropResult, DEFAULT_ASPECT_OPTIONS, DEFAULT_NOTIFY_TONE, DateSeparator, type DateSeparatorProps, DirectMessages, type DirectMessagesProps, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmNotification, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCard, DocumentCardMenu, type DocumentCardMenuProps, type DocumentCardProps, DocumentEntity, type DocumentEntityProps, DocumentGallery, type DocumentGalleryProps, type DocumentLike, DocumentReview, type DocumentReviewProps, DocumentTable, type DocumentTableProps, DraftTitleControls, type DraftTitleControlsProps, ENTITY_MAPPINGS, EmlIcon, EntityIcon, type EntityIconComponent, EntityPill, type EntityRegistryOverride, type EntityType, FILE_TYPE_COLORS, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, InlineMicButton, type InlineMicButtonProps, LinkedInIcon, type MessageArtifact, MessageArtifactCard, MessageBubble, type MessageBubbleProps, MessageThread, type MessageThreadProps, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, NEUTRAL_GRAY, NotificationBell, type NotificationBellProps, type NotificationTypeMeta, type NotifyOptions, type NotifyVariant, OpenAIIcon, PLACEHOLDER_COLOR, type PaletteNavItem, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, PassageCard, type PassageCardProps, PdfIcon, type PresenceDisplayStatus, PresenceLabel, ProjectEntity, type ProjectEntityProps, type ProjectRelation, type ProjectsUsageAggregate, ProviderIcon, RUN_WINDOW_MS, type Rag, RagDot, RelevanceDot, type RenderMarkdown, type SearchChunk, SemanticSearch, type SemanticSearchProps, type StatusBadgeComponent, type StatusBadgeProps, StatusPill, type StatusPillProps, type StatusVariant, TAG_TYPE_ICONS, TAG_TYPE_LABELS, TagEntity, type TagEntityProps, type TagLike, type ThreadAccessors, type ThreadItem, Toaster, type ToolResponses, TxtIcon, TypingIndicator, type UseAudioRecorderResult, type UseDirectMessagesResult, UserEntity, type UserEntityProps, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuStatus, VISIBILITY_ICONS, VidIcon, VisibilityIcon, VoiceNoteRecorder, type VoiceNoteRecorderProps, XlsIcon, annotateThread, arbiQueryKeys, configureEntityRegistry, configureRagLabels, configureStatusRegistry, cropImage, dayKey, describeActivity, formatElapsed, formatRelativeTime, getDocIcon, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getNotificationTypeMeta, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceActionText, getWorkspaceColor, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, notify, parseActivityContent, redlineStats, seedNotifications, selectUnread, textToArtifact, toRedlineMarkdown, useActivity, useAgents, useAiTask, useArbi, useArbiConnected, useArbiDocumentSync, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useAssistantQuery, useAudioRecorder, useCommandPalette, useConfigs, useConversations, useDeleteAgents, useDirectMessages, useDocuments, useFacts, useHealth, useNotify, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSemanticSearch, useSessions, useTags, useTasks, useThumbnails, useUserUsageToday, useWorkspaceDocs, useWorkspaces, userDisplayName, userInitials };
3333
+ export { type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, AgentBadge, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, type AppNotification, AppleIcon, ArbiBotHeadIcon, ArbiBotIcon, ArbiChat, type ArbiChatLabels, ArbiChatPanel, type ArbiChatPanelProps, type ArbiChatProps, type ArbiChatTheme, ArbiIcon, ArbiProvider, type ArbiProviderProps, type ArbiUiState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AspectOption, AudIcon, type AudioRecorderState, BASE_COLORS, ChatBubble, type ChatBubbleProps, type Chunk, type ChunkActivation, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, ConversationList, type ConversationListProps, type CropArea, type CropOutput, type CropResult, DEFAULT_ASPECT_OPTIONS, DEFAULT_NOTIFY_TONE, DateSeparator, type DateSeparatorProps, DirectMessages, type DirectMessagesProps, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmNotification, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCard, DocumentCardMenu, type DocumentCardMenuProps, type DocumentCardProps, DocumentEntity, type DocumentEntityProps, DocumentGallery, type DocumentGalleryProps, type DocumentLike, DocumentReview, type DocumentReviewProps, DocumentTable, type DocumentTableProps, DraftTitleControls, type DraftTitleControlsProps, ENTITY_MAPPINGS, EmlIcon, EntityIcon, type EntityIconComponent, EntityPill, type EntityRegistryOverride, type EntityType, FILE_TYPE_COLORS, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, InlineMicButton, type InlineMicButtonProps, LinkedInIcon, type MessageArtifact, MessageArtifactCard, MessageBubble, type MessageBubbleProps, MessageThread, type MessageThreadProps, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, NEUTRAL_GRAY, NotificationBell, type NotificationBellProps, type NotificationTypeMeta, type NotifyOptions, type NotifyVariant, OpenAIIcon, PLACEHOLDER_COLOR, type PaletteNavItem, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, PassageCard, type PassageCardProps, PdfIcon, PhotoCapture, type PhotoCaptureProps, type PresenceDisplayStatus, PresenceLabel, ProjectEntity, type ProjectEntityProps, type ProjectRelation, type ProjectsUsageAggregate, ProviderIcon, RUN_WINDOW_MS, type Rag, RagDot, RelevanceDot, type RenderMarkdown, type SearchChunk, SemanticSearch, type SemanticSearchProps, type StatusBadgeComponent, type StatusBadgeProps, StatusPill, type StatusPillProps, type StatusVariant, TAG_TYPE_ICONS, TAG_TYPE_LABELS, TagEntity, type TagEntityProps, type TagLike, type ThreadAccessors, type ThreadItem, Toaster, type ToolResponses, TxtIcon, TypingIndicator, type UseAudioRecorderResult, type UseCameraStreamResult, type UseDirectMessagesResult, type UseVideoRecorderResult, UserEntity, type UserEntityProps, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuStatus, VISIBILITY_ICONS, VidIcon, VideoCapture, type VideoCaptureProps, type VideoRecorderState, VisibilityIcon, VoiceNoteRecorder, type VoiceNoteRecorderProps, XlsIcon, annotateThread, arbiQueryKeys, captureFrameAsBlob, configureEntityRegistry, configureRagLabels, configureStatusRegistry, cropImage, dayKey, describeActivity, formatElapsed, formatRelativeTime, getDocIcon, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getNotificationTypeMeta, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceActionText, getWorkspaceColor, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, notify, parseActivityContent, redlineStats, seedNotifications, selectUnread, textToArtifact, toRedlineMarkdown, useActivity, useAgents, useAiTask, useArbi, useArbiConnected, useArbiDocumentSync, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useAssistantQuery, useAudioRecorder, useCameraStream, useCommandPalette, useConfigs, useConversations, useDeleteAgents, useDirectMessages, useDocuments, useFacts, useHealth, useNotify, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSemanticSearch, useSessions, useTags, useTasks, useThumbnails, useUserUsageToday, useVideoRecorder, useWorkspaceDocs, useWorkspaces, userDisplayName, userInitials };
package/dist/index.d.ts CHANGED
@@ -3164,6 +3164,140 @@ declare function InlineMicButton({ focused, onTranscript, onError, transcribe, c
3164
3164
  /** Formats a duration in milliseconds as "mm:ss", clamped to non-negative. */
3165
3165
  declare function formatElapsed(ms: number): string;
3166
3166
 
3167
+ /**
3168
+ * useCameraStream
3169
+ *
3170
+ * Shared camera-acquisition engine for photo and video capture — requests
3171
+ * `getUserMedia`, hands back the live `MediaStream` for a host to bind to a
3172
+ * `<video>` element, and tears the tracks down on stop()/unmount. Mirrors
3173
+ * `useAudioRecorder`'s permission/error handling (same DOMException
3174
+ * classification, via `classifyMediaError`) but stays a separate hook rather
3175
+ * than folding into it: audio's state machine centers on an AnalyserNode
3176
+ * level meter with no visual preview, while camera capture centers on a live
3177
+ * video preview with no metering — sharing "here is a device stream and an
3178
+ * error string" is the useful overlap, not the recording state machine
3179
+ * itself. `useVideoRecorder` layers MediaRecorder on top of the stream this
3180
+ * returns; photo capture reads a frame off it directly (see capture-frame.ts).
3181
+ *
3182
+ * REUSE-FIRST: no app coupling, failures surface via `error` rather than a
3183
+ * toast call — same contract as useAudioRecorder.
3184
+ */
3185
+ interface UseCameraStreamResult {
3186
+ /** The live camera stream, or null before start()/after stop(). */
3187
+ stream: MediaStream | null;
3188
+ /** True while the getUserMedia() prompt/negotiation is in flight. */
3189
+ isStarting: boolean;
3190
+ /** A human-readable message from the last failed start() attempt. */
3191
+ error: string | null;
3192
+ start: () => Promise<void>;
3193
+ /** Stops all tracks and clears the stream. Safe to call repeatedly. */
3194
+ stop: () => void;
3195
+ }
3196
+ /**
3197
+ * @param constraints The `video`/`audio` constraints passed to getUserMedia.
3198
+ * Defaults to video-only (photo capture never needs a mic); video capture
3199
+ * passes `{ video: true, audio: true }` to record sound with the picture.
3200
+ */
3201
+ declare function useCameraStream(constraints?: MediaStreamConstraints): UseCameraStreamResult;
3202
+
3203
+ /**
3204
+ * useVideoRecorder
3205
+ *
3206
+ * MediaRecorder lifecycle for video capture, layered on top of an
3207
+ * already-live camera `MediaStream` (see useCameraStream — this hook does
3208
+ * NOT call getUserMedia itself, so the same stream stays open across a
3209
+ * stop()/reset() "record again" without re-prompting for permission).
3210
+ *
3211
+ * Deliberately simpler than useAudioRecorder: no pause/resume (tap-to-start,
3212
+ * tap-to-stop is the whole interaction — see MediaCaptureRecorder) and no
3213
+ * level meter (there's a live video preview instead; a bar-graph loudness
3214
+ * meter would be redundant chrome on top of it).
3215
+ */
3216
+ type VideoRecorderState = 'idle' | 'recording' | 'stopped';
3217
+ interface UseVideoRecorderResult {
3218
+ state: VideoRecorderState;
3219
+ /** Recorded duration so far (ms). Frozen at its final value once stopped. */
3220
+ elapsedMs: number;
3221
+ /** The finished recording. Only set once state === 'stopped'. */
3222
+ blob: Blob | null;
3223
+ /** The MediaRecorder MIME type used (e.g. 'video/webm'). */
3224
+ mimeType: string | null;
3225
+ start: () => void;
3226
+ stop: () => void;
3227
+ /** Back to idle: clears blob/elapsedMs, ready to record again on the same stream. */
3228
+ reset: () => void;
3229
+ }
3230
+ /** @param stream The live camera stream to record — null while the camera
3231
+ * hasn't started yet; start() is a no-op until it's set. */
3232
+ declare function useVideoRecorder(stream: MediaStream | null): UseVideoRecorderResult;
3233
+
3234
+ /**
3235
+ * Captures the current frame of a live `<video>` element (bound to a camera
3236
+ * `MediaStream`, e.g. via useCameraStream) as an image Blob — the shutter
3237
+ * action for photo capture. Draws to an off-screen canvas rather than reading
3238
+ * pixels any other way, since `HTMLCanvasElement.toBlob` is the one
3239
+ * cross-browser path from "a decoded video frame" to "an encoded image file".
3240
+ */
3241
+ declare function captureFrameAsBlob(video: HTMLVideoElement, mimeType?: string): Promise<Blob>;
3242
+
3243
+ /**
3244
+ * PhotoCapture
3245
+ *
3246
+ * Camera capture UI: live preview → shutter → review (retake or save).
3247
+ * Shares its shape (onSave/onDiscard/onError/isSaving) with VoiceNoteRecorder
3248
+ * so a host app wires them identically — see MediaCaptureRecorder.tsx (the
3249
+ * ARBI-frontend wrapper) for how the three capture modes plug into the same
3250
+ * draft/save contract.
3251
+ *
3252
+ * REUSE-FIRST: no app coupling. This component owns only the capture UI and
3253
+ * in-memory blob, never persistence — nothing is uploaded until the host's
3254
+ * `onSave` is called.
3255
+ */
3256
+ interface PhotoCaptureProps {
3257
+ /** Called with the captured photo when the user hits Save. Resolve to let
3258
+ * the host close/replace this capture UI; shows a saving spinner while
3259
+ * the promise is pending. */
3260
+ onSave: (blob: Blob, mimeType: string | null) => Promise<void> | void;
3261
+ /** Called when the user discards the draft. */
3262
+ onDiscard: () => void;
3263
+ /** Surfaces camera failures (e.g. denied permission) — wire this to the
3264
+ * host's own notification system. Without it, failures are silent. */
3265
+ onError?: (message: string) => void;
3266
+ isSaving?: boolean;
3267
+ }
3268
+ declare function PhotoCapture({ onSave, onDiscard, onError, isSaving }: PhotoCaptureProps): React$1.JSX.Element;
3269
+
3270
+ /**
3271
+ * VideoCapture
3272
+ *
3273
+ * Camera capture UI: live preview → tap to record / tap to stop → review
3274
+ * (playback, retake, or save). Shares its shape (onSave/onDiscard/onError/
3275
+ * isSaving) with VoiceNoteRecorder and PhotoCapture — see
3276
+ * MediaCaptureRecorder.tsx (the ARBI-frontend wrapper) for how the three
3277
+ * capture modes plug into the same draft/save contract.
3278
+ *
3279
+ * Deliberately a simple tap-to-start/tap-to-stop toggle rather than a
3280
+ * press-and-hold gesture — matches VoiceNoteRecorder's toggle interaction
3281
+ * and needs no extra gesture handling for a first cut of camera video.
3282
+ *
3283
+ * REUSE-FIRST: no app coupling. This component owns only the capture UI and
3284
+ * in-memory blob, never persistence — nothing is uploaded until the host's
3285
+ * `onSave` is called.
3286
+ */
3287
+ interface VideoCaptureProps {
3288
+ /** Called with the recorded clip when the user hits Save. Resolve to let
3289
+ * the host close/replace this capture UI; shows a saving spinner while
3290
+ * the promise is pending. */
3291
+ onSave: (blob: Blob, mimeType: string | null) => Promise<void> | void;
3292
+ /** Called when the user discards the draft. */
3293
+ onDiscard: () => void;
3294
+ /** Surfaces camera failures (e.g. denied permission) — wire this to the
3295
+ * host's own notification system. Without it, failures are silent. */
3296
+ onError?: (message: string) => void;
3297
+ isSaving?: boolean;
3298
+ }
3299
+ declare function VideoCapture({ onSave, onDiscard, onError, isSaving }: VideoCaptureProps): React$1.JSX.Element;
3300
+
3167
3301
  /**
3168
3302
  * Content-based audio-vs-video detection for containers that don't tell you
3169
3303
  * from the extension alone. WebM in particular can hold audio-only, video-only,
@@ -3196,4 +3330,4 @@ interface ArbiUiState {
3196
3330
  }
3197
3331
  declare const useArbiUiStore: zustand.UseBoundStore<zustand.StoreApi<ArbiUiState>>;
3198
3332
 
3199
- export { type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, AgentBadge, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, type AppNotification, AppleIcon, ArbiBotHeadIcon, ArbiBotIcon, ArbiChat, type ArbiChatLabels, ArbiChatPanel, type ArbiChatPanelProps, type ArbiChatProps, type ArbiChatTheme, ArbiIcon, ArbiProvider, type ArbiProviderProps, type ArbiUiState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AspectOption, AudIcon, type AudioRecorderState, BASE_COLORS, ChatBubble, type ChatBubbleProps, type Chunk, type ChunkActivation, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, ConversationList, type ConversationListProps, type CropArea, type CropOutput, type CropResult, DEFAULT_ASPECT_OPTIONS, DEFAULT_NOTIFY_TONE, DateSeparator, type DateSeparatorProps, DirectMessages, type DirectMessagesProps, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmNotification, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCard, DocumentCardMenu, type DocumentCardMenuProps, type DocumentCardProps, DocumentEntity, type DocumentEntityProps, DocumentGallery, type DocumentGalleryProps, type DocumentLike, DocumentReview, type DocumentReviewProps, DocumentTable, type DocumentTableProps, DraftTitleControls, type DraftTitleControlsProps, ENTITY_MAPPINGS, EmlIcon, EntityIcon, type EntityIconComponent, EntityPill, type EntityRegistryOverride, type EntityType, FILE_TYPE_COLORS, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, InlineMicButton, type InlineMicButtonProps, LinkedInIcon, type MessageArtifact, MessageArtifactCard, MessageBubble, type MessageBubbleProps, MessageThread, type MessageThreadProps, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, NEUTRAL_GRAY, NotificationBell, type NotificationBellProps, type NotificationTypeMeta, type NotifyOptions, type NotifyVariant, OpenAIIcon, PLACEHOLDER_COLOR, type PaletteNavItem, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, PassageCard, type PassageCardProps, PdfIcon, type PresenceDisplayStatus, PresenceLabel, ProjectEntity, type ProjectEntityProps, type ProjectRelation, type ProjectsUsageAggregate, ProviderIcon, RUN_WINDOW_MS, type Rag, RagDot, RelevanceDot, type RenderMarkdown, type SearchChunk, SemanticSearch, type SemanticSearchProps, type StatusBadgeComponent, type StatusBadgeProps, StatusPill, type StatusPillProps, type StatusVariant, TAG_TYPE_ICONS, TAG_TYPE_LABELS, TagEntity, type TagEntityProps, type TagLike, type ThreadAccessors, type ThreadItem, Toaster, type ToolResponses, TxtIcon, TypingIndicator, type UseAudioRecorderResult, type UseDirectMessagesResult, UserEntity, type UserEntityProps, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuStatus, VISIBILITY_ICONS, VidIcon, VisibilityIcon, VoiceNoteRecorder, type VoiceNoteRecorderProps, XlsIcon, annotateThread, arbiQueryKeys, configureEntityRegistry, configureRagLabels, configureStatusRegistry, cropImage, dayKey, describeActivity, formatElapsed, formatRelativeTime, getDocIcon, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getNotificationTypeMeta, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceActionText, getWorkspaceColor, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, notify, parseActivityContent, redlineStats, seedNotifications, selectUnread, textToArtifact, toRedlineMarkdown, useActivity, useAgents, useAiTask, useArbi, useArbiConnected, useArbiDocumentSync, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useAssistantQuery, useAudioRecorder, useCommandPalette, useConfigs, useConversations, useDeleteAgents, useDirectMessages, useDocuments, useFacts, useHealth, useNotify, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSemanticSearch, useSessions, useTags, useTasks, useThumbnails, useUserUsageToday, useWorkspaceDocs, useWorkspaces, userDisplayName, userInitials };
3333
+ export { type ActivityContent, type ActivityDescription, ActivityFeed, type ActivityFeedProps, AgentBadge, type AggregatedDailyUsage, type AggregatedModelGroupUsage, AiActionCard, AiAnswer, type AiRunOptions, type AiTaskStatus, type AppNotification, AppleIcon, ArbiBotHeadIcon, ArbiBotIcon, ArbiChat, type ArbiChatLabels, ArbiChatPanel, type ArbiChatPanelProps, type ArbiChatProps, type ArbiChatTheme, ArbiIcon, ArbiProvider, type ArbiProviderProps, type ArbiUiState, ArbiWebSocketProvider, type ArbiWebSocketProviderProps, type ArbiWsState, type ArbiWsStatus, ArtifactCanvas, type AspectOption, AudIcon, type AudioRecorderState, BASE_COLORS, ChatBubble, type ChatBubbleProps, type Chunk, type ChunkActivation, CitationRenderer, type CitationRendererProps, type CitationState, ClaudeIcon, CommandPalette, type CommandPaletteClassNames, type CommandPaletteProps, CommandPaletteProvider, type CommandPaletteProviderProps, type CommandPaletteValue, ConversationList, type ConversationListProps, type CropArea, type CropOutput, type CropResult, DEFAULT_ASPECT_OPTIONS, DEFAULT_NOTIFY_TONE, DateSeparator, type DateSeparatorProps, DirectMessages, type DirectMessagesProps, DmAvatar, type DmAvatarProps, type DmClassNames, DmComposer, type DmComposerProps, type DmConversation, type DmMessage, type DmNotification, type DmUser, DocIcon, DocQaPanel, DocSearch, DocumentCard, DocumentCardMenu, type DocumentCardMenuProps, type DocumentCardProps, DocumentEntity, type DocumentEntityProps, DocumentGallery, type DocumentGalleryProps, type DocumentLike, DocumentReview, type DocumentReviewProps, DocumentTable, type DocumentTableProps, DraftTitleControls, type DraftTitleControlsProps, ENTITY_MAPPINGS, EmlIcon, EntityIcon, type EntityIconComponent, EntityPill, type EntityRegistryOverride, type EntityType, FILE_TYPE_COLORS, FileIcon, FireworksIcon, GeminiIcon, GitHubIcon, GoogleIcon, HtmlIcon, ImageCropModal, type ImageCropModalProps, ImageCropper, type ImageCropperProps, ImgIcon, InlineMicButton, type InlineMicButtonProps, LinkedInIcon, type MessageArtifact, MessageArtifactCard, MessageBubble, type MessageBubbleProps, MessageThread, type MessageThreadProps, MicRecordingOverlay, type MicRecordingOverlayProps, MicWaveformIndicator, type MicWaveformIndicatorProps, NEUTRAL_GRAY, NotificationBell, type NotificationBellProps, type NotificationTypeMeta, type NotifyOptions, type NotifyVariant, OpenAIIcon, PLACEHOLDER_COLOR, type PaletteNavItem, type ParsedChunk, type ParsedChunkMetadata, type ParsedDocument, type ParsedDocumentMetadata, PassageCard, type PassageCardProps, PdfIcon, PhotoCapture, type PhotoCaptureProps, type PresenceDisplayStatus, PresenceLabel, ProjectEntity, type ProjectEntityProps, type ProjectRelation, type ProjectsUsageAggregate, ProviderIcon, RUN_WINDOW_MS, type Rag, RagDot, RelevanceDot, type RenderMarkdown, type SearchChunk, SemanticSearch, type SemanticSearchProps, type StatusBadgeComponent, type StatusBadgeProps, StatusPill, type StatusPillProps, type StatusVariant, TAG_TYPE_ICONS, TAG_TYPE_LABELS, TagEntity, type TagEntityProps, type TagLike, type ThreadAccessors, type ThreadItem, Toaster, type ToolResponses, TxtIcon, TypingIndicator, type UseAudioRecorderResult, type UseCameraStreamResult, type UseDirectMessagesResult, type UseVideoRecorderResult, UserEntity, type UserEntityProps, UserMenu, type UserMenuItem, type UserMenuProps, type UserMenuStatus, VISIBILITY_ICONS, VidIcon, VideoCapture, type VideoCaptureProps, type VideoRecorderState, VisibilityIcon, VoiceNoteRecorder, type VoiceNoteRecorderProps, XlsIcon, annotateThread, arbiQueryKeys, captureFrameAsBlob, configureEntityRegistry, configureRagLabels, configureStatusRegistry, cropImage, dayKey, describeActivity, formatElapsed, formatRelativeTime, getDocIcon, getEntityColor, getEntityColorStyles, getEntityIcon, getEntityLabel, getNotificationTypeMeta, getStatusVariant, getTagTypeIcon, getTagTypeLabel, getWorkspaceActionText, getWorkspaceColor, getWorkspaceSentPhrase, hasVideoTrack, isWorkspaceNotificationType, notify, parseActivityContent, redlineStats, seedNotifications, selectUnread, textToArtifact, toRedlineMarkdown, useActivity, useAgents, useAiTask, useArbi, useArbiConnected, useArbiDocumentSync, useArbiUiStore, useArbiWebSocket, useArbiWsContext, useArbiWsMessage, useArbiWsStatus, useArbiWsStore, useArbiWsTask, useArbiWsTasks, useAssistantQuery, useAudioRecorder, useCameraStream, useCommandPalette, useConfigs, useConversations, useDeleteAgents, useDirectMessages, useDocuments, useFacts, useHealth, useNotify, useParsedDocument, useProjectInvoices, useProjectUsage, useProjects, useProjectsUsage, useSemanticSearch, useSessions, useTags, useTasks, useThumbnails, useUserUsageToday, useVideoRecorder, useWorkspaceDocs, useWorkspaces, userDisplayName, userInitials };