@arbidocs/react 0.3.103 → 0.3.105

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.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ArbiProvider.tsx","../src/chat/styles.ts","../src/useArbi.ts","../src/chat/AuthScreen.tsx","../src/hooks.ts","../src/chat/WorkspaceScreen.tsx","../src/chat/MessageBubble.tsx","../src/chat/ChatView.tsx","../src/chat/ChatWidget.tsx","../src/chat/ArbiChat.tsx","../src/lib/utils.ts","../src/ui/tooltip.tsx","../src/ui/avatar.tsx","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/hover-card.tsx","../src/icons/colors.ts","../src/icons/PdfIcon.tsx","../src/icons/AudIcon.tsx","../src/icons/ImgIcon.tsx","../src/icons/VidIcon.tsx","../src/icons/EmlIcon.tsx","../src/icons/FileIcon.tsx","../src/entities/EntityPill.tsx","../src/entities/DocumentEntity.tsx","../src/entities/TagEntity.tsx","../src/entities/ProjectEntity.tsx","../src/store.ts","../src/documents/DocumentTable.tsx"],"names":["jsx","useState","jsxs","useCallback","useEffect","useMemo","Fragment","React2","cva","React3","React4","forwardRef","EntityPill","document","React"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ArbiProvider — React context that holds an Arbi instance.\n *\n * Usage:\n * <ArbiProvider url=\"https://arbi.mycompany.com\">\n * <App />\n * </ArbiProvider>\n */\n\nimport { createContext, useMemo, type ReactNode } from 'react'\nimport { Arbi, type ArbiOptions } from '@arbidocs/sdk/browser'\n\nexport const ArbiContext = createContext<Arbi | null>(null)\n\nexport interface ArbiProviderProps extends ArbiOptions {\n children: ReactNode\n}\n\nexport function ArbiProvider({ children, ...options }: ArbiProviderProps) {\n const arbi = useMemo(\n () => new Arbi(options),\n // Stable on url + deploymentDomain — re-creating the instance on every render would be wrong\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options.url, options.deploymentDomain, options.credentials]\n )\n\n return <ArbiContext.Provider value={arbi}>{children}</ArbiContext.Provider>\n}\n","import type { CSSProperties } from 'react'\nimport type { ArbiChatLabels, ArbiChatTheme, ResolvedLabels, ResolvedTheme } from './types'\n\n/**\n * Default theme matching the ARBI frontend color palette.\n *\n * - Primary action color: ARBI cyan (#00adef)\n * - Message bubbles: light gray (user) / light cyan (assistant)\n * - Text/border: standard ARBI grays\n * - Border radius: 8px (ARBI default)\n */\nconst DEFAULT_THEME: ArbiChatTheme = {\n primaryColor: '#00adef',\n backgroundColor: '#ffffff',\n surfaceColor: '#f9fafb',\n textColor: '#111827',\n mutedColor: '#6b7280',\n borderColor: '#e5e7eb',\n userBubbleColor: '#f3f4f6',\n userBubbleTextColor: '#111827',\n assistantBubbleColor: 'rgba(0, 173, 239, 0.08)',\n assistantBubbleTextColor: '#111827',\n borderRadius: '8px',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n}\n\nconst DEFAULT_LABELS: ResolvedLabels = {\n title: 'Chat',\n email: 'Email',\n password: 'Password',\n loginButton: 'Log in',\n loginButtonLoading: 'Logging in...',\n registerButton: 'Create account',\n sendCodeButton: 'Email me a code',\n haveCodeButton: 'I have an invitation code',\n verificationCode: 'Verification code',\n confirmPassword: 'Confirm password',\n firstName: 'First name',\n lastName: 'Last name',\n switchToRegister: 'Create account',\n switchToLogin: 'Back to login',\n selectWorkspace: 'Select a workspace',\n workspacePlaceholder: 'Choose...',\n continueButton: 'Continue',\n createWorkspace: 'Create new workspace',\n workspaceName: 'Workspace name',\n createButton: 'Create',\n changeWorkspace: 'Change workspace',\n documents: 'Documents',\n sendButton: 'Send',\n placeholder: 'Ask a question...',\n uploadButton: 'Upload',\n uploading: 'Uploading...',\n emptyNoDocs: 'No documents found in this workspace.',\n emptyNoSelection: 'Select at least one document to start chatting.',\n emptyReady: 'Ask a question about your documents.',\n}\n\nexport function getTheme(partial?: Partial<ArbiChatTheme>): ResolvedTheme {\n return { ...DEFAULT_THEME, ...partial }\n}\n\nexport function getLabels(partial?: ArbiChatLabels): ResolvedLabels {\n return { ...DEFAULT_LABELS, ...partial }\n}\n\n// ── Container ────────────────────────────────────────────────────────────────\n\nexport function containerStyle(\n theme: ResolvedTheme,\n width: string | number,\n height: string | number\n): CSSProperties {\n return {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n display: 'flex',\n flexDirection: 'column',\n fontFamily: theme.fontFamily,\n fontSize: '14px',\n lineHeight: '1.5',\n color: theme.textColor,\n backgroundColor: theme.backgroundColor,\n border: `1px solid ${theme.borderColor}`,\n borderRadius: theme.borderRadius,\n overflow: 'hidden',\n boxSizing: 'border-box',\n }\n}\n\nexport function headerStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n fontWeight: 600,\n fontSize: '15px',\n borderBottom: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n }\n}\n\nexport function bodyStyle(): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n}\n\n// ── Forms ────────────────────────────────────────────────────────────────────\n\nexport function formContainerStyle(): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n padding: '24px 16px',\n gap: '12px',\n }\n}\n\nexport function labelStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '13px',\n fontWeight: 500,\n color: theme.textColor,\n marginBottom: '4px',\n }\n}\n\nexport function inputStyle(theme: ResolvedTheme): CSSProperties {\n return {\n width: '100%',\n padding: '8px 12px',\n fontSize: '14px',\n fontFamily: theme.fontFamily,\n color: theme.textColor,\n backgroundColor: theme.backgroundColor,\n border: `1px solid ${theme.borderColor}`,\n borderRadius: '8px',\n outline: 'none',\n boxSizing: 'border-box',\n }\n}\n\nexport function selectStyle(theme: ResolvedTheme): CSSProperties {\n return {\n ...inputStyle(theme),\n cursor: 'pointer',\n appearance: 'auto' as CSSProperties['appearance'],\n }\n}\n\nexport function buttonStyle(theme: ResolvedTheme, disabled?: boolean): CSSProperties {\n return {\n padding: '8px 16px',\n fontSize: '14px',\n fontWeight: 500,\n fontFamily: theme.fontFamily,\n color: '#ffffff',\n backgroundColor: disabled ? theme.mutedColor : theme.primaryColor,\n border: 'none',\n borderRadius: '8px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'opacity 150ms',\n }\n}\n\nexport function errorStyle(): CSSProperties {\n return {\n fontSize: '13px',\n color: '#ef4444',\n margin: '4px 0 0',\n }\n}\n\n// ── Chat view ────────────────────────────────────────────────────────────────\n\nexport function messagesContainerStyle(): CSSProperties {\n return {\n flex: 1,\n overflowY: 'auto',\n padding: '12px 16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }\n}\n\nexport function messageBubbleStyle(\n theme: ResolvedTheme,\n role: 'user' | 'assistant'\n): CSSProperties {\n const isUser = role === 'user'\n return {\n maxWidth: '85%',\n padding: '8px 12px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: '1.5',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap',\n alignSelf: isUser ? 'flex-end' : 'flex-start',\n backgroundColor: isUser ? theme.userBubbleColor : theme.assistantBubbleColor,\n color: isUser ? theme.userBubbleTextColor : theme.assistantBubbleTextColor,\n }\n}\n\nexport function inputBarStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n gap: '8px',\n padding: '12px 16px',\n borderTop: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n }\n}\n\nexport function chatInputStyle(theme: ResolvedTheme): CSSProperties {\n return {\n ...inputStyle(theme),\n flex: 1,\n }\n}\n\nexport function sendButtonStyle(theme: ResolvedTheme, disabled?: boolean): CSSProperties {\n return {\n ...buttonStyle(theme, disabled),\n padding: '8px 14px',\n flexShrink: 0,\n }\n}\n\n// ── Document selector ────────────────────────────────────────────────────────\n\nexport function docSelectorStyle(theme: ResolvedTheme): CSSProperties {\n return {\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n }\n}\n\nexport function docToggleStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n fontWeight: 500,\n color: theme.mutedColor,\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n fontFamily: theme.fontFamily,\n }\n}\n\nexport function docListStyle(): CSSProperties {\n return {\n marginTop: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n maxHeight: '120px',\n overflowY: 'auto',\n }\n}\n\nexport function docItemStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: theme.textColor,\n cursor: 'pointer',\n textAlign: 'left',\n }\n}\n\nexport function emptyStateStyle(theme: ResolvedTheme): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.mutedColor,\n fontSize: '13px',\n padding: '24px',\n textAlign: 'center',\n }\n}\n\nexport function loadingContainerStyle(): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n fontSize: '13px',\n }\n}\n\nexport function brandingStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n padding: '6px 16px',\n fontSize: '11px',\n color: theme.mutedColor,\n borderTop: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n userSelect: 'none',\n }\n}\n\nexport function brandingLinkStyle(theme: ResolvedTheme): CSSProperties {\n return {\n color: theme.mutedColor,\n fontWeight: 600,\n textDecoration: 'none',\n }\n}\n\n// ── Auth / Workspace creation ─────────────────────────────────────────────────\n\nexport function linkButtonStyle(theme: ResolvedTheme): CSSProperties {\n return {\n background: 'none',\n border: 'none',\n padding: 0,\n fontSize: '13px',\n color: theme.primaryColor,\n cursor: 'pointer',\n fontFamily: theme.fontFamily,\n textDecoration: 'underline',\n }\n}\n\nexport function secondaryButtonStyle(theme: ResolvedTheme, disabled?: boolean): CSSProperties {\n return {\n padding: '4px 10px',\n fontSize: '12px',\n fontWeight: 500,\n fontFamily: theme.fontFamily,\n color: disabled ? theme.mutedColor : theme.primaryColor,\n backgroundColor: 'transparent',\n border: `1px solid ${disabled ? theme.borderColor : theme.primaryColor}`,\n borderRadius: '6px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'opacity 150ms',\n whiteSpace: 'nowrap',\n }\n}\n\nexport function fileInputStyle(): CSSProperties {\n return { display: 'none' }\n}\n\nexport function agentStatusStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '12px',\n color: theme.mutedColor,\n fontStyle: 'italic',\n padding: '4px 0',\n alignSelf: 'flex-start',\n }\n}\n","/**\n * Hook to access the Arbi instance from the nearest ArbiProvider.\n */\n\nimport { useContext } from 'react'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { ArbiContext } from './ArbiProvider'\n\nexport function useArbi(): Arbi {\n const arbi = useContext(ArbiContext)\n if (!arbi) {\n throw new Error('useArbi() must be used within an <ArbiProvider>')\n }\n return arbi\n}\n","import { useState, type FormEvent } from 'react'\nimport { useArbi } from '../useArbi'\nimport type { ResolvedLabels, ResolvedTheme } from './types'\nimport {\n formContainerStyle,\n labelStyle,\n inputStyle,\n buttonStyle,\n errorStyle,\n linkButtonStyle,\n} from './styles'\n\ninterface AuthScreenProps {\n theme: ResolvedTheme\n labels: ResolvedLabels\n onLogin: () => void\n}\n\ntype AuthMode = 'login' | 'register'\ntype RegisterStep = 'email' | 'verify'\n\nexport function AuthScreen({ theme, labels, onLogin }: AuthScreenProps) {\n const arbi = useArbi()\n const [mode, setMode] = useState<AuthMode>('login')\n const [step, setStep] = useState<RegisterStep>('email')\n\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [confirmPw, setConfirmPw] = useState('')\n const [code, setCode] = useState('')\n const [firstName, setFirstName] = useState('')\n const [lastName, setLastName] = useState('')\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n\n const resetForm = () => {\n setPassword('')\n setConfirmPw('')\n setCode('')\n setFirstName('')\n setLastName('')\n setError('')\n setStep('email')\n }\n\n const switchMode = (next: AuthMode) => {\n resetForm()\n setMode(next)\n }\n\n // ── Login ─────────────────────────────────────────────────────────────────\n\n const handleLogin = async (e: FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError('')\n try {\n await arbi.login(email, password)\n onLogin()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Login failed')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Register: skip straight to verify (user already has a code) ────────────\n\n const handleHaveCode = () => {\n setError('')\n setStep('verify')\n }\n\n // ── Register: send code via email then go to verify ───────────────────────\n\n const handleEmailCode = async () => {\n if (!email) return\n setLoading(true)\n setError('')\n try {\n await arbi.requestVerification(email)\n setStep('verify')\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to send verification code')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Register step 2: create account ───────────────────────────────────────\n\n const handleRegister = async (e: FormEvent) => {\n e.preventDefault()\n if (password !== confirmPw) {\n setError('Passwords do not match')\n return\n }\n setLoading(true)\n setError('')\n try {\n await arbi.register({ email, password, verificationCode: code, firstName, lastName })\n await arbi.login(email, password)\n onLogin()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Registration failed')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Login form ────────────────────────────────────────────────────────────\n\n if (mode === 'login') {\n return (\n <form onSubmit={handleLogin} style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.email}</div>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n autoComplete=\"email\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.password}</div>\n <input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"current-password\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <button type=\"submit\" disabled={loading} style={buttonStyle(theme, loading)}>\n {loading ? labels.loginButtonLoading : labels.loginButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => switchMode('register')}\n style={linkButtonStyle(theme)}\n >\n {labels.switchToRegister}\n </button>\n </div>\n </form>\n )\n }\n\n // ── Register step 1: email + choose code method ────────────────────────────\n\n if (step === 'email') {\n const noEmail = !email.trim()\n return (\n <div style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.email}</div>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n autoComplete=\"email\"\n style={inputStyle(theme)}\n />\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n type=\"button\"\n onClick={handleHaveCode}\n disabled={noEmail}\n style={{ ...buttonStyle(theme, noEmail), flex: 1 }}\n >\n {labels.haveCodeButton}\n </button>\n <button\n type=\"button\"\n onClick={handleEmailCode}\n disabled={noEmail || loading}\n style={{ ...buttonStyle(theme, noEmail || loading), flex: 1 }}\n >\n {loading ? '...' : labels.sendCodeButton}\n </button>\n </div>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button type=\"button\" onClick={() => switchMode('login')} style={linkButtonStyle(theme)}>\n {labels.switchToLogin}\n </button>\n </div>\n </div>\n )\n }\n\n // ── Register step 2: verify + create account ─────────────────────────────\n\n return (\n <form onSubmit={handleRegister} style={formContainerStyle()}>\n <div style={{ display: 'flex', gap: '8px' }}>\n <div style={{ flex: 1 }}>\n <div style={labelStyle(theme)}>{labels.firstName}</div>\n <input\n type=\"text\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n autoComplete=\"given-name\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div style={{ flex: 1 }}>\n <div style={labelStyle(theme)}>{labels.lastName}</div>\n <input\n type=\"text\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n autoComplete=\"family-name\"\n required\n style={inputStyle(theme)}\n />\n </div>\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.verificationCode}</div>\n <input\n type=\"text\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n autoComplete=\"one-time-code\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.password}</div>\n <input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"new-password\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.confirmPassword}</div>\n <input\n type=\"password\"\n value={confirmPw}\n onChange={(e) => setConfirmPw(e.target.value)}\n autoComplete=\"new-password\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <button type=\"submit\" disabled={loading} style={buttonStyle(theme, loading)}>\n {loading ? '...' : labels.registerButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button type=\"button\" onClick={() => switchMode('login')} style={linkButtonStyle(theme)}>\n {labels.switchToLogin}\n </button>\n </div>\n </form>\n )\n}\n","/**\n * React Query hooks that use the Arbi instance from context.\n */\n\nimport { useQuery, useMutation } from '@tanstack/react-query'\nimport type {\n SSEStreamResult,\n SSEStreamStartData,\n AgentStepEvent,\n ArtifactEvent,\n} from '@arbidocs/sdk/browser'\nimport { useArbi } from './useArbi'\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const arbiQueryKeys = {\n workspaces: () => ['arbi', 'workspaces'] as const,\n documents: (workspaceId: string) => ['arbi', 'documents', workspaceId] as const,\n conversations: (workspaceId: string) => ['arbi', 'conversations', workspaceId] as const,\n tags: (workspaceId: string) => ['arbi', 'tags', workspaceId] as const,\n agents: () => ['arbi', 'agents'] as const,\n sessions: () => ['arbi', 'sessions'] as const,\n health: () => ['arbi', 'health'] as const,\n tasks: () => ['arbi', 'tasks'] as const,\n memories: (workspaceId: string) => ['arbi', 'memories', workspaceId] as const,\n configs: () => ['arbi', 'configs'] as const,\n}\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/** List the logged-in user's workspaces. */\nexport function useWorkspaces(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.workspaces(),\n queryFn: () => arbi.workspaces.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n/** List documents in a workspace. */\nexport function useDocuments(workspaceId: string | undefined, options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.documents(workspaceId ?? ''),\n queryFn: () => arbi.documents.list(),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n/** List conversations in a workspace. */\nexport function useConversations(workspaceId: string | undefined, options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.conversations(workspaceId ?? ''),\n queryFn: () => arbi.conversations.list(),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n/** List tags in a workspace. */\nexport function useTags(workspaceId: string | undefined, options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.tags(workspaceId ?? ''),\n queryFn: () => arbi.tags.list(),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n/** Send a streaming query to the RAG assistant. Returns a mutation. */\nexport function useAssistantQuery() {\n const arbi = useArbi()\n\n return useMutation<\n SSEStreamResult,\n Error,\n {\n question: string\n docIds: string[]\n previousResponseId?: string | null\n model?: string\n onToken?: (content: string) => void\n onStreamStart?: (data: SSEStreamStartData) => void\n onAgentStep?: (data: AgentStepEvent) => void\n onArtifact?: (data: ArtifactEvent) => void\n onError?: (message: string) => void\n onComplete?: () => void\n }\n >({\n mutationFn: ({ question, ...options }) => arbi.assistant.query(question, options),\n })\n}\n\n/** List agents owned by the current user. */\nexport function useAgents(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.agents(),\n queryFn: () => arbi.agents.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n/** Delete agents. Returns a mutation. */\nexport function useDeleteAgents() {\n const arbi = useArbi()\n return useMutation<unknown, Error, { agentExtIds: string[] }>({\n mutationFn: ({ agentExtIds }) => arbi.agents.delete(agentExtIds),\n })\n}\n\n/** List active sessions. */\nexport function useSessions(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.sessions(),\n queryFn: () => arbi.sessions.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n/** Authorize a delegated session (generates claim code). Returns a mutation. */\n\n/** Check backend health. */\nexport function useHealth(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.health(),\n queryFn: () => arbi.health.check(),\n enabled: options?.enabled,\n })\n}\n\n// ── Scheduled tasks ──────────────────────────────────────────────────────────\n\n/** List the caller's scheduled agent tasks. */\nexport function useTasks(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.tasks(),\n queryFn: () => arbi.tasks.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n// ── Workspace memory ─────────────────────────────────────────────────────────\n\n/** List the open workspace's memory notes. */\nexport function useMemories(\n workspaceId: string | undefined,\n options?: { enabled?: boolean; pinnedOnly?: boolean }\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.memories(workspaceId ?? ''),\n queryFn: () => arbi.memory.list({ pinnedOnly: options?.pinnedOnly }),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n// ── Behaviour-template configs ───────────────────────────────────────────────\n\n/** List the caller's saved agent configurations (behaviour templates). */\nexport function useConfigs(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.configs(),\n queryFn: () => arbi.agentConfig.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n","import { useState } from 'react'\nimport { useArbi } from '../useArbi'\nimport { useWorkspaces } from '../hooks'\nimport type { ResolvedLabels, ResolvedTheme } from './types'\nimport {\n formContainerStyle,\n labelStyle,\n inputStyle,\n selectStyle,\n buttonStyle,\n errorStyle,\n loadingContainerStyle,\n linkButtonStyle,\n} from './styles'\n\ninterface WorkspaceScreenProps {\n theme: ResolvedTheme\n labels: ResolvedLabels\n onSelect: (workspaceId: string) => void\n}\n\ntype ScreenMode = 'select' | 'create'\n\nexport function WorkspaceScreen({ theme, labels, onSelect }: WorkspaceScreenProps) {\n const arbi = useArbi()\n const { data: workspaces, isLoading } = useWorkspaces()\n\n const [mode, setMode] = useState<ScreenMode>('select')\n const [selected, setSelected] = useState('')\n const [newName, setNewName] = useState('')\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n\n if (isLoading) {\n return <div style={loadingContainerStyle()}>Loading workspaces...</div>\n }\n\n // ── Select existing workspace ─────────────────────────────────────────────\n\n const handleConfirm = async () => {\n if (!selected) return\n setLoading(true)\n setError('')\n try {\n await arbi.selectWorkspace(selected)\n onSelect(selected)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to select workspace')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Create new workspace ──────────────────────────────────────────────────\n\n const handleCreate = async () => {\n const name = newName.trim()\n if (!name) return\n setLoading(true)\n setError('')\n try {\n // Workspaces now belong to a project — the SDK call requires a\n // ``projectExtId``. We don't surface project selection in this\n // minimal embedded picker, so default to the user's first project\n // (typically the auto-provisioned personal one). If there are\n // none, fail loudly rather than silently picking nothing — a\n // brand-new account without a project is a setup-flow bug, not\n // something this widget should paper over.\n const projects = await arbi.projects.list()\n const projectExtId = projects[0]?.external_id\n if (!projectExtId) {\n throw new Error('No project available; create one before adding a workspace')\n }\n const ws = await arbi.workspaces.create(name, projectExtId)\n await arbi.selectWorkspace(ws.external_id)\n onSelect(ws.external_id)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create workspace')\n } finally {\n setLoading(false)\n }\n }\n\n if (mode === 'create') {\n return (\n <div style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.workspaceName}</div>\n <input\n type=\"text\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n disabled={loading}\n style={inputStyle(theme)}\n />\n </div>\n <button\n type=\"button\"\n onClick={handleCreate}\n disabled={!newName.trim() || loading}\n style={buttonStyle(theme, !newName.trim() || loading)}\n >\n {loading ? '...' : labels.createButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => {\n setError('')\n setMode('select')\n }}\n style={linkButtonStyle(theme)}\n >\n or select existing\n </button>\n </div>\n </div>\n )\n }\n\n return (\n <div style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.selectWorkspace}</div>\n <select\n value={selected}\n onChange={(e) => setSelected(e.target.value)}\n disabled={loading}\n style={selectStyle(theme)}\n >\n <option value=\"\" disabled>\n {labels.workspacePlaceholder}\n </option>\n {workspaces?.map((ws) => (\n <option key={ws.external_id} value={ws.external_id}>\n {ws.name}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={!selected || loading}\n style={buttonStyle(theme, !selected || loading)}\n >\n {loading ? 'Connecting...' : labels.continueButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => {\n setError('')\n setMode('create')\n }}\n style={linkButtonStyle(theme)}\n >\n {labels.createWorkspace}\n </button>\n </div>\n </div>\n )\n}\n","import { useState, type ReactNode, type CSSProperties } from 'react'\nimport { resolveCitations, summarizeCitations } from '@arbidocs/sdk/browser'\nimport type { ChatMessage, ResolvedTheme } from './types'\nimport { messageBubbleStyle } from './styles'\n\ninterface MessageBubbleProps {\n message: ChatMessage\n theme: ResolvedTheme\n}\n\nconst CITE_RE = /\\[([^\\]]+)\\]\\(#cite-(\\d+)\\)/g\n\n/** Parse text with `[statement](#cite-N)` markers into React nodes. */\nfunction renderWithCitations(\n text: string,\n theme: ResolvedTheme,\n onCiteClick: (num: string) => void\n): ReactNode[] {\n const nodes: ReactNode[] = []\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = CITE_RE.exec(text)) !== null) {\n // Text before the citation\n if (match.index > lastIndex) {\n nodes.push(text.slice(lastIndex, match.index))\n }\n const statement = match[1]\n const citeNum = match[2]\n nodes.push(\n <span key={`cite-${match.index}`}>\n {statement}\n <sup\n onClick={(e) => {\n e.stopPropagation()\n onCiteClick(citeNum)\n }}\n style={citeSupStyle(theme)}\n title={`Citation ${citeNum}`}\n >\n {citeNum}\n </sup>\n </span>\n )\n lastIndex = match.index + match[0].length\n }\n\n // Remaining text\n if (lastIndex < text.length) {\n nodes.push(text.slice(lastIndex))\n }\n\n return nodes.length > 0 ? nodes : [text]\n}\n\nexport function MessageBubble({ message, theme }: MessageBubbleProps) {\n const [expandedCite, setExpandedCite] = useState<string | null>(null)\n\n const hasCitations =\n message.role === 'assistant' && message.metadata && CITE_RE.test(message.text)\n\n // Reset regex lastIndex after test\n CITE_RE.lastIndex = 0\n\n const resolved = hasCitations\n ? resolveCitations(message.metadata as Parameters<typeof resolveCitations>[0])\n : []\n const summaries = hasCitations ? summarizeCitations(resolved) : []\n const summaryMap = new Map(summaries.map((s) => [s.citationNum, s]))\n\n const handleCiteClick = (num: string) => {\n setExpandedCite((prev) => (prev === num ? null : num))\n }\n\n const activeSummary = expandedCite ? summaryMap.get(expandedCite) : null\n const activeResolved = expandedCite ? resolved.find((r) => r.citationNum === expandedCite) : null\n\n return (\n <div>\n <div style={messageBubbleStyle(theme, message.role)}>\n {hasCitations ? renderWithCitations(message.text, theme, handleCiteClick) : message.text}\n </div>\n {activeSummary && activeResolved && (\n <div style={citePanelStyle(theme)}>\n <div style={citePanelHeaderStyle(theme)}>\n <strong>[{activeSummary.citationNum}]</strong> {activeSummary.docTitle}\n {activeSummary.pageNumber != null && (\n <span style={{ color: theme.mutedColor }}> p.{activeSummary.pageNumber}</span>\n )}\n </div>\n {activeResolved.chunks.map((chunk, i) => (\n <div key={i} style={citeChunkStyle(theme)}>\n {chunk.content}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ── Inline styles ───────────────────────────────────────────────────────────\n\nfunction citeSupStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n fontWeight: 600,\n color: theme.primaryColor,\n cursor: 'pointer',\n marginLeft: '1px',\n minWidth: '14px',\n lineHeight: 1,\n }\n}\n\nfunction citePanelStyle(theme: ResolvedTheme): CSSProperties {\n return {\n marginTop: '4px',\n padding: '8px 10px',\n fontSize: '12px',\n lineHeight: '1.5',\n backgroundColor: theme.surfaceColor,\n border: `1px solid ${theme.borderColor}`,\n borderRadius: '8px',\n maxWidth: '85%',\n }\n}\n\nfunction citePanelHeaderStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '12px',\n fontWeight: 500,\n color: theme.textColor,\n marginBottom: '4px',\n }\n}\n\nfunction citeChunkStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '11px',\n color: theme.mutedColor,\n borderLeft: `2px solid ${theme.borderColor}`,\n paddingLeft: '8px',\n marginTop: '4px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }\n}\n","import { useState, useRef, useEffect, useCallback, type FormEvent, type ChangeEvent } from 'react'\nimport { useArbi } from '../useArbi'\nimport { useDocuments, useAssistantQuery } from '../hooks'\nimport type { ChatMessage, ResolvedLabels, ResolvedTheme } from './types'\nimport { MessageBubble } from './MessageBubble'\nimport {\n messagesContainerStyle,\n inputBarStyle,\n chatInputStyle,\n sendButtonStyle,\n docSelectorStyle,\n docToggleStyle,\n docListStyle,\n docItemStyle,\n emptyStateStyle,\n secondaryButtonStyle,\n fileInputStyle,\n agentStatusStyle,\n} from './styles'\n\ninterface ChatViewProps {\n workspaceId: string\n theme: ResolvedTheme\n labels: ResolvedLabels\n}\n\nexport function ChatView({ workspaceId, theme, labels }: ChatViewProps) {\n const arbi = useArbi()\n const { data: docs, refetch: refetchDocs } = useDocuments(workspaceId)\n const mutation = useAssistantQuery()\n\n const [messages, setMessages] = useState<ChatMessage[]>([])\n const [input, setInput] = useState('')\n const [streaming, setStreaming] = useState('')\n const [agentStatus, setAgentStatus] = useState('')\n const [selectedDocs, setSelectedDocs] = useState<string[]>([])\n const [docsExpanded, setDocsExpanded] = useState(false)\n const [previousResponseId, setPreviousResponseId] = useState<string | null>(null)\n const [uploading, setUploading] = useState(false)\n\n const messagesEndRef = useRef<HTMLDivElement>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n // Auto-select all docs when they first load\n useEffect(() => {\n if (docs && docs.length > 0 && selectedDocs.length === 0) {\n setSelectedDocs(docs.map((d) => d.external_id))\n }\n }, [docs, selectedDocs.length])\n\n // Auto-scroll to bottom\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [messages, streaming, agentStatus])\n\n const toggleDoc = (docId: string) => {\n setSelectedDocs((prev) =>\n prev.includes(docId) ? prev.filter((id) => id !== docId) : [...prev, docId]\n )\n }\n\n const handleUpload = useCallback(\n async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n setUploading(true)\n try {\n const newIds: string[] = []\n for (const file of Array.from(files)) {\n const result = await arbi.documents.uploadFile(file, file.name)\n // ``doc_ext_ids`` is optional on ``UploadResult`` — the server\n // omits it when the upload returned only skipped/duplicate\n // entries. Nothing to push in that case.\n if (result.doc_ext_ids) newIds.push(...result.doc_ext_ids)\n }\n await refetchDocs()\n setSelectedDocs((prev) => [...prev, ...newIds])\n } catch {\n // Upload errors are silently ignored — the user sees the doc list unchanged\n } finally {\n setUploading(false)\n // Reset file input so the same file can be re-selected\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n },\n [arbi, refetchDocs]\n )\n\n const handleSubmit = useCallback(\n (e: FormEvent) => {\n e.preventDefault()\n const question = input.trim()\n if (!question || selectedDocs.length === 0 || mutation.isPending) return\n\n setMessages((prev) => [...prev, { role: 'user', text: question }])\n setInput('')\n setStreaming('')\n setAgentStatus('')\n\n mutation.mutate(\n {\n question,\n docIds: selectedDocs,\n previousResponseId,\n onToken: (t) => setStreaming((prev) => prev + t),\n onAgentStep: (step) => {\n if (step.focus) setAgentStatus(step.focus)\n },\n },\n {\n onSuccess: (result) => {\n setStreaming('')\n setAgentStatus('')\n setMessages((prev) => [\n ...prev,\n { role: 'assistant', text: result.text, metadata: result.metadata },\n ])\n setPreviousResponseId(result.assistantMessageExtId)\n },\n onError: (err) => {\n setStreaming('')\n setAgentStatus('')\n setMessages((prev) => [...prev, { role: 'assistant', text: `Error: ${err.message}` }])\n },\n }\n )\n },\n [input, selectedDocs, previousResponseId, mutation]\n )\n\n const noDocs = !docs || docs.length === 0\n const noDocsSelected = selectedDocs.length === 0\n\n return (\n <>\n {/* Hidden file input (shared across upload buttons) */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept=\".pdf,.txt,.md,.html,.doc,.docx,.rtf,.ppt,.pptx,.xls,.xlsx\"\n onChange={handleUpload}\n style={fileInputStyle()}\n />\n\n {/* Document selector — always visible so users can upload */}\n <div style={docSelectorStyle(theme)}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <button\n type=\"button\"\n onClick={() => setDocsExpanded((prev) => !prev)}\n style={docToggleStyle(theme)}\n >\n <span style={{ fontSize: '10px' }}>{docsExpanded ? '\\u25BC' : '\\u25B6'}</span>\n {labels.documents} ({selectedDocs.length}/{docs?.length ?? 0} in chat)\n </button>\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n style={secondaryButtonStyle(theme, uploading)}\n >\n {uploading ? labels.uploading : labels.uploadButton}\n </button>\n </div>\n {docsExpanded && docs && docs.length > 0 && (\n <div style={docListStyle()}>\n {docs.map((doc) => (\n <label key={doc.external_id} style={docItemStyle(theme)}>\n <input\n type=\"checkbox\"\n checked={selectedDocs.includes(doc.external_id)}\n onChange={() => toggleDoc(doc.external_id)}\n />\n {doc.file_name}\n </label>\n ))}\n </div>\n )}\n </div>\n\n {/* Messages */}\n <div style={messagesContainerStyle()}>\n {messages.length === 0 && !streaming && (\n <div style={emptyStateStyle(theme)}>\n {noDocs\n ? labels.emptyNoDocs\n : noDocsSelected\n ? labels.emptyNoSelection\n : labels.emptyReady}\n </div>\n )}\n {messages.map((msg, i) => (\n <MessageBubble key={i} message={msg} theme={theme} />\n ))}\n {agentStatus && !streaming && <div style={agentStatusStyle(theme)}>{agentStatus}...</div>}\n {streaming && (\n <MessageBubble message={{ role: 'assistant', text: streaming }} theme={theme} />\n )}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input bar */}\n <form onSubmit={handleSubmit} style={inputBarStyle(theme)}>\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={noDocs || noDocsSelected ? 'Select documents first...' : labels.placeholder}\n disabled={noDocs || noDocsSelected || mutation.isPending}\n style={chatInputStyle(theme)}\n />\n <button\n type=\"submit\"\n disabled={!input.trim() || noDocsSelected || mutation.isPending}\n style={sendButtonStyle(theme, !input.trim() || noDocsSelected || mutation.isPending)}\n >\n {mutation.isPending ? '...' : labels.sendButton}\n </button>\n </form>\n </>\n )\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useArbi } from '../useArbi'\nimport type { ResolvedLabels, ResolvedTheme, WidgetScreen } from './types'\nimport { AuthScreen } from './AuthScreen'\nimport { WorkspaceScreen } from './WorkspaceScreen'\nimport { ChatView } from './ChatView'\nimport {\n containerStyle,\n headerStyle,\n bodyStyle,\n brandingStyle,\n brandingLinkStyle,\n linkButtonStyle,\n} from './styles'\n\ninterface ChatWidgetProps {\n theme: ResolvedTheme\n labels: ResolvedLabels\n initialWorkspaceId?: string\n width: string | number\n height: string | number\n}\n\nexport function ChatWidget({ theme, labels, initialWorkspaceId, width, height }: ChatWidgetProps) {\n const arbi = useArbi()\n const [screen, setScreen] = useState<WidgetScreen>('auth')\n const [workspaceId, setWorkspaceId] = useState<string | undefined>(initialWorkspaceId)\n\n // After authentication (or when resuming an ambient session), open the\n // provided workspace and jump to chat — or fall back to the picker.\n const resolveWorkspace = useCallback(async () => {\n if (initialWorkspaceId) {\n try {\n await arbi.selectWorkspace(initialWorkspaceId)\n setScreen('chat')\n return\n } catch {\n // Fall back to workspace selection if the provided ID fails\n setScreen('workspace')\n return\n }\n }\n setScreen('workspace')\n }, [arbi, initialWorkspaceId])\n\n const handleLogin = useCallback(() => resolveWorkspace(), [resolveWorkspace])\n\n // When embedded in a host app that already authenticated the ambient\n // ArbiProvider (e.g. <ArbiChatPanel> inside a signed-in dashboard), skip the\n // login screen and resume that session — no second login required.\n useEffect(() => {\n if (arbi.isLoggedIn) void resolveWorkspace()\n }, [arbi, resolveWorkspace])\n\n const handleWorkspaceSelect = useCallback((id: string) => {\n setWorkspaceId(id)\n setScreen('chat')\n }, [])\n\n const handleChangeWorkspace = useCallback(() => {\n setScreen('workspace')\n }, [])\n\n return (\n <div style={containerStyle(theme, width, height)}>\n <div style={{ ...headerStyle(theme), justifyContent: 'space-between' }}>\n <span>{labels.title}</span>\n {screen === 'chat' && !initialWorkspaceId && (\n <button type=\"button\" onClick={handleChangeWorkspace} style={linkButtonStyle(theme)}>\n {labels.changeWorkspace}\n </button>\n )}\n </div>\n\n <div style={bodyStyle()}>\n {screen === 'auth' && <AuthScreen theme={theme} labels={labels} onLogin={handleLogin} />}\n {screen === 'workspace' && (\n <WorkspaceScreen theme={theme} labels={labels} onSelect={handleWorkspaceSelect} />\n )}\n {screen === 'chat' && workspaceId && (\n <ChatView workspaceId={workspaceId} theme={theme} labels={labels} />\n )}\n </div>\n\n <div style={brandingStyle(theme)}>\n Powered by{' '}\n <a\n href=\"https://www.arbidocs.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={brandingLinkStyle(theme)}\n >\n ARBI\n </a>\n </div>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ArbiProvider } from '../ArbiProvider'\nimport type { ArbiChatLabels, ArbiChatProps, ArbiChatTheme } from './types'\nimport { getLabels, getTheme } from './styles'\nimport { ChatWidget } from './ChatWidget'\n\nexport type { ArbiChatProps, ArbiChatTheme, ArbiChatLabels }\n\n/** Props for {@link ArbiChatPanel} — the provider-less embeddable panel. */\nexport interface ArbiChatPanelProps {\n /** Skip workspace selection — go straight to chat */\n workspaceId?: string\n /** Customize colors and appearance */\n theme?: Partial<ArbiChatTheme>\n /** Customize text labels */\n labels?: ArbiChatLabels\n /** Widget width (default: '100%') */\n width?: string | number\n /** Widget height (default: '100%') */\n height?: string | number\n}\n\n/**\n * The ARBI chat panel **without** its own providers.\n *\n * Drop it inside an app that already renders `<ArbiProvider>` and a\n * `<QueryClientProvider>` to reuse the host's authenticated session — no second\n * login. When the ambient session is already signed in, the panel skips the\n * login screen and opens straight into chat.\n *\n * ```tsx\n * // inside your authenticated app tree\n * <ArbiChatPanel workspaceId=\"wrk-…\" theme={myTheme} />\n * ```\n *\n * For a fully self-contained widget (its own providers + login), use {@link ArbiChat}.\n */\nexport function ArbiChatPanel({\n workspaceId,\n theme: themeOverrides,\n labels: labelOverrides,\n width = '100%',\n height = '100%',\n}: ArbiChatPanelProps) {\n const theme = useMemo(() => getTheme(themeOverrides), [themeOverrides])\n const labels = useMemo(() => getLabels(labelOverrides), [labelOverrides])\n\n return (\n <ChatWidget\n theme={theme}\n labels={labels}\n initialWorkspaceId={workspaceId}\n width={width}\n height={height}\n />\n )\n}\n\n/**\n * Self-contained ARBI chat widget.\n *\n * Wraps its own QueryClientProvider and ArbiProvider so it works\n * anywhere — no setup required from the host app.\n *\n * ```tsx\n * import { ArbiChat } from '@arbidocs/react'\n *\n * <ArbiChat url=\"https://www.arbidocs.com\" />\n * ```\n */\nexport function ArbiChat({\n url,\n workspaceId,\n theme: themeOverrides,\n labels: labelOverrides,\n width = '400px',\n height = '600px',\n}: ArbiChatProps) {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false },\n mutations: { retry: false },\n },\n }),\n []\n )\n\n return (\n <QueryClientProvider client={queryClient}>\n <ArbiProvider url={url}>\n <ArbiChatPanel\n workspaceId={workspaceId}\n theme={themeOverrides}\n labels={labelOverrides}\n width={width}\n height={height}\n />\n </ArbiProvider>\n </QueryClientProvider>\n )\n}\n","/**\n * Core utility: `cn()` — merge class names with Tailwind-aware conflict\n * resolution (clsx + tailwind-merge). Copied faithfully from the ARBI app so the\n * promoted \"lego\" components style identically in a consumer app.\n */\n\nimport { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cn } from '../lib/utils'\n\n/**\n * Minimal, dependency-free tooltip — a drop-in API replacement for a Radix\n * wrapper (same exports/props: Tooltip, TooltipTrigger, TooltipContent,\n * TooltipProvider). Promoted verbatim from the ARBI app.\n *\n * It attaches the trigger via a STABLE `useCallback` ref (never setStates,\n * identity never changes), so React 19 never detach/attach-thrashes.\n */\n\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n setTrigger: (el: HTMLElement | null) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\ninterface TooltipProviderProps {\n children?: React.ReactNode\n delayDuration?: number\n skipDelayDuration?: number\n disableHoverableContent?: boolean\n}\nconst TooltipProvider = ({ children }: TooltipProviderProps) => <>{children}</>\n\ninterface TooltipProps {\n children: React.ReactNode\n delayDuration?: number\n}\n\nfunction Tooltip({ children, delayDuration = 300 }: TooltipProps) {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const contentId = React.useId()\n\n const clearTimer = () => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = null\n }\n }\n\n const show = React.useCallback(() => {\n clearTimer()\n timer.current = setTimeout(() => setOpen(true), delayDuration)\n }, [delayDuration])\n\n const hide = React.useCallback(() => {\n clearTimer()\n setOpen(false)\n }, [])\n\n const setTrigger = React.useCallback((el: HTMLElement | null) => {\n triggerRef.current = el\n }, [])\n\n React.useEffect(() => () => clearTimer(), [])\n\n const value = React.useMemo<TooltipContextValue>(\n () => ({ open, show, hide, setTrigger, triggerRef, contentId }),\n [open, show, hide, setTrigger, contentId]\n )\n\n return <TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>\n}\n\ninterface TooltipTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nfunction TooltipTrigger({ asChild, children, ...props }: TooltipTriggerProps) {\n const ctx = React.useContext(TooltipContext)\n if (!ctx) return <>{children}</>\n\n const triggerHandlers = {\n onPointerEnter: (e: React.PointerEvent) => {\n ;(props.onPointerEnter as ((e: React.PointerEvent) => void) | undefined)?.(e)\n ctx.show()\n },\n onPointerLeave: (e: React.PointerEvent) => {\n ;(props.onPointerLeave as ((e: React.PointerEvent) => void) | undefined)?.(e)\n ctx.hide()\n },\n onFocus: (e: React.FocusEvent) => {\n ;(props.onFocus as ((e: React.FocusEvent) => void) | undefined)?.(e)\n ctx.show()\n },\n onBlur: (e: React.FocusEvent) => {\n ;(props.onBlur as ((e: React.FocusEvent) => void) | undefined)?.(e)\n ctx.hide()\n },\n 'aria-describedby': ctx.open ? ctx.contentId : undefined,\n 'data-state': ctx.open ? 'open' : 'closed',\n }\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<Record<string, unknown>>\n return React.cloneElement(child, {\n ...props,\n ...triggerHandlers,\n ref: ctx.setTrigger,\n })\n }\n\n return (\n <button\n type=\"button\"\n {...props}\n {...triggerHandlers}\n ref={ctx.setTrigger as unknown as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n}\n\ninterface TooltipContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: Side\n sideOffset?: number\n}\n\nconst TRANSFORM_BY_SIDE: Record<Side, string> = {\n top: 'translate(-50%, -100%)',\n bottom: 'translate(-50%, 0)',\n left: 'translate(-100%, -50%)',\n right: 'translate(0, -50%)',\n}\n\nconst TooltipContent = React.forwardRef<HTMLDivElement, TooltipContentProps>(\n ({ className, side = 'top', sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const [coords, setCoords] = React.useState<{\n top: number\n left: number\n transform: string\n } | null>(null)\n\n React.useLayoutEffect(() => {\n if (!ctx?.open || !ctx.triggerRef.current) {\n setCoords(null)\n return\n }\n const r = ctx.triggerRef.current.getBoundingClientRect()\n const c = innerRef.current?.getBoundingClientRect()\n const ch = c?.height ?? 0\n const cw = c?.width ?? 0\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n let s: Side = side\n if (s === 'top' && r.top - sideOffset - ch < 0) s = 'bottom'\n else if (s === 'bottom' && r.bottom + sideOffset + ch > vh) s = 'top'\n else if (s === 'left' && r.left - sideOffset - cw < 0) s = 'right'\n else if (s === 'right' && r.right + sideOffset + cw > vw) s = 'left'\n\n setCoords({\n top:\n s === 'top'\n ? r.top - sideOffset\n : s === 'bottom'\n ? r.bottom + sideOffset\n : r.top + r.height / 2,\n left:\n s === 'left'\n ? r.left - sideOffset\n : s === 'right'\n ? r.right + sideOffset\n : r.left + r.width / 2,\n transform: TRANSFORM_BY_SIDE[s],\n })\n }, [ctx?.open, side, sideOffset, ctx?.triggerRef])\n\n if (!ctx?.open) return null\n\n const setRefs = (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n\n return createPortal(\n <div\n ref={setRefs}\n id={ctx.contentId}\n role=\"tooltip\"\n className={cn('tooltip-content pointer-events-none', className)}\n style={{\n position: 'fixed',\n top: coords?.top ?? -9999,\n left: coords?.left ?? -9999,\n transform: coords?.transform ?? TRANSFORM_BY_SIDE[side],\n opacity: coords ? undefined : 0,\n zIndex: 9999,\n ...style,\n }}\n {...props}\n />,\n document.body\n )\n }\n)\nTooltipContent.displayName = 'TooltipContent'\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../lib/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-sm font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return <div className={cn(badgeVariants({ variant }), className)} {...props} />\n}\n\nexport { Badge, badgeVariants }\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\nimport * as HoverCardPrimitive from '@radix-ui/react-hover-card'\n\nimport { cn } from '../lib/utils'\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]',\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","/**\n * File-type icon colors — the subset of the app's FILE_TYPE_COLORS used by the\n * promoted file-type icons. Kept self-contained so the SDK icons render with the\n * same palette as the ARBI app without depending on the app's style constants.\n */\n\nconst NEUTRAL_GRAY = '#64748b' // slate-500\n\nexport const FILE_TYPE_COLORS = {\n pdf: '#ef4444', // red\n img: '#8b5cf6', // violet-500 (images)\n vid: '#10b981', // emerald-500 (video)\n aud: '#f59e0b', // amber-500 (audio)\n eml: '#0d9488', // teal-600 (email)\n generic: NEUTRAL_GRAY, // gray (unknown)\n white: '#ffffff', // for strokes/text on colored backgrounds\n}\n","/** PDF file icon (red). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const PdfIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.pdf}\n stroke={FILE_TYPE_COLORS.pdf}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n PDF\n </text>\n </svg>\n )\n}\n","/** Audio file icon (amber). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const AudIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.aud}\n stroke={FILE_TYPE_COLORS.aud}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n AUD\n </text>\n </svg>\n )\n}\n","/** Image file icon (violet). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const ImgIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.img}\n stroke={FILE_TYPE_COLORS.img}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n IMG\n </text>\n </svg>\n )\n}\n","/** Video file icon (emerald). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const VidIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.vid}\n stroke={FILE_TYPE_COLORS.vid}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n VID\n </text>\n </svg>\n )\n}\n","/** Email file icon (teal). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const EmlIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.eml}\n stroke={FILE_TYPE_COLORS.eml}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"7\"\n y=\"12\"\n width=\"10\"\n height=\"7\"\n rx=\"1\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"1.2\"\n />\n <path d=\"M7 13l5 3 5-3\" fill=\"none\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","/** Generic file icon (gray, question mark). Promoted from the ARBI app. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const FileIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.generic}\n stroke={FILE_TYPE_COLORS.generic}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"17\"\n fontSize=\"10\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n ?\n </text>\n </svg>\n )\n}\n","/**\n * EntityPill Component\n *\n * Base component for pill-style entity displays. Provides consistent styling and\n * interaction patterns. Promoted verbatim from the ARBI app (import paths only\n * changed to resolve within the SDK).\n *\n * Pattern: [Icon] [Label] [Optional: secondary text] [MoreVertical when interactive]\n */\n\nimport React, { forwardRef } from 'react'\nimport { MoreVertical } from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'\n\ninterface EntityPillProps {\n /** The icon element (Avatar, ShieldIcon, FileIcon, etc.) */\n icon: React.ReactNode\n /** Primary label text */\n label: string\n /** Optional secondary text (e.g., page notation \"p.1\") */\n secondaryText?: React.ReactNode\n\n // Styling\n /** Size variant: 'sm' for compact, 'base' for tab headers */\n size?: 'sm' | 'base'\n /** Shape variant: 'pill' for rounded-full, 'rounded' for rounded-md */\n shape?: 'pill' | 'rounded'\n /** Additional CSS classes */\n className?: string\n /** Max width for label truncation */\n labelMaxWidth?: string\n /** When true, the pill fills its container width (`flex w-full`) and the main\n * area flexes + truncates so the trailing control (⋯ menu) pins to the right\n * edge — used by the documents table's Document column. Default: shrink-to-fit. */\n fullWidth?: boolean\n /** When true, render the pill with the active/\"viewing\" highlight — a solid\n * dark-navy background with light text, applied LAST so it wins over both the\n * default background and the interactive hover. */\n highlight?: boolean\n\n // Behavior\n /** Click handler for main area (icon + label) - primary action */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for icon only — when set, only the icon is clickable (not the label) */\n onIconClick?: (e: React.MouseEvent) => void\n /** Click handler for MoreVertical - opens popover/menu. When provided, shows MoreVertical icon */\n onMoreClick?: (e: React.MouseEvent) => void\n /** Custom trailing element (e.g. a ⋯ dropdown menu). Rendered in the same\n * trailing zone as MoreVertical, but as-is — so it stays outside the pill's\n * primary click area. Takes precedence over `onMoreClick`. */\n moreContent?: React.ReactNode\n /** Link URL - makes the main area an anchor tag */\n href?: string\n /** Whether the pill is disabled */\n disabled?: boolean\n\n // Tooltip\n /** Tooltip for main area (describes primary action, e.g., \"View document\") */\n tooltipContent?: React.ReactNode\n /** Tooltip side placement */\n tooltipSide?: 'top' | 'bottom' | 'left' | 'right'\n\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const EntityPill = forwardRef<HTMLElement, EntityPillProps>(function EntityPill(\n {\n icon,\n label,\n secondaryText,\n size = 'sm',\n shape = 'rounded',\n className,\n labelMaxWidth = 'max-w-[320px]',\n fullWidth = false,\n highlight = false,\n onClick,\n onIconClick,\n onMoreClick,\n moreContent,\n href,\n disabled = false,\n tooltipContent,\n tooltipSide = 'bottom',\n 'data-testid': testId,\n },\n ref\n) {\n const shapeClass = shape === 'pill' ? 'rounded-full' : 'rounded-md'\n\n // Size-based classes\n const sizeClasses = size === 'base' ? 'gap-1.5 px-1.5 py-0.5' : 'gap-1 px-1'\n const textSizeClass = size === 'base' ? 'text-base' : 'text-sm'\n\n const baseClasses = cn(\n 'group/pill items-center',\n fullWidth ? 'flex w-full' : 'inline-flex',\n sizeClasses,\n shapeClass,\n 'bg-muted',\n 'border border-border',\n 'transition-all',\n className\n )\n\n const interactiveClasses = 'cursor-pointer hover:bg-muted/80'\n const disabledClasses = 'cursor-default opacity-60'\n const highlightClasses =\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground'\n\n // Main content (icon + label + secondary text)\n const mainContent = (\n <>\n {onIconClick ? (\n <span\n role=\"button\"\n tabIndex={0}\n className=\"flex-shrink-0 cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n onIconClick(e)\n }}\n >\n {icon}\n </span>\n ) : (\n icon\n )}\n <span\n className={cn(textSizeClass, 'font-medium truncate leading-tight min-w-0', labelMaxWidth)}\n >\n {label}\n </span>\n {secondaryText && (\n <span className=\"text-xs text-muted-foreground flex-shrink-0 leading-none\">\n {secondaryText}\n </span>\n )}\n </>\n )\n\n // Helper: wrap any content in a Tooltip (no asChild — TooltipTrigger renders its own button)\n const tooltipWrap = (\n content: React.ReactNode,\n tip: React.ReactNode,\n side: 'top' | 'bottom' | 'left' | 'right' = tooltipSide,\n triggerClassName?: string,\n triggerProps?: Record<string, unknown>\n ) => (\n <Tooltip>\n <TooltipTrigger\n onFocusCapture={(e) => e.stopPropagation()}\n className={triggerClassName}\n {...triggerProps}\n >\n {content}\n </TooltipTrigger>\n <TooltipContent side={side} className=\"p-2\">\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n\n const mainAreaClass = cn('inline-flex items-center gap-1', fullWidth && 'min-w-0 flex-1')\n\n if (onMoreClick || moreContent) {\n let mainArea: React.ReactNode\n if (tooltipContent) {\n mainArea = tooltipWrap(\n mainContent,\n tooltipContent,\n tooltipSide,\n cn(mainAreaClass, disabled && 'opacity-60'),\n {\n type: 'button',\n onClick: href ? onClick : disabled ? undefined : onClick,\n disabled: disabled || undefined,\n }\n )\n } else if (href) {\n mainArea = (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mainAreaClass}\n onClick={onClick}\n >\n {mainContent}\n </a>\n )\n } else if (onClick) {\n mainArea = (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={cn('inline-flex items-center gap-1', disabled && 'opacity-60')}\n >\n {mainContent}\n </button>\n )\n } else {\n mainArea = <span className={mainAreaClass}>{mainContent}</span>\n }\n\n const moreArea = moreContent ? (\n <span className=\"flex-shrink-0 leading-none\">{moreContent}</span>\n ) : (\n tooltipWrap(\n <MoreVertical className=\"w-3.5 h-3.5\" />,\n 'Click for more',\n tooltipSide,\n 'flex-shrink-0 leading-none text-muted-foreground hover:text-foreground',\n {\n type: 'button',\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n onMoreClick?.(e)\n },\n }\n )\n )\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(\n baseClasses,\n (onClick || href) && !disabled && interactiveClasses,\n highlight && highlightClasses\n )}\n data-testid={testId}\n >\n {mainArea}\n {moreArea}\n </span>\n )\n }\n\n if (tooltipContent) {\n if (href) {\n return tooltipWrap(\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mainAreaClass}\n onClick={onClick}\n >\n {mainContent}\n </a>,\n tooltipContent,\n tooltipSide,\n cn(baseClasses, interactiveClasses),\n { 'data-testid': testId }\n )\n }\n\n return tooltipWrap(\n mainContent,\n tooltipContent,\n tooltipSide,\n cn(\n baseClasses,\n onClick && !disabled ? interactiveClasses : '',\n disabled ? disabledClasses : '',\n highlight && highlightClasses\n ),\n {\n type: 'button',\n ref: ref as React.Ref<HTMLButtonElement>,\n onClick: onClick && !disabled ? onClick : undefined,\n disabled: disabled || undefined,\n 'data-testid': testId,\n }\n )\n }\n\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(baseClasses, interactiveClasses)}\n data-testid={testId}\n onClick={onClick}\n >\n {mainContent}\n </a>\n )\n }\n\n if (onClick) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={cn(\n baseClasses,\n disabled ? disabledClasses : interactiveClasses,\n highlight && highlightClasses\n )}\n data-testid={testId}\n >\n {mainContent}\n </button>\n )\n }\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(baseClasses, highlight && highlightClasses)}\n data-testid={testId}\n >\n {mainContent}\n </span>\n )\n})\n","/**\n * DocumentEntity Component\n *\n * Displays a document as a compact entity pill with file-type icon and name.\n * Promoted from the ARBI app and DECOUPLED from the app store/API: it renders\n * purely from the `doc` prop and optional `onClick`/`onIconClick` callbacks.\n */\n\nimport React from 'react'\nimport { Eye, FolderOpen } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { AudIcon } from '../icons/AudIcon'\nimport { EmlIcon } from '../icons/EmlIcon'\nimport { ImgIcon } from '../icons/ImgIcon'\nimport { PdfIcon } from '../icons/PdfIcon'\nimport { VidIcon } from '../icons/VidIcon'\nimport { cn } from '../lib/utils'\n\n/** Minimal, decoupled document shape the pill needs. Structurally compatible\n * with the SDK's `DocResponse` (from `useDocuments`), but no dependency on it —\n * a consumer can pass any object with these fields. */\nexport interface DocumentLike {\n file_name?: string | null\n folder?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\n/** Title of a document: `doc_metadata.title`, falling back to `file_name`. */\nfunction getDocumentTitle(document: DocumentLike | null | undefined, defaultValue = ''): string {\n if (!document) return defaultValue\n return document.doc_metadata?.title || document.file_name || defaultValue\n}\n\n/** Hard cap on the pill's visible label. The full name still shows in the hover\n * tooltip; the pill stays compact so the trailing ⋮ menu never gets pushed. */\nconst MAX_LABEL_CHARS = 30\n\nfunction clampLabel(text: string): string {\n return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}…` : text\n}\n\nconst IMAGE_EXTENSIONS = new Set(['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'tif', 'webp'])\nconst VIDEO_EXTENSIONS = new Set(['mp4', 'mpeg', 'mpg', 'webm', 'mov', 'avi', 'mkv'])\nconst AUDIO_EXTENSIONS = new Set(['mp3', 'wav', 'm4a', 'aac', 'ogg', 'flac'])\nconst EMAIL_EXTENSIONS = new Set(['eml', 'msg'])\n\nfunction getDocIcon(fileName?: string | null, iconSize = 14): React.ReactNode {\n const ext = fileName?.split('.').pop()?.toLowerCase()\n if (ext && VIDEO_EXTENSIONS.has(ext)) return <VidIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && AUDIO_EXTENSIONS.has(ext)) return <AudIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && IMAGE_EXTENSIONS.has(ext)) return <ImgIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && EMAIL_EXTENSIONS.has(ext)) return <EmlIcon size={iconSize} className=\"flex-shrink-0\" />\n return <PdfIcon size={iconSize} className=\"flex-shrink-0\" />\n}\n\nexport interface DocumentEntityProps {\n doc: DocumentLike\n /** Override the default file-type icon */\n icon?: React.ReactNode\n /** Size variant — 'sm' (default) for inline/compact contexts, 'base' for a\n * larger pill (e.g. the documents grid's primary name column). */\n size?: 'sm' | 'base'\n /** Override default label max width */\n labelMaxWidth?: string\n /** Click handler for the whole pill */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for the icon only */\n onIconClick?: (e: React.MouseEvent) => void\n /** When true, the file-type icon swaps to an Eye on pill hover — a cue that\n * clicking opens (view) the document. */\n showHoverEye?: boolean\n /** When true, the Eye is pinned on (not just hover) — marks the document that\n * is currently open/being viewed. Implies the hover-swap behaviour. */\n viewing?: boolean\n /** Small overlay pinned to the icon's corner (e.g. an \"available offline\" pip). */\n iconBadge?: React.ReactNode\n /** Trailing control rendered outside the click area (e.g. a ⋯ actions menu). */\n actions?: React.ReactNode\n /** When true, the pill fills the available width and the name truncates via\n * CSS so the trailing ⋯ menu pins to the right edge. */\n fullWidth?: boolean\n /** Override the default folder/title hover tooltip. */\n tooltipContent?: React.ReactNode\n className?: string\n}\n\nexport function DocumentEntity({\n doc,\n icon,\n size = 'sm',\n labelMaxWidth,\n onClick,\n onIconClick,\n showHoverEye,\n viewing,\n iconBadge,\n actions,\n tooltipContent,\n className,\n fullWidth,\n}: DocumentEntityProps) {\n const title = getDocumentTitle(doc)\n const ext = doc.file_name?.split('.').pop()?.toLowerCase()\n const iconSize = size === 'base' ? 16 : 14\n const eyeSizeClass = size === 'base' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n\n const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize)\n const showEye = showHoverEye || viewing\n const displayIcon =\n showEye || iconBadge ? (\n <span className=\"relative inline-flex flex-shrink-0 items-center justify-center\">\n {showEye ? (\n <>\n <span\n className={cn(\n 'transition-opacity',\n viewing\n ? 'opacity-0'\n : 'group-hover/pill:opacity-0 group-has-[[data-state=open]]/pill:opacity-0'\n )}\n >\n {baseIcon}\n </span>\n <Eye\n className={cn(\n 'absolute inset-0 m-auto transition-opacity',\n eyeSizeClass,\n viewing\n ? 'text-primary-foreground opacity-100'\n : 'text-primary opacity-0 group-hover/pill:opacity-100 group-has-[[data-state=open]]/pill:opacity-100'\n )}\n />\n </>\n ) : (\n baseIcon\n )}\n {iconBadge}\n </span>\n ) : (\n baseIcon\n )\n\n const defaultTooltip = (\n <div className=\"flex flex-col gap-1 text-xs max-w-[300px]\">\n {doc.folder && (\n <span className=\"flex items-center gap-0.5 text-muted-foreground\">\n <FolderOpen className=\"h-3 w-3 text-yellow-600 shrink-0\" />\n {doc.folder.split('/').map((part, i, arr) => (\n <span key={i} className=\"flex items-center gap-0.5 shrink-0\">\n {i > 0 && <span className=\"text-muted-foreground/50 mx-0.5\">/</span>}\n <span className={i < arr.length - 1 ? 'text-muted-foreground/70' : ''}>{part}</span>\n </span>\n ))}\n </span>\n )}\n <span className=\"font-medium break-words\">\n {title}\n {ext ? `.${ext}` : ''}\n </span>\n </div>\n )\n\n return (\n <EntityPill\n icon={displayIcon}\n size={size}\n label={fullWidth ? title : clampLabel(title)}\n labelMaxWidth={labelMaxWidth ?? 'max-w-[140px]'}\n fullWidth={fullWidth}\n onClick={onClick}\n onIconClick={onIconClick}\n moreContent={actions}\n className={className}\n highlight={viewing}\n tooltipContent={tooltipContent ?? defaultTooltip}\n />\n )\n}\n","/**\n * TagEntity Component\n *\n * Single source of truth for tag visual appearance, promoted from the ARBI app\n * and DECOUPLED from the app store/API. It renders purely from the `tag` prop —\n * the app-only bits (creator/updater lookup, visibility toggle, live doctag\n * count from the query cache) are dropped; pass `doctagCount`/`shared` if you\n * want them shown in the tooltip.\n */\n\nimport React from 'react'\nimport { SquareCheckBig, StickyNote, List, Hash, Search, Folder, Calendar, Bot } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { Badge } from '../ui/badge'\n\n/** Base color map — source of truth for entity colors, keyed by the 5th char of\n * an entity id (matches the app's BASE_COLORS). */\nconst BASE_COLORS: Record<string, string> = {\n '0': '#10b981',\n '1': '#3b82f6',\n '2': '#8b5cf6',\n '3': '#f43f5e',\n '4': '#f59e0b',\n '5': '#84cc16',\n '6': '#a855f7',\n '7': '#06b6d4',\n '8': '#f97316',\n '9': '#14b8a6',\n a: '#ef4444',\n b: '#6366f1',\n c: '#ec4899',\n d: '#22c55e',\n e: '#eab308',\n f: '#0ea5e9',\n}\n\n/** Solid entity color derived from an entity id (matches the app's\n * `getEntityColor(id, 'medium')`). */\nfunction getEntityColor(entityId: string): string {\n return BASE_COLORS[entityId[4]] || BASE_COLORS['0']\n}\n\n/** Minimal, decoupled tag shape the pill needs. */\nexport interface TagLike {\n external_id: string\n name: string\n /** Tag type discriminator — drives the icon and the tooltip's \"Type\" line. */\n tag_type?: { type: string } | null\n /** Optional explicit color; when omitted it's derived from `external_id`. */\n color?: string\n /** Optional document count shown in the tooltip. */\n doctag_count?: number | null\n /** Optional shared/private flag shown in the tooltip. */\n shared?: boolean | null\n}\n\nconst TAG_TYPE_LABELS: Record<string, string> = {\n checkbox: 'Checkbox',\n select: 'Select',\n number: 'Number',\n text: 'Text',\n folder: 'Folder',\n search: 'Saved Search',\n date: 'Date',\n assistant: 'AI Assistant',\n}\n\nconst TAG_TYPE_ICONS: Record<string, typeof StickyNote> = {\n checkbox: SquareCheckBig,\n select: List,\n number: Hash,\n text: StickyNote,\n folder: Folder,\n search: Search,\n date: Calendar,\n assistant: Bot,\n}\n\nexport interface TagEntityProps {\n tag: TagLike\n size?: 'sm' | 'md' | 'lg'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Whether to show the detailed tooltip (default: true) */\n showTooltip?: boolean\n}\n\nexport function TagEntity({\n tag,\n size = 'md',\n className = '',\n onClick,\n showTooltip = true,\n}: TagEntityProps) {\n const tagType = tag.tag_type?.type ?? 'text'\n const iconSize = size === 'sm' ? 12 : size === 'md' ? 14 : 16\n const Icon = TAG_TYPE_ICONS[tagType] || StickyNote\n\n const sizeClasses = {\n sm: 'p-0.5',\n md: 'p-1',\n lg: 'p-1.5',\n }\n\n const tagColor = tag.color ?? getEntityColor(tag.external_id)\n\n const iconElement = (\n <span\n className={`inline-flex items-center justify-center rounded-md text-white flex-shrink-0 ${sizeClasses[size]}`}\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={iconSize} className=\"flex-shrink-0\" />\n </span>\n )\n\n const pillSize = size === 'lg' ? 'base' : 'sm'\n\n const tooltipContent = showTooltip ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-flex items-center justify-center rounded-md text-white p-1\"\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={16} />\n </span>\n <span className=\"font-medium text-sm\">{tag.name}</span>\n </div>\n\n <div className=\"flex flex-col gap-1.5 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Type:</span>\n <span>{TAG_TYPE_LABELS[tagType] || tagType}</span>\n </div>\n\n {tag.doctag_count != null && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Documents:</span>\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] justify-center\">\n {tag.doctag_count ?? 0}\n </Badge>\n </div>\n )}\n\n {tag.shared != null && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{tag.shared ? 'Shared' : 'Private'}</span>\n </div>\n )}\n </div>\n </div>\n ) : undefined\n\n return (\n <EntityPill\n icon={iconElement}\n label={tag.name}\n size={pillSize}\n shape=\"rounded\"\n labelMaxWidth=\"max-w-[180px]\"\n tooltipContent={tooltipContent}\n onClick={onClick}\n className={className}\n data-testid={`tag-entity-${tag.external_id}`}\n />\n )\n}\n","/**\n * ProjectEntity Component\n *\n * Fully-rounded pill for a \"project\" (a.k.a. a \"matter\" in some consumer apps).\n * The viewer's relationship to the project drives an INVERTED (solid-fill)\n * colour so the kinds read at a glance:\n * - your paid project → primary\n * - someone else's → secondary\n * - your free project → grey\n * \"Common\" keeps the neutral, non-inverted muted pill.\n *\n * Promoted from the ARBI app and DECOUPLED: no store/stripe deps. The icon\n * defaults to a generic `Package` glyph and can be overridden via `icon`, and\n * the display text via `label` (falls back to `name`) so consumers can relabel\n * a \"project\" as a \"matter\", \"case\", etc.\n */\n\nimport React from 'react'\nimport { Package } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { cn } from '../lib/utils'\n\nexport type ProjectRelation = 'mine' | 'other' | 'common'\n\nexport interface ProjectEntityProps {\n name: string\n /** Display text override (defaults to `name`) — lets a consumer relabel. */\n label?: string\n /** Icon override (defaults to a generic Package glyph). */\n icon?: React.ReactNode\n subscription?: string\n hasCollaborators?: boolean\n size?: 'sm' | 'base'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Viewer's relationship to the project — drives the inverted pill colour. */\n relation?: ProjectRelation\n /** Whether the given `subscription` should be treated as paid. When omitted,\n * it's inferred from the `subscription` value ('active' | 'past_due' | 'dev'). */\n isPaid?: boolean\n /** Hover tooltip. */\n tooltipContent?: React.ReactNode\n}\n\ntype PillVariant = 'mine-paid' | 'mine-free' | 'other' | 'common'\n\nconst VARIANT_STYLES: Record<PillVariant, { pill: string; icon: string }> = {\n 'mine-paid': {\n pill: 'bg-primary text-primary-foreground border-transparent',\n icon: 'text-primary-foreground',\n },\n other: {\n pill: 'bg-secondary text-secondary-foreground border-transparent',\n icon: 'text-secondary-foreground',\n },\n 'mine-free': {\n pill: 'bg-muted-foreground text-background border-transparent',\n icon: 'text-background',\n },\n common: {\n pill: '',\n icon: 'text-muted-foreground',\n },\n}\n\nfunction resolveVariant(\n relation: ProjectRelation | undefined,\n paid: boolean,\n hasCollaborators: boolean\n): PillVariant {\n if (relation === 'common') return 'common'\n if (relation === 'other') return 'other'\n if (relation === 'mine') return paid ? 'mine-paid' : 'mine-free'\n // Legacy, subscription-driven callers (no relation given).\n if (paid) return hasCollaborators ? 'other' : 'mine-paid'\n return 'mine-free'\n}\n\nexport function ProjectEntity({\n name,\n label,\n icon,\n subscription = 'none',\n hasCollaborators = false,\n size = 'sm',\n className,\n onClick,\n relation,\n isPaid,\n tooltipContent,\n}: ProjectEntityProps) {\n const paid =\n isPaid ?? (subscription === 'active' || subscription === 'past_due' || subscription === 'dev')\n const variant = resolveVariant(relation, paid, hasCollaborators)\n const { pill, icon: iconClass } = VARIANT_STYLES[variant]\n\n const iconSizeClass = size === 'base' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n const iconNode = icon ?? <Package className={cn(iconSizeClass, iconClass)} />\n\n return (\n <EntityPill\n icon={iconNode}\n label={label ?? name}\n size={size}\n shape=\"pill\"\n className={cn(pill, className)}\n onClick={onClick}\n tooltipContent={tooltipContent}\n />\n )\n}\n","/**\n * SDK-owned UI store for cross-block coordination.\n *\n * This is a SMALL, decoupled zustand store (NOT the ARBI app's multi-slice\n * store). Blocks such as `DocumentTable` use it as a fallback for selection /\n * \"viewing\" state when the consumer does not drive that state via props.\n */\n\nimport { create } from 'zustand'\n\nexport interface ArbiUiState {\n /** External ids of the currently selected documents. */\n selectedDocIds: string[]\n setSelectedDocIds: (ids: string[]) => void\n /** External id of the document currently being viewed/opened, if any. */\n viewingDocId: string | null\n setViewingDocId: (id: string | null) => void\n}\n\nexport const useArbiUiStore = create<ArbiUiState>((set) => ({\n selectedDocIds: [],\n setSelectedDocIds: (ids) => set({ selectedDocIds: ids }),\n viewingDocId: null,\n setViewingDocId: (id) => set({ viewingDocId: id }),\n}))\n","/**\n * DocumentTable — a reusable AG Grid (community) block that renders a\n * workspace's documents using the promoted entity pills.\n *\n * REUSE-FIRST: this composes AG Grid + `DocumentEntity`/`TagEntity` + the shadcn\n * `Badge`; it is not a bespoke table. Data comes from the SDK `useDocuments`\n * hook (or an explicit `documents` prop). Selection is controlled via\n * `selectedIds`/`onSelectionChange`, falling back to the SDK-owned\n * `useArbiUiStore` when those props are omitted.\n */\n\nimport React from 'react'\nimport { AgGridReact } from 'ag-grid-react'\nimport {\n ModuleRegistry,\n AllCommunityModule,\n type ColDef,\n type ICellRendererParams,\n type RowClickedEvent,\n type SelectionChangedEvent,\n type GridReadyEvent,\n} from 'ag-grid-community'\nimport type { components } from '@arbidocs/client'\n\nimport { useDocuments, useTags } from '../hooks'\nimport { useArbiUiStore } from '../store'\nimport { DocumentEntity } from '../entities/DocumentEntity'\nimport { TagEntity } from '../entities/TagEntity'\nimport { Badge } from '../ui/badge'\n\n// Register the community modules once, at import time (matches the app's usage).\nModuleRegistry.registerModules([AllCommunityModule])\n\ntype DocResponse = components['schemas']['DocResponse']\n\nexport interface DocumentTableProps {\n /** Workspace to load documents from (used when `documents` is not supplied). */\n workspaceId?: string\n /** Explicit rows. When provided, `useDocuments` is not called. */\n documents?: DocResponse[]\n /** Called when a row (document) is opened — row click or name-pill click. */\n onOpenDocument?: (id: string) => void\n /** Controlled selection (external ids). Falls back to the SDK ui store. */\n selectedIds?: string[]\n /** Called with the new selection (external ids). Falls back to the SDK ui store. */\n onSelectionChange?: (ids: string[]) => void\n /** Grid height. Number → pixels; string passed through. Default 480. */\n height?: number | string\n className?: string\n}\n\n/** Format a byte count as a compact human-readable size. */\nfunction formatBytes(bytes?: number | null): string {\n if (bytes == null || Number.isNaN(bytes)) return '—'\n if (bytes < 1024) return `${bytes} B`\n const units = ['KB', 'MB', 'GB', 'TB']\n let value = bytes / 1024\n let i = 0\n while (value >= 1024 && i < units.length - 1) {\n value /= 1024\n i++\n }\n return `${value.toFixed(value >= 10 || i === 0 ? 0 : 1)} ${units[i]}`\n}\n\nconst STATUS_VARIANTS: Record<string, 'default' | 'secondary' | 'destructive' | 'outline'> = {\n completed: 'default',\n empty: 'secondary',\n 'low-content': 'secondary',\n processing: 'outline',\n queued: 'outline',\n failed: 'destructive',\n skipped: 'destructive',\n}\n\nexport function DocumentTable({\n workspaceId,\n documents,\n onOpenDocument,\n selectedIds,\n onSelectionChange,\n height = 480,\n className,\n}: DocumentTableProps) {\n // Server data via the SDK hook, unless rows are supplied directly.\n const query = useDocuments(workspaceId, { enabled: !documents })\n const rows = documents ?? query.data ?? []\n const isLoading = !documents && query.isLoading\n\n // Resolve tag ids → human names so the \"Labels\" column shows real AI tags\n // (e.g. \"Issue\", \"Relevance\") rather than opaque id prefixes.\n const tagsQuery = useTags(workspaceId)\n const tagNameById = React.useMemo(() => {\n const map = new Map<string, string>()\n for (const t of tagsQuery.data ?? []) {\n if (t.external_id) map.set(t.external_id, t.name ?? t.external_id.slice(0, 8))\n }\n return map\n }, [tagsQuery.data])\n\n // Selection: controlled via props, else the SDK-owned ui store.\n const storeSelected = useArbiUiStore((s) => s.selectedDocIds)\n const storeSetSelected = useArbiUiStore((s) => s.setSelectedDocIds)\n const viewingDocId = useArbiUiStore((s) => s.viewingDocId)\n const setViewingDocId = useArbiUiStore((s) => s.setViewingDocId)\n\n const effectiveSelected = selectedIds ?? storeSelected\n const emitSelection = onSelectionChange ?? storeSetSelected\n\n const gridApiRef = React.useRef<GridReadyEvent['api'] | null>(null)\n\n const openDocument = React.useCallback(\n (id: string) => {\n setViewingDocId(id)\n onOpenDocument?.(id)\n },\n [onOpenDocument, setViewingDocId]\n )\n\n // Sync the incoming `effectiveSelected` down into the grid's node selection.\n const applySelection = React.useCallback(() => {\n const api = gridApiRef.current\n if (!api) return\n const wanted = new Set(effectiveSelected)\n api.forEachNode((node) => {\n const id = (node.data as DocResponse | undefined)?.external_id\n const shouldSelect = !!id && wanted.has(id)\n if (node.isSelected() !== shouldSelect) node.setSelected(shouldSelect)\n })\n }, [effectiveSelected])\n\n React.useEffect(() => {\n applySelection()\n }, [applySelection])\n\n const columnDefs = React.useMemo<ColDef<DocResponse>[]>(\n () => [\n {\n colId: 'select',\n headerName: '',\n width: 44,\n pinned: 'left',\n checkboxSelection: true,\n headerCheckboxSelection: true,\n sortable: false,\n filter: false,\n resizable: false,\n suppressMovable: true,\n },\n {\n colId: 'title',\n headerName: 'Document Name',\n flex: 3,\n minWidth: 240,\n sortable: true,\n valueGetter: (p) => p.data?.doc_metadata?.title || p.data?.file_name || '',\n cellRenderer: (p: ICellRendererParams<DocResponse>) => {\n const doc = p.data\n if (!doc) return null\n return (\n <DocumentEntity\n doc={doc}\n size=\"base\"\n fullWidth\n showHoverEye\n viewing={viewingDocId === doc.external_id}\n onClick={(e) => {\n e.stopPropagation()\n if (doc.external_id) openDocument(doc.external_id)\n }}\n />\n )\n },\n },\n {\n colId: 'status',\n headerName: 'Status',\n width: 140,\n sortable: true,\n field: 'status',\n cellRenderer: (p: ICellRendererParams<DocResponse>) => {\n const status = p.data?.status\n if (!status) return null\n return (\n <Badge variant={STATUS_VARIANTS[status.toLowerCase()] ?? 'secondary'}>{status}</Badge>\n )\n },\n },\n {\n colId: 'all_tags',\n headerName: 'Labels',\n flex: 1,\n minWidth: 160,\n sortable: false,\n filter: false,\n cellRenderer: (p: ICellRendererParams<DocResponse>) => {\n const doctags = p.data?.doctags ?? []\n if (doctags.length === 0) return null\n return (\n <div className=\"flex flex-wrap items-center gap-1 py-1\">\n {doctags.map((dt) => (\n <TagEntity\n key={dt.tag_ext_id}\n size=\"sm\"\n tag={{\n external_id: dt.tag_ext_id,\n name: tagNameById.get(dt.tag_ext_id) ?? dt.tag_ext_id.slice(0, 8),\n }}\n />\n ))}\n </div>\n )\n },\n },\n {\n colId: 'file_size',\n headerName: 'Size',\n width: 110,\n sortable: true,\n field: 'file_size',\n valueFormatter: (p) => formatBytes(p.value as number | null | undefined),\n },\n {\n colId: 'folder',\n headerName: 'Folder',\n flex: 1,\n minWidth: 140,\n sortable: true,\n field: 'folder',\n valueFormatter: (p) => (p.value as string | null | undefined) || '—',\n },\n ],\n [openDocument, viewingDocId, tagNameById]\n )\n\n const handleGridReady = (e: GridReadyEvent) => {\n gridApiRef.current = e.api\n applySelection()\n }\n\n const handleSelectionChanged = (e: SelectionChangedEvent) => {\n const ids = e.api\n .getSelectedRows()\n .map((r) => (r as DocResponse).external_id)\n .filter((id): id is string => !!id)\n emitSelection(ids)\n }\n\n const handleRowClicked = (e: RowClickedEvent) => {\n const id = (e.data as DocResponse | undefined)?.external_id\n if (id) openDocument(id)\n }\n\n const getRowId = React.useCallback((params: { data: DocResponse }) => params.data.external_id, [])\n\n const autoHeight = height === 'auto'\n const style: React.CSSProperties = autoHeight\n ? {}\n : { height: typeof height === 'number' ? `${height}px` : height, width: '100%' }\n\n if (isLoading) {\n return (\n <div className={className} style={style}>\n <div className=\"flex h-full w-full items-center justify-center p-8 text-sm text-muted-foreground\">\n Loading documents…\n </div>\n </div>\n )\n }\n\n if (rows.length === 0) {\n return (\n <div className={className} style={style}>\n <div className=\"flex h-full w-full items-center justify-center p-8 text-sm text-muted-foreground\">\n No documents\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={style}>\n <AgGridReact<DocResponse>\n columnDefs={columnDefs}\n rowData={rows}\n getRowId={getRowId}\n rowSelection=\"multiple\"\n suppressRowClickSelection\n domLayout={autoHeight ? 'autoHeight' : 'normal'}\n rowHeight={44}\n onGridReady={handleGridReady}\n onSelectionChanged={handleSelectionChanged}\n onRowClicked={handleRowClicked}\n />\n </div>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/ArbiProvider.tsx","../src/chat/styles.ts","../src/useArbi.ts","../src/chat/AuthScreen.tsx","../src/hooks.ts","../src/chat/WorkspaceScreen.tsx","../src/chat/MessageBubble.tsx","../src/chat/ChatView.tsx","../src/chat/ChatWidget.tsx","../src/chat/ArbiChat.tsx","../src/lib/utils.ts","../src/ui/tooltip.tsx","../src/ui/avatar.tsx","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/hover-card.tsx","../src/ui/card.tsx","../src/ui/input.tsx","../src/ai/engine.ts","../src/ai/redline.ts","../src/ai/AiMarkdown.tsx","../src/ai/AiAnswer.tsx","../src/ai/AiActionCard.tsx","../src/ai/ArtifactCanvas.tsx","../src/ai/DocSearch.tsx","../src/ai/DocQaPanel.tsx","../src/icons/colors.ts","../src/icons/PdfIcon.tsx","../src/icons/AudIcon.tsx","../src/icons/ImgIcon.tsx","../src/icons/VidIcon.tsx","../src/icons/EmlIcon.tsx","../src/icons/FileIcon.tsx","../src/entities/EntityPill.tsx","../src/entities/DocumentEntity.tsx","../src/entities/TagEntity.tsx","../src/entities/ProjectEntity.tsx","../src/store.ts","../src/documents/DocumentTable.tsx"],"names":["jsx","useState","jsxs","useCallback","useEffect","useMemo","Fragment","React2","cva","React3","React4","useRef","Sparkles","AlertTriangle","Loader2","Check","Copy","FileText","forwardRef","EntityPill","document","Search","React"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * ArbiProvider — React context that holds an Arbi instance.\n *\n * Usage:\n * <ArbiProvider url=\"https://arbi.mycompany.com\">\n * <App />\n * </ArbiProvider>\n */\n\nimport { createContext, useMemo, type ReactNode } from 'react'\nimport { Arbi, type ArbiOptions } from '@arbidocs/sdk/browser'\n\nexport const ArbiContext = createContext<Arbi | null>(null)\n\nexport interface ArbiProviderProps extends ArbiOptions {\n children: ReactNode\n}\n\nexport function ArbiProvider({ children, ...options }: ArbiProviderProps) {\n const arbi = useMemo(\n () => new Arbi(options),\n // Stable on url + deploymentDomain — re-creating the instance on every render would be wrong\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [options.url, options.deploymentDomain, options.credentials]\n )\n\n return <ArbiContext.Provider value={arbi}>{children}</ArbiContext.Provider>\n}\n","import type { CSSProperties } from 'react'\nimport type { ArbiChatLabels, ArbiChatTheme, ResolvedLabels, ResolvedTheme } from './types'\n\n/**\n * Default theme matching the ARBI frontend color palette.\n *\n * - Primary action color: ARBI cyan (#00adef)\n * - Message bubbles: light gray (user) / light cyan (assistant)\n * - Text/border: standard ARBI grays\n * - Border radius: 8px (ARBI default)\n */\nconst DEFAULT_THEME: ArbiChatTheme = {\n primaryColor: '#00adef',\n backgroundColor: '#ffffff',\n surfaceColor: '#f9fafb',\n textColor: '#111827',\n mutedColor: '#6b7280',\n borderColor: '#e5e7eb',\n userBubbleColor: '#f3f4f6',\n userBubbleTextColor: '#111827',\n assistantBubbleColor: 'rgba(0, 173, 239, 0.08)',\n assistantBubbleTextColor: '#111827',\n borderRadius: '8px',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif\",\n}\n\nconst DEFAULT_LABELS: ResolvedLabels = {\n title: 'Chat',\n email: 'Email',\n password: 'Password',\n loginButton: 'Log in',\n loginButtonLoading: 'Logging in...',\n registerButton: 'Create account',\n sendCodeButton: 'Email me a code',\n haveCodeButton: 'I have an invitation code',\n verificationCode: 'Verification code',\n confirmPassword: 'Confirm password',\n firstName: 'First name',\n lastName: 'Last name',\n switchToRegister: 'Create account',\n switchToLogin: 'Back to login',\n selectWorkspace: 'Select a workspace',\n workspacePlaceholder: 'Choose...',\n continueButton: 'Continue',\n createWorkspace: 'Create new workspace',\n workspaceName: 'Workspace name',\n createButton: 'Create',\n changeWorkspace: 'Change workspace',\n documents: 'Documents',\n sendButton: 'Send',\n placeholder: 'Ask a question...',\n uploadButton: 'Upload',\n uploading: 'Uploading...',\n emptyNoDocs: 'No documents found in this workspace.',\n emptyNoSelection: 'Select at least one document to start chatting.',\n emptyReady: 'Ask a question about your documents.',\n}\n\nexport function getTheme(partial?: Partial<ArbiChatTheme>): ResolvedTheme {\n return { ...DEFAULT_THEME, ...partial }\n}\n\nexport function getLabels(partial?: ArbiChatLabels): ResolvedLabels {\n return { ...DEFAULT_LABELS, ...partial }\n}\n\n// ── Container ────────────────────────────────────────────────────────────────\n\nexport function containerStyle(\n theme: ResolvedTheme,\n width: string | number,\n height: string | number\n): CSSProperties {\n return {\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n display: 'flex',\n flexDirection: 'column',\n fontFamily: theme.fontFamily,\n fontSize: '14px',\n lineHeight: '1.5',\n color: theme.textColor,\n backgroundColor: theme.backgroundColor,\n border: `1px solid ${theme.borderColor}`,\n borderRadius: theme.borderRadius,\n overflow: 'hidden',\n boxSizing: 'border-box',\n }\n}\n\nexport function headerStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n padding: '12px 16px',\n fontWeight: 600,\n fontSize: '15px',\n borderBottom: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n }\n}\n\nexport function bodyStyle(): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n }\n}\n\n// ── Forms ────────────────────────────────────────────────────────────────────\n\nexport function formContainerStyle(): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center',\n padding: '24px 16px',\n gap: '12px',\n }\n}\n\nexport function labelStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '13px',\n fontWeight: 500,\n color: theme.textColor,\n marginBottom: '4px',\n }\n}\n\nexport function inputStyle(theme: ResolvedTheme): CSSProperties {\n return {\n width: '100%',\n padding: '8px 12px',\n fontSize: '14px',\n fontFamily: theme.fontFamily,\n color: theme.textColor,\n backgroundColor: theme.backgroundColor,\n border: `1px solid ${theme.borderColor}`,\n borderRadius: '8px',\n outline: 'none',\n boxSizing: 'border-box',\n }\n}\n\nexport function selectStyle(theme: ResolvedTheme): CSSProperties {\n return {\n ...inputStyle(theme),\n cursor: 'pointer',\n appearance: 'auto' as CSSProperties['appearance'],\n }\n}\n\nexport function buttonStyle(theme: ResolvedTheme, disabled?: boolean): CSSProperties {\n return {\n padding: '8px 16px',\n fontSize: '14px',\n fontWeight: 500,\n fontFamily: theme.fontFamily,\n color: '#ffffff',\n backgroundColor: disabled ? theme.mutedColor : theme.primaryColor,\n border: 'none',\n borderRadius: '8px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'opacity 150ms',\n }\n}\n\nexport function errorStyle(): CSSProperties {\n return {\n fontSize: '13px',\n color: '#ef4444',\n margin: '4px 0 0',\n }\n}\n\n// ── Chat view ────────────────────────────────────────────────────────────────\n\nexport function messagesContainerStyle(): CSSProperties {\n return {\n flex: 1,\n overflowY: 'auto',\n padding: '12px 16px',\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n }\n}\n\nexport function messageBubbleStyle(\n theme: ResolvedTheme,\n role: 'user' | 'assistant'\n): CSSProperties {\n const isUser = role === 'user'\n return {\n maxWidth: '85%',\n padding: '8px 12px',\n borderRadius: '12px',\n fontSize: '14px',\n lineHeight: '1.5',\n wordBreak: 'break-word',\n whiteSpace: 'pre-wrap',\n alignSelf: isUser ? 'flex-end' : 'flex-start',\n backgroundColor: isUser ? theme.userBubbleColor : theme.assistantBubbleColor,\n color: isUser ? theme.userBubbleTextColor : theme.assistantBubbleTextColor,\n }\n}\n\nexport function inputBarStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n gap: '8px',\n padding: '12px 16px',\n borderTop: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n }\n}\n\nexport function chatInputStyle(theme: ResolvedTheme): CSSProperties {\n return {\n ...inputStyle(theme),\n flex: 1,\n }\n}\n\nexport function sendButtonStyle(theme: ResolvedTheme, disabled?: boolean): CSSProperties {\n return {\n ...buttonStyle(theme, disabled),\n padding: '8px 14px',\n flexShrink: 0,\n }\n}\n\n// ── Document selector ────────────────────────────────────────────────────────\n\nexport function docSelectorStyle(theme: ResolvedTheme): CSSProperties {\n return {\n padding: '8px 16px',\n borderBottom: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n }\n}\n\nexport function docToggleStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n fontWeight: 500,\n color: theme.mutedColor,\n cursor: 'pointer',\n background: 'none',\n border: 'none',\n padding: 0,\n fontFamily: theme.fontFamily,\n }\n}\n\nexport function docListStyle(): CSSProperties {\n return {\n marginTop: '6px',\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n maxHeight: '120px',\n overflowY: 'auto',\n }\n}\n\nexport function docItemStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n fontSize: '13px',\n color: theme.textColor,\n cursor: 'pointer',\n textAlign: 'left',\n }\n}\n\nexport function emptyStateStyle(theme: ResolvedTheme): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: theme.mutedColor,\n fontSize: '13px',\n padding: '24px',\n textAlign: 'center',\n }\n}\n\nexport function loadingContainerStyle(): CSSProperties {\n return {\n flex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '8px',\n fontSize: '13px',\n }\n}\n\nexport function brandingStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n padding: '6px 16px',\n fontSize: '11px',\n color: theme.mutedColor,\n borderTop: `1px solid ${theme.borderColor}`,\n flexShrink: 0,\n userSelect: 'none',\n }\n}\n\nexport function brandingLinkStyle(theme: ResolvedTheme): CSSProperties {\n return {\n color: theme.mutedColor,\n fontWeight: 600,\n textDecoration: 'none',\n }\n}\n\n// ── Auth / Workspace creation ─────────────────────────────────────────────────\n\nexport function linkButtonStyle(theme: ResolvedTheme): CSSProperties {\n return {\n background: 'none',\n border: 'none',\n padding: 0,\n fontSize: '13px',\n color: theme.primaryColor,\n cursor: 'pointer',\n fontFamily: theme.fontFamily,\n textDecoration: 'underline',\n }\n}\n\nexport function secondaryButtonStyle(theme: ResolvedTheme, disabled?: boolean): CSSProperties {\n return {\n padding: '4px 10px',\n fontSize: '12px',\n fontWeight: 500,\n fontFamily: theme.fontFamily,\n color: disabled ? theme.mutedColor : theme.primaryColor,\n backgroundColor: 'transparent',\n border: `1px solid ${disabled ? theme.borderColor : theme.primaryColor}`,\n borderRadius: '6px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n transition: 'opacity 150ms',\n whiteSpace: 'nowrap',\n }\n}\n\nexport function fileInputStyle(): CSSProperties {\n return { display: 'none' }\n}\n\nexport function agentStatusStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '12px',\n color: theme.mutedColor,\n fontStyle: 'italic',\n padding: '4px 0',\n alignSelf: 'flex-start',\n }\n}\n","/**\n * Hook to access the Arbi instance from the nearest ArbiProvider.\n */\n\nimport { useContext } from 'react'\nimport type { Arbi } from '@arbidocs/sdk/browser'\nimport { ArbiContext } from './ArbiProvider'\n\nexport function useArbi(): Arbi {\n const arbi = useContext(ArbiContext)\n if (!arbi) {\n throw new Error('useArbi() must be used within an <ArbiProvider>')\n }\n return arbi\n}\n","import { useState, type FormEvent } from 'react'\nimport { useArbi } from '../useArbi'\nimport type { ResolvedLabels, ResolvedTheme } from './types'\nimport {\n formContainerStyle,\n labelStyle,\n inputStyle,\n buttonStyle,\n errorStyle,\n linkButtonStyle,\n} from './styles'\n\ninterface AuthScreenProps {\n theme: ResolvedTheme\n labels: ResolvedLabels\n onLogin: () => void\n}\n\ntype AuthMode = 'login' | 'register'\ntype RegisterStep = 'email' | 'verify'\n\nexport function AuthScreen({ theme, labels, onLogin }: AuthScreenProps) {\n const arbi = useArbi()\n const [mode, setMode] = useState<AuthMode>('login')\n const [step, setStep] = useState<RegisterStep>('email')\n\n const [email, setEmail] = useState('')\n const [password, setPassword] = useState('')\n const [confirmPw, setConfirmPw] = useState('')\n const [code, setCode] = useState('')\n const [firstName, setFirstName] = useState('')\n const [lastName, setLastName] = useState('')\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n\n const resetForm = () => {\n setPassword('')\n setConfirmPw('')\n setCode('')\n setFirstName('')\n setLastName('')\n setError('')\n setStep('email')\n }\n\n const switchMode = (next: AuthMode) => {\n resetForm()\n setMode(next)\n }\n\n // ── Login ─────────────────────────────────────────────────────────────────\n\n const handleLogin = async (e: FormEvent) => {\n e.preventDefault()\n setLoading(true)\n setError('')\n try {\n await arbi.login(email, password)\n onLogin()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Login failed')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Register: skip straight to verify (user already has a code) ────────────\n\n const handleHaveCode = () => {\n setError('')\n setStep('verify')\n }\n\n // ── Register: send code via email then go to verify ───────────────────────\n\n const handleEmailCode = async () => {\n if (!email) return\n setLoading(true)\n setError('')\n try {\n await arbi.requestVerification(email)\n setStep('verify')\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to send verification code')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Register step 2: create account ───────────────────────────────────────\n\n const handleRegister = async (e: FormEvent) => {\n e.preventDefault()\n if (password !== confirmPw) {\n setError('Passwords do not match')\n return\n }\n setLoading(true)\n setError('')\n try {\n await arbi.register({ email, password, verificationCode: code, firstName, lastName })\n await arbi.login(email, password)\n onLogin()\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Registration failed')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Login form ────────────────────────────────────────────────────────────\n\n if (mode === 'login') {\n return (\n <form onSubmit={handleLogin} style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.email}</div>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n autoComplete=\"email\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.password}</div>\n <input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"current-password\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <button type=\"submit\" disabled={loading} style={buttonStyle(theme, loading)}>\n {loading ? labels.loginButtonLoading : labels.loginButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => switchMode('register')}\n style={linkButtonStyle(theme)}\n >\n {labels.switchToRegister}\n </button>\n </div>\n </form>\n )\n }\n\n // ── Register step 1: email + choose code method ────────────────────────────\n\n if (step === 'email') {\n const noEmail = !email.trim()\n return (\n <div style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.email}</div>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n autoComplete=\"email\"\n style={inputStyle(theme)}\n />\n </div>\n <div style={{ display: 'flex', gap: '8px' }}>\n <button\n type=\"button\"\n onClick={handleHaveCode}\n disabled={noEmail}\n style={{ ...buttonStyle(theme, noEmail), flex: 1 }}\n >\n {labels.haveCodeButton}\n </button>\n <button\n type=\"button\"\n onClick={handleEmailCode}\n disabled={noEmail || loading}\n style={{ ...buttonStyle(theme, noEmail || loading), flex: 1 }}\n >\n {loading ? '...' : labels.sendCodeButton}\n </button>\n </div>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button type=\"button\" onClick={() => switchMode('login')} style={linkButtonStyle(theme)}>\n {labels.switchToLogin}\n </button>\n </div>\n </div>\n )\n }\n\n // ── Register step 2: verify + create account ─────────────────────────────\n\n return (\n <form onSubmit={handleRegister} style={formContainerStyle()}>\n <div style={{ display: 'flex', gap: '8px' }}>\n <div style={{ flex: 1 }}>\n <div style={labelStyle(theme)}>{labels.firstName}</div>\n <input\n type=\"text\"\n value={firstName}\n onChange={(e) => setFirstName(e.target.value)}\n autoComplete=\"given-name\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div style={{ flex: 1 }}>\n <div style={labelStyle(theme)}>{labels.lastName}</div>\n <input\n type=\"text\"\n value={lastName}\n onChange={(e) => setLastName(e.target.value)}\n autoComplete=\"family-name\"\n required\n style={inputStyle(theme)}\n />\n </div>\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.verificationCode}</div>\n <input\n type=\"text\"\n value={code}\n onChange={(e) => setCode(e.target.value)}\n autoComplete=\"one-time-code\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.password}</div>\n <input\n type=\"password\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n autoComplete=\"new-password\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <div>\n <div style={labelStyle(theme)}>{labels.confirmPassword}</div>\n <input\n type=\"password\"\n value={confirmPw}\n onChange={(e) => setConfirmPw(e.target.value)}\n autoComplete=\"new-password\"\n required\n style={inputStyle(theme)}\n />\n </div>\n <button type=\"submit\" disabled={loading} style={buttonStyle(theme, loading)}>\n {loading ? '...' : labels.registerButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button type=\"button\" onClick={() => switchMode('login')} style={linkButtonStyle(theme)}>\n {labels.switchToLogin}\n </button>\n </div>\n </form>\n )\n}\n","/**\n * React Query hooks that use the Arbi instance from context.\n */\n\nimport { useQuery, useMutation } from '@tanstack/react-query'\nimport type {\n SSEStreamResult,\n SSEStreamStartData,\n AgentStepEvent,\n ArtifactEvent,\n} from '@arbidocs/sdk/browser'\nimport { useArbi } from './useArbi'\n\n// ── Query keys ──────────────────────────────────────────────────────────────\n\nexport const arbiQueryKeys = {\n workspaces: () => ['arbi', 'workspaces'] as const,\n documents: (workspaceId: string) => ['arbi', 'documents', workspaceId] as const,\n conversations: (workspaceId: string) => ['arbi', 'conversations', workspaceId] as const,\n tags: (workspaceId: string) => ['arbi', 'tags', workspaceId] as const,\n agents: () => ['arbi', 'agents'] as const,\n sessions: () => ['arbi', 'sessions'] as const,\n health: () => ['arbi', 'health'] as const,\n tasks: () => ['arbi', 'tasks'] as const,\n memories: (workspaceId: string) => ['arbi', 'memories', workspaceId] as const,\n configs: () => ['arbi', 'configs'] as const,\n}\n\n// ── Hooks ───────────────────────────────────────────────────────────────────\n\n/** List the logged-in user's workspaces. */\nexport function useWorkspaces(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.workspaces(),\n queryFn: () => arbi.workspaces.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n/** List documents in a workspace. */\nexport function useDocuments(workspaceId: string | undefined, options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.documents(workspaceId ?? ''),\n queryFn: () => arbi.documents.list(),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n/** List conversations in a workspace. */\nexport function useConversations(workspaceId: string | undefined, options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.conversations(workspaceId ?? ''),\n queryFn: () => arbi.conversations.list(),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n/** List tags in a workspace. */\nexport function useTags(workspaceId: string | undefined, options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.tags(workspaceId ?? ''),\n queryFn: () => arbi.tags.list(),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n/** Send a streaming query to the RAG assistant. Returns a mutation. */\nexport function useAssistantQuery() {\n const arbi = useArbi()\n\n return useMutation<\n SSEStreamResult,\n Error,\n {\n question: string\n docIds: string[]\n previousResponseId?: string | null\n model?: string\n onToken?: (content: string) => void\n onStreamStart?: (data: SSEStreamStartData) => void\n onAgentStep?: (data: AgentStepEvent) => void\n onArtifact?: (data: ArtifactEvent) => void\n onError?: (message: string) => void\n onComplete?: () => void\n }\n >({\n mutationFn: ({ question, ...options }) => arbi.assistant.query(question, options),\n })\n}\n\n/** List agents owned by the current user. */\nexport function useAgents(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.agents(),\n queryFn: () => arbi.agents.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n/** Delete agents. Returns a mutation. */\nexport function useDeleteAgents() {\n const arbi = useArbi()\n return useMutation<unknown, Error, { agentExtIds: string[] }>({\n mutationFn: ({ agentExtIds }) => arbi.agents.delete(agentExtIds),\n })\n}\n\n/** List active sessions. */\nexport function useSessions(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.sessions(),\n queryFn: () => arbi.sessions.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n/** Authorize a delegated session (generates claim code). Returns a mutation. */\n\n/** Check backend health. */\nexport function useHealth(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.health(),\n queryFn: () => arbi.health.check(),\n enabled: options?.enabled,\n })\n}\n\n// ── Scheduled tasks ──────────────────────────────────────────────────────────\n\n/** List the caller's scheduled agent tasks. */\nexport function useTasks(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.tasks(),\n queryFn: () => arbi.tasks.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n\n// ── Workspace memory ─────────────────────────────────────────────────────────\n\n/** List the open workspace's memory notes. */\nexport function useMemories(\n workspaceId: string | undefined,\n options?: { enabled?: boolean; pinnedOnly?: boolean }\n) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.memories(workspaceId ?? ''),\n queryFn: () => arbi.memory.list({ pinnedOnly: options?.pinnedOnly }),\n enabled: (options?.enabled ?? true) && !!workspaceId && arbi.hasWorkspace,\n })\n}\n\n// ── Behaviour-template configs ───────────────────────────────────────────────\n\n/** List the caller's saved agent configurations (behaviour templates). */\nexport function useConfigs(options?: { enabled?: boolean }) {\n const arbi = useArbi()\n return useQuery({\n queryKey: arbiQueryKeys.configs(),\n queryFn: () => arbi.agentConfig.list(),\n enabled: options?.enabled ?? arbi.isLoggedIn,\n })\n}\n","import { useState } from 'react'\nimport { useArbi } from '../useArbi'\nimport { useWorkspaces } from '../hooks'\nimport type { ResolvedLabels, ResolvedTheme } from './types'\nimport {\n formContainerStyle,\n labelStyle,\n inputStyle,\n selectStyle,\n buttonStyle,\n errorStyle,\n loadingContainerStyle,\n linkButtonStyle,\n} from './styles'\n\ninterface WorkspaceScreenProps {\n theme: ResolvedTheme\n labels: ResolvedLabels\n onSelect: (workspaceId: string) => void\n}\n\ntype ScreenMode = 'select' | 'create'\n\nexport function WorkspaceScreen({ theme, labels, onSelect }: WorkspaceScreenProps) {\n const arbi = useArbi()\n const { data: workspaces, isLoading } = useWorkspaces()\n\n const [mode, setMode] = useState<ScreenMode>('select')\n const [selected, setSelected] = useState('')\n const [newName, setNewName] = useState('')\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState('')\n\n if (isLoading) {\n return <div style={loadingContainerStyle()}>Loading workspaces...</div>\n }\n\n // ── Select existing workspace ─────────────────────────────────────────────\n\n const handleConfirm = async () => {\n if (!selected) return\n setLoading(true)\n setError('')\n try {\n await arbi.selectWorkspace(selected)\n onSelect(selected)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to select workspace')\n } finally {\n setLoading(false)\n }\n }\n\n // ── Create new workspace ──────────────────────────────────────────────────\n\n const handleCreate = async () => {\n const name = newName.trim()\n if (!name) return\n setLoading(true)\n setError('')\n try {\n // Workspaces now belong to a project — the SDK call requires a\n // ``projectExtId``. We don't surface project selection in this\n // minimal embedded picker, so default to the user's first project\n // (typically the auto-provisioned personal one). If there are\n // none, fail loudly rather than silently picking nothing — a\n // brand-new account without a project is a setup-flow bug, not\n // something this widget should paper over.\n const projects = await arbi.projects.list()\n const projectExtId = projects[0]?.external_id\n if (!projectExtId) {\n throw new Error('No project available; create one before adding a workspace')\n }\n const ws = await arbi.workspaces.create(name, projectExtId)\n await arbi.selectWorkspace(ws.external_id)\n onSelect(ws.external_id)\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create workspace')\n } finally {\n setLoading(false)\n }\n }\n\n if (mode === 'create') {\n return (\n <div style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.workspaceName}</div>\n <input\n type=\"text\"\n value={newName}\n onChange={(e) => setNewName(e.target.value)}\n disabled={loading}\n style={inputStyle(theme)}\n />\n </div>\n <button\n type=\"button\"\n onClick={handleCreate}\n disabled={!newName.trim() || loading}\n style={buttonStyle(theme, !newName.trim() || loading)}\n >\n {loading ? '...' : labels.createButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => {\n setError('')\n setMode('select')\n }}\n style={linkButtonStyle(theme)}\n >\n or select existing\n </button>\n </div>\n </div>\n )\n }\n\n return (\n <div style={formContainerStyle()}>\n <div>\n <div style={labelStyle(theme)}>{labels.selectWorkspace}</div>\n <select\n value={selected}\n onChange={(e) => setSelected(e.target.value)}\n disabled={loading}\n style={selectStyle(theme)}\n >\n <option value=\"\" disabled>\n {labels.workspacePlaceholder}\n </option>\n {workspaces?.map((ws) => (\n <option key={ws.external_id} value={ws.external_id}>\n {ws.name}\n </option>\n ))}\n </select>\n </div>\n <button\n type=\"button\"\n onClick={handleConfirm}\n disabled={!selected || loading}\n style={buttonStyle(theme, !selected || loading)}\n >\n {loading ? 'Connecting...' : labels.continueButton}\n </button>\n {error && <div style={errorStyle()}>{error}</div>}\n <div style={{ textAlign: 'center' }}>\n <button\n type=\"button\"\n onClick={() => {\n setError('')\n setMode('create')\n }}\n style={linkButtonStyle(theme)}\n >\n {labels.createWorkspace}\n </button>\n </div>\n </div>\n )\n}\n","import { useState, type ReactNode, type CSSProperties } from 'react'\nimport { resolveCitations, summarizeCitations } from '@arbidocs/sdk/browser'\nimport type { ChatMessage, ResolvedTheme } from './types'\nimport { messageBubbleStyle } from './styles'\n\ninterface MessageBubbleProps {\n message: ChatMessage\n theme: ResolvedTheme\n}\n\nconst CITE_RE = /\\[([^\\]]+)\\]\\(#cite-(\\d+)\\)/g\n\n/** Parse text with `[statement](#cite-N)` markers into React nodes. */\nfunction renderWithCitations(\n text: string,\n theme: ResolvedTheme,\n onCiteClick: (num: string) => void\n): ReactNode[] {\n const nodes: ReactNode[] = []\n let lastIndex = 0\n let match: RegExpExecArray | null\n\n while ((match = CITE_RE.exec(text)) !== null) {\n // Text before the citation\n if (match.index > lastIndex) {\n nodes.push(text.slice(lastIndex, match.index))\n }\n const statement = match[1]\n const citeNum = match[2]\n nodes.push(\n <span key={`cite-${match.index}`}>\n {statement}\n <sup\n onClick={(e) => {\n e.stopPropagation()\n onCiteClick(citeNum)\n }}\n style={citeSupStyle(theme)}\n title={`Citation ${citeNum}`}\n >\n {citeNum}\n </sup>\n </span>\n )\n lastIndex = match.index + match[0].length\n }\n\n // Remaining text\n if (lastIndex < text.length) {\n nodes.push(text.slice(lastIndex))\n }\n\n return nodes.length > 0 ? nodes : [text]\n}\n\nexport function MessageBubble({ message, theme }: MessageBubbleProps) {\n const [expandedCite, setExpandedCite] = useState<string | null>(null)\n\n const hasCitations =\n message.role === 'assistant' && message.metadata && CITE_RE.test(message.text)\n\n // Reset regex lastIndex after test\n CITE_RE.lastIndex = 0\n\n const resolved = hasCitations\n ? resolveCitations(message.metadata as Parameters<typeof resolveCitations>[0])\n : []\n const summaries = hasCitations ? summarizeCitations(resolved) : []\n const summaryMap = new Map(summaries.map((s) => [s.citationNum, s]))\n\n const handleCiteClick = (num: string) => {\n setExpandedCite((prev) => (prev === num ? null : num))\n }\n\n const activeSummary = expandedCite ? summaryMap.get(expandedCite) : null\n const activeResolved = expandedCite ? resolved.find((r) => r.citationNum === expandedCite) : null\n\n return (\n <div>\n <div style={messageBubbleStyle(theme, message.role)}>\n {hasCitations ? renderWithCitations(message.text, theme, handleCiteClick) : message.text}\n </div>\n {activeSummary && activeResolved && (\n <div style={citePanelStyle(theme)}>\n <div style={citePanelHeaderStyle(theme)}>\n <strong>[{activeSummary.citationNum}]</strong> {activeSummary.docTitle}\n {activeSummary.pageNumber != null && (\n <span style={{ color: theme.mutedColor }}> p.{activeSummary.pageNumber}</span>\n )}\n </div>\n {activeResolved.chunks.map((chunk, i) => (\n <div key={i} style={citeChunkStyle(theme)}>\n {chunk.content}\n </div>\n ))}\n </div>\n )}\n </div>\n )\n}\n\n// ── Inline styles ───────────────────────────────────────────────────────────\n\nfunction citeSupStyle(theme: ResolvedTheme): CSSProperties {\n return {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n fontWeight: 600,\n color: theme.primaryColor,\n cursor: 'pointer',\n marginLeft: '1px',\n minWidth: '14px',\n lineHeight: 1,\n }\n}\n\nfunction citePanelStyle(theme: ResolvedTheme): CSSProperties {\n return {\n marginTop: '4px',\n padding: '8px 10px',\n fontSize: '12px',\n lineHeight: '1.5',\n backgroundColor: theme.surfaceColor,\n border: `1px solid ${theme.borderColor}`,\n borderRadius: '8px',\n maxWidth: '85%',\n }\n}\n\nfunction citePanelHeaderStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '12px',\n fontWeight: 500,\n color: theme.textColor,\n marginBottom: '4px',\n }\n}\n\nfunction citeChunkStyle(theme: ResolvedTheme): CSSProperties {\n return {\n fontSize: '11px',\n color: theme.mutedColor,\n borderLeft: `2px solid ${theme.borderColor}`,\n paddingLeft: '8px',\n marginTop: '4px',\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n }\n}\n","import { useState, useRef, useEffect, useCallback, type FormEvent, type ChangeEvent } from 'react'\nimport { useArbi } from '../useArbi'\nimport { useDocuments, useAssistantQuery } from '../hooks'\nimport type { ChatMessage, ResolvedLabels, ResolvedTheme } from './types'\nimport { MessageBubble } from './MessageBubble'\nimport {\n messagesContainerStyle,\n inputBarStyle,\n chatInputStyle,\n sendButtonStyle,\n docSelectorStyle,\n docToggleStyle,\n docListStyle,\n docItemStyle,\n emptyStateStyle,\n secondaryButtonStyle,\n fileInputStyle,\n agentStatusStyle,\n} from './styles'\n\ninterface ChatViewProps {\n workspaceId: string\n theme: ResolvedTheme\n labels: ResolvedLabels\n}\n\nexport function ChatView({ workspaceId, theme, labels }: ChatViewProps) {\n const arbi = useArbi()\n const { data: docs, refetch: refetchDocs } = useDocuments(workspaceId)\n const mutation = useAssistantQuery()\n\n const [messages, setMessages] = useState<ChatMessage[]>([])\n const [input, setInput] = useState('')\n const [streaming, setStreaming] = useState('')\n const [agentStatus, setAgentStatus] = useState('')\n const [selectedDocs, setSelectedDocs] = useState<string[]>([])\n const [docsExpanded, setDocsExpanded] = useState(false)\n const [previousResponseId, setPreviousResponseId] = useState<string | null>(null)\n const [uploading, setUploading] = useState(false)\n\n const messagesEndRef = useRef<HTMLDivElement>(null)\n const fileInputRef = useRef<HTMLInputElement>(null)\n\n // Auto-select all docs when they first load\n useEffect(() => {\n if (docs && docs.length > 0 && selectedDocs.length === 0) {\n setSelectedDocs(docs.map((d) => d.external_id))\n }\n }, [docs, selectedDocs.length])\n\n // Auto-scroll to bottom\n useEffect(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'smooth' })\n }, [messages, streaming, agentStatus])\n\n const toggleDoc = (docId: string) => {\n setSelectedDocs((prev) =>\n prev.includes(docId) ? prev.filter((id) => id !== docId) : [...prev, docId]\n )\n }\n\n const handleUpload = useCallback(\n async (e: ChangeEvent<HTMLInputElement>) => {\n const files = e.target.files\n if (!files || files.length === 0) return\n setUploading(true)\n try {\n const newIds: string[] = []\n for (const file of Array.from(files)) {\n const result = await arbi.documents.uploadFile(file, file.name)\n // ``doc_ext_ids`` is optional on ``UploadResult`` — the server\n // omits it when the upload returned only skipped/duplicate\n // entries. Nothing to push in that case.\n if (result.doc_ext_ids) newIds.push(...result.doc_ext_ids)\n }\n await refetchDocs()\n setSelectedDocs((prev) => [...prev, ...newIds])\n } catch {\n // Upload errors are silently ignored — the user sees the doc list unchanged\n } finally {\n setUploading(false)\n // Reset file input so the same file can be re-selected\n if (fileInputRef.current) fileInputRef.current.value = ''\n }\n },\n [arbi, refetchDocs]\n )\n\n const handleSubmit = useCallback(\n (e: FormEvent) => {\n e.preventDefault()\n const question = input.trim()\n if (!question || selectedDocs.length === 0 || mutation.isPending) return\n\n setMessages((prev) => [...prev, { role: 'user', text: question }])\n setInput('')\n setStreaming('')\n setAgentStatus('')\n\n mutation.mutate(\n {\n question,\n docIds: selectedDocs,\n previousResponseId,\n onToken: (t) => setStreaming((prev) => prev + t),\n onAgentStep: (step) => {\n if (step.focus) setAgentStatus(step.focus)\n },\n },\n {\n onSuccess: (result) => {\n setStreaming('')\n setAgentStatus('')\n setMessages((prev) => [\n ...prev,\n { role: 'assistant', text: result.text, metadata: result.metadata },\n ])\n setPreviousResponseId(result.assistantMessageExtId)\n },\n onError: (err) => {\n setStreaming('')\n setAgentStatus('')\n setMessages((prev) => [...prev, { role: 'assistant', text: `Error: ${err.message}` }])\n },\n }\n )\n },\n [input, selectedDocs, previousResponseId, mutation]\n )\n\n const noDocs = !docs || docs.length === 0\n const noDocsSelected = selectedDocs.length === 0\n\n return (\n <>\n {/* Hidden file input (shared across upload buttons) */}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept=\".pdf,.txt,.md,.html,.doc,.docx,.rtf,.ppt,.pptx,.xls,.xlsx\"\n onChange={handleUpload}\n style={fileInputStyle()}\n />\n\n {/* Document selector — always visible so users can upload */}\n <div style={docSelectorStyle(theme)}>\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <button\n type=\"button\"\n onClick={() => setDocsExpanded((prev) => !prev)}\n style={docToggleStyle(theme)}\n >\n <span style={{ fontSize: '10px' }}>{docsExpanded ? '\\u25BC' : '\\u25B6'}</span>\n {labels.documents} ({selectedDocs.length}/{docs?.length ?? 0} in chat)\n </button>\n <button\n type=\"button\"\n onClick={() => fileInputRef.current?.click()}\n disabled={uploading}\n style={secondaryButtonStyle(theme, uploading)}\n >\n {uploading ? labels.uploading : labels.uploadButton}\n </button>\n </div>\n {docsExpanded && docs && docs.length > 0 && (\n <div style={docListStyle()}>\n {docs.map((doc) => (\n <label key={doc.external_id} style={docItemStyle(theme)}>\n <input\n type=\"checkbox\"\n checked={selectedDocs.includes(doc.external_id)}\n onChange={() => toggleDoc(doc.external_id)}\n />\n {doc.file_name}\n </label>\n ))}\n </div>\n )}\n </div>\n\n {/* Messages */}\n <div style={messagesContainerStyle()}>\n {messages.length === 0 && !streaming && (\n <div style={emptyStateStyle(theme)}>\n {noDocs\n ? labels.emptyNoDocs\n : noDocsSelected\n ? labels.emptyNoSelection\n : labels.emptyReady}\n </div>\n )}\n {messages.map((msg, i) => (\n <MessageBubble key={i} message={msg} theme={theme} />\n ))}\n {agentStatus && !streaming && <div style={agentStatusStyle(theme)}>{agentStatus}...</div>}\n {streaming && (\n <MessageBubble message={{ role: 'assistant', text: streaming }} theme={theme} />\n )}\n <div ref={messagesEndRef} />\n </div>\n\n {/* Input bar */}\n <form onSubmit={handleSubmit} style={inputBarStyle(theme)}>\n <input\n type=\"text\"\n value={input}\n onChange={(e) => setInput(e.target.value)}\n placeholder={noDocs || noDocsSelected ? 'Select documents first...' : labels.placeholder}\n disabled={noDocs || noDocsSelected || mutation.isPending}\n style={chatInputStyle(theme)}\n />\n <button\n type=\"submit\"\n disabled={!input.trim() || noDocsSelected || mutation.isPending}\n style={sendButtonStyle(theme, !input.trim() || noDocsSelected || mutation.isPending)}\n >\n {mutation.isPending ? '...' : labels.sendButton}\n </button>\n </form>\n </>\n )\n}\n","import { useState, useCallback, useEffect } from 'react'\nimport { useArbi } from '../useArbi'\nimport type { ResolvedLabels, ResolvedTheme, WidgetScreen } from './types'\nimport { AuthScreen } from './AuthScreen'\nimport { WorkspaceScreen } from './WorkspaceScreen'\nimport { ChatView } from './ChatView'\nimport {\n containerStyle,\n headerStyle,\n bodyStyle,\n brandingStyle,\n brandingLinkStyle,\n linkButtonStyle,\n} from './styles'\n\ninterface ChatWidgetProps {\n theme: ResolvedTheme\n labels: ResolvedLabels\n initialWorkspaceId?: string\n width: string | number\n height: string | number\n}\n\nexport function ChatWidget({ theme, labels, initialWorkspaceId, width, height }: ChatWidgetProps) {\n const arbi = useArbi()\n const [screen, setScreen] = useState<WidgetScreen>('auth')\n const [workspaceId, setWorkspaceId] = useState<string | undefined>(initialWorkspaceId)\n\n // After authentication (or when resuming an ambient session), open the\n // provided workspace and jump to chat — or fall back to the picker.\n const resolveWorkspace = useCallback(async () => {\n if (initialWorkspaceId) {\n try {\n await arbi.selectWorkspace(initialWorkspaceId)\n setScreen('chat')\n return\n } catch {\n // Fall back to workspace selection if the provided ID fails\n setScreen('workspace')\n return\n }\n }\n setScreen('workspace')\n }, [arbi, initialWorkspaceId])\n\n const handleLogin = useCallback(() => resolveWorkspace(), [resolveWorkspace])\n\n // When embedded in a host app that already authenticated the ambient\n // ArbiProvider (e.g. <ArbiChatPanel> inside a signed-in dashboard), skip the\n // login screen and resume that session — no second login required.\n useEffect(() => {\n if (arbi.isLoggedIn) void resolveWorkspace()\n }, [arbi, resolveWorkspace])\n\n const handleWorkspaceSelect = useCallback((id: string) => {\n setWorkspaceId(id)\n setScreen('chat')\n }, [])\n\n const handleChangeWorkspace = useCallback(() => {\n setScreen('workspace')\n }, [])\n\n return (\n <div style={containerStyle(theme, width, height)}>\n <div style={{ ...headerStyle(theme), justifyContent: 'space-between' }}>\n <span>{labels.title}</span>\n {screen === 'chat' && !initialWorkspaceId && (\n <button type=\"button\" onClick={handleChangeWorkspace} style={linkButtonStyle(theme)}>\n {labels.changeWorkspace}\n </button>\n )}\n </div>\n\n <div style={bodyStyle()}>\n {screen === 'auth' && <AuthScreen theme={theme} labels={labels} onLogin={handleLogin} />}\n {screen === 'workspace' && (\n <WorkspaceScreen theme={theme} labels={labels} onSelect={handleWorkspaceSelect} />\n )}\n {screen === 'chat' && workspaceId && (\n <ChatView workspaceId={workspaceId} theme={theme} labels={labels} />\n )}\n </div>\n\n <div style={brandingStyle(theme)}>\n Powered by{' '}\n <a\n href=\"https://www.arbidocs.com\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={brandingLinkStyle(theme)}\n >\n ARBI\n </a>\n </div>\n </div>\n )\n}\n","import { useMemo } from 'react'\nimport { QueryClient, QueryClientProvider } from '@tanstack/react-query'\nimport { ArbiProvider } from '../ArbiProvider'\nimport type { ArbiChatLabels, ArbiChatProps, ArbiChatTheme } from './types'\nimport { getLabels, getTheme } from './styles'\nimport { ChatWidget } from './ChatWidget'\n\nexport type { ArbiChatProps, ArbiChatTheme, ArbiChatLabels }\n\n/** Props for {@link ArbiChatPanel} — the provider-less embeddable panel. */\nexport interface ArbiChatPanelProps {\n /** Skip workspace selection — go straight to chat */\n workspaceId?: string\n /** Customize colors and appearance */\n theme?: Partial<ArbiChatTheme>\n /** Customize text labels */\n labels?: ArbiChatLabels\n /** Widget width (default: '100%') */\n width?: string | number\n /** Widget height (default: '100%') */\n height?: string | number\n}\n\n/**\n * The ARBI chat panel **without** its own providers.\n *\n * Drop it inside an app that already renders `<ArbiProvider>` and a\n * `<QueryClientProvider>` to reuse the host's authenticated session — no second\n * login. When the ambient session is already signed in, the panel skips the\n * login screen and opens straight into chat.\n *\n * ```tsx\n * // inside your authenticated app tree\n * <ArbiChatPanel workspaceId=\"wrk-…\" theme={myTheme} />\n * ```\n *\n * For a fully self-contained widget (its own providers + login), use {@link ArbiChat}.\n */\nexport function ArbiChatPanel({\n workspaceId,\n theme: themeOverrides,\n labels: labelOverrides,\n width = '100%',\n height = '100%',\n}: ArbiChatPanelProps) {\n const theme = useMemo(() => getTheme(themeOverrides), [themeOverrides])\n const labels = useMemo(() => getLabels(labelOverrides), [labelOverrides])\n\n return (\n <ChatWidget\n theme={theme}\n labels={labels}\n initialWorkspaceId={workspaceId}\n width={width}\n height={height}\n />\n )\n}\n\n/**\n * Self-contained ARBI chat widget.\n *\n * Wraps its own QueryClientProvider and ArbiProvider so it works\n * anywhere — no setup required from the host app.\n *\n * ```tsx\n * import { ArbiChat } from '@arbidocs/react'\n *\n * <ArbiChat url=\"https://www.arbidocs.com\" />\n * ```\n */\nexport function ArbiChat({\n url,\n workspaceId,\n theme: themeOverrides,\n labels: labelOverrides,\n width = '400px',\n height = '600px',\n}: ArbiChatProps) {\n const queryClient = useMemo(\n () =>\n new QueryClient({\n defaultOptions: {\n queries: { retry: 1, refetchOnWindowFocus: false },\n mutations: { retry: false },\n },\n }),\n []\n )\n\n return (\n <QueryClientProvider client={queryClient}>\n <ArbiProvider url={url}>\n <ArbiChatPanel\n workspaceId={workspaceId}\n theme={themeOverrides}\n labels={labelOverrides}\n width={width}\n height={height}\n />\n </ArbiProvider>\n </QueryClientProvider>\n )\n}\n","/**\n * Core utility: `cn()` — merge class names with Tailwind-aware conflict\n * resolution (clsx + tailwind-merge). Copied faithfully from the ARBI app so the\n * promoted \"lego\" components style identically in a consumer app.\n */\n\nimport { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cn } from '../lib/utils'\n\n/**\n * Minimal, dependency-free tooltip — a drop-in API replacement for a Radix\n * wrapper (same exports/props: Tooltip, TooltipTrigger, TooltipContent,\n * TooltipProvider). Promoted verbatim from the ARBI app.\n *\n * It attaches the trigger via a STABLE `useCallback` ref (never setStates,\n * identity never changes), so React 19 never detach/attach-thrashes.\n */\n\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n setTrigger: (el: HTMLElement | null) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\ninterface TooltipProviderProps {\n children?: React.ReactNode\n delayDuration?: number\n skipDelayDuration?: number\n disableHoverableContent?: boolean\n}\nconst TooltipProvider = ({ children }: TooltipProviderProps) => <>{children}</>\n\ninterface TooltipProps {\n children: React.ReactNode\n delayDuration?: number\n}\n\nfunction Tooltip({ children, delayDuration = 300 }: TooltipProps) {\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const contentId = React.useId()\n\n const clearTimer = () => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = null\n }\n }\n\n const show = React.useCallback(() => {\n clearTimer()\n timer.current = setTimeout(() => setOpen(true), delayDuration)\n }, [delayDuration])\n\n const hide = React.useCallback(() => {\n clearTimer()\n setOpen(false)\n }, [])\n\n const setTrigger = React.useCallback((el: HTMLElement | null) => {\n triggerRef.current = el\n }, [])\n\n React.useEffect(() => () => clearTimer(), [])\n\n const value = React.useMemo<TooltipContextValue>(\n () => ({ open, show, hide, setTrigger, triggerRef, contentId }),\n [open, show, hide, setTrigger, contentId]\n )\n\n return <TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>\n}\n\ninterface TooltipTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nfunction TooltipTrigger({ asChild, children, ...props }: TooltipTriggerProps) {\n const ctx = React.useContext(TooltipContext)\n if (!ctx) return <>{children}</>\n\n const triggerHandlers = {\n onPointerEnter: (e: React.PointerEvent) => {\n ;(props.onPointerEnter as ((e: React.PointerEvent) => void) | undefined)?.(e)\n ctx.show()\n },\n onPointerLeave: (e: React.PointerEvent) => {\n ;(props.onPointerLeave as ((e: React.PointerEvent) => void) | undefined)?.(e)\n ctx.hide()\n },\n onFocus: (e: React.FocusEvent) => {\n ;(props.onFocus as ((e: React.FocusEvent) => void) | undefined)?.(e)\n ctx.show()\n },\n onBlur: (e: React.FocusEvent) => {\n ;(props.onBlur as ((e: React.FocusEvent) => void) | undefined)?.(e)\n ctx.hide()\n },\n 'aria-describedby': ctx.open ? ctx.contentId : undefined,\n 'data-state': ctx.open ? 'open' : 'closed',\n }\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<Record<string, unknown>>\n return React.cloneElement(child, {\n ...props,\n ...triggerHandlers,\n ref: ctx.setTrigger,\n })\n }\n\n return (\n <button\n type=\"button\"\n {...props}\n {...triggerHandlers}\n ref={ctx.setTrigger as unknown as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n}\n\ninterface TooltipContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: Side\n sideOffset?: number\n}\n\nconst TRANSFORM_BY_SIDE: Record<Side, string> = {\n top: 'translate(-50%, -100%)',\n bottom: 'translate(-50%, 0)',\n left: 'translate(-100%, -50%)',\n right: 'translate(0, -50%)',\n}\n\nconst TooltipContent = React.forwardRef<HTMLDivElement, TooltipContentProps>(\n ({ className, side = 'top', sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const [coords, setCoords] = React.useState<{\n top: number\n left: number\n transform: string\n } | null>(null)\n\n React.useLayoutEffect(() => {\n if (!ctx?.open || !ctx.triggerRef.current) {\n setCoords(null)\n return\n }\n const r = ctx.triggerRef.current.getBoundingClientRect()\n const c = innerRef.current?.getBoundingClientRect()\n const ch = c?.height ?? 0\n const cw = c?.width ?? 0\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n let s: Side = side\n if (s === 'top' && r.top - sideOffset - ch < 0) s = 'bottom'\n else if (s === 'bottom' && r.bottom + sideOffset + ch > vh) s = 'top'\n else if (s === 'left' && r.left - sideOffset - cw < 0) s = 'right'\n else if (s === 'right' && r.right + sideOffset + cw > vw) s = 'left'\n\n setCoords({\n top:\n s === 'top'\n ? r.top - sideOffset\n : s === 'bottom'\n ? r.bottom + sideOffset\n : r.top + r.height / 2,\n left:\n s === 'left'\n ? r.left - sideOffset\n : s === 'right'\n ? r.right + sideOffset\n : r.left + r.width / 2,\n transform: TRANSFORM_BY_SIDE[s],\n })\n }, [ctx?.open, side, sideOffset, ctx?.triggerRef])\n\n if (!ctx?.open) return null\n\n const setRefs = (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n\n return createPortal(\n <div\n ref={setRefs}\n id={ctx.contentId}\n role=\"tooltip\"\n className={cn('tooltip-content pointer-events-none', className)}\n style={{\n position: 'fixed',\n top: coords?.top ?? -9999,\n left: coords?.left ?? -9999,\n transform: coords?.transform ?? TRANSFORM_BY_SIDE[side],\n opacity: coords ? undefined : 0,\n zIndex: 9999,\n ...style,\n }}\n {...props}\n />,\n document.body\n )\n }\n)\nTooltipContent.displayName = 'TooltipContent'\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","import * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../lib/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full', className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-sm font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n accent: 'border-transparent bg-ai-accent-soft text-ai-accent',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return <div className={cn(badgeVariants({ variant }), className)} {...props} />\n}\n\nexport { Badge, badgeVariants }\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n accent: 'bg-ai-accent text-ai-accent-foreground shadow hover:bg-ai-accent/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\nimport * as HoverCardPrimitive from '@radix-ui/react-hover-card'\n\nimport { cn } from '../lib/utils'\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]',\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\n\nfunction Card({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card\"\n className={cn(\n 'rounded-xl border border-border bg-card text-card-foreground shadow-sm',\n className\n )}\n {...props}\n />\n )\n}\n\nfunction CardHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn('flex flex-col gap-1.5 p-6', className)}\n {...props}\n />\n )\n}\n\nfunction CardTitle({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-title\"\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n )\n}\n\nfunction CardDescription({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n}\n\nfunction CardContent({ className, ...props }: React.ComponentProps<'div'>) {\n return <div data-slot=\"card-content\" className={cn('p-6 pt-0', className)} {...props} />\n}\n\nfunction CardFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n )\n}\n\nexport { Card, CardHeader, CardTitle, CardDescription, CardContent, CardFooter }\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\n\nfunction Input({ className, type, ...props }: React.ComponentProps<'input'>) {\n return (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-card px-3 py-1 text-sm shadow-sm transition-colors',\n 'placeholder:text-muted-foreground/70',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/50 focus-visible:border-ring/60',\n 'disabled:cursor-not-allowed disabled:opacity-50 file:border-0 file:bg-transparent file:text-sm file:font-medium',\n className\n )}\n {...props}\n />\n )\n}\n\nexport { Input }\n","/**\n * The AI engine — domain-agnostic hooks for building an AI-native app on ARBI.\n *\n * `useAiTask` runs a streaming, cited agentic query (tokens, agent steps and\n * artifacts accumulate live, with follow-up threading). `useWorkspaceDocs`\n * resolves a workspace's document ids to ground on, and `useSemanticSearch`\n * returns retrieval-only cited passages. These wrap the low-level SDK hooks so a\n * vertical app never re-implements the streaming/accumulation plumbing.\n */\n\nimport { useCallback, useMemo, useRef, useState } from 'react'\nimport type { SSEStreamResult, ArtifactEvent } from '@arbidocs/sdk/browser'\nimport { useDocuments, useAssistantQuery } from '../hooks'\nimport { useArbi } from '../useArbi'\n\nexport type { ArtifactEvent }\n\n/**\n * Resolve a workspace's document set and their external ids. Pass the active\n * `workspaceId`; the kit stays agnostic about how selection is managed.\n */\nexport function useWorkspaceDocs(workspaceId?: string) {\n const { data: docs = [], isLoading, isError } = useDocuments(workspaceId)\n\n const docIds = useMemo(\n () =>\n docs.map((d: { external_id?: string }) => d.external_id).filter((id): id is string => !!id),\n [docs]\n )\n\n return { wsId: workspaceId, docs, docIds, isLoading, isError, ready: docIds.length > 0 }\n}\n\nexport type AiTaskStatus = 'idle' | 'running' | 'done' | 'error'\n\nexport interface AiRunOptions {\n /** Continue a prior turn (follow-up questions in the same thread). */\n previousResponseId?: string | null\n model?: string\n}\n\n/**\n * Run a single streaming agentic task grounded in a set of documents.\n *\n * Returns live state (`text` accumulates tokens as they stream) plus a `run`\n * that resolves to the full {@link SSEStreamResult} — including the response id\n * needed to chain follow-ups.\n */\nexport function useAiTask() {\n const mutation = useAssistantQuery()\n const [status, setStatus] = useState<AiTaskStatus>('idle')\n const [text, setText] = useState('')\n const [stepCount, setStepCount] = useState(0)\n const [error, setError] = useState<string | null>(null)\n const [responseId, setResponseId] = useState<string | null>(null)\n const [artifacts, setArtifacts] = useState<ArtifactEvent[]>([])\n const bufferRef = useRef('')\n const artifactsRef = useRef<Map<string, ArtifactEvent>>(new Map())\n\n const reset = useCallback(() => {\n setStatus('idle')\n setText('')\n setStepCount(0)\n setError(null)\n setResponseId(null)\n setArtifacts([])\n artifactsRef.current = new Map()\n bufferRef.current = ''\n }, [])\n\n const run = useCallback(\n async (\n question: string,\n docIds: string[],\n opts?: AiRunOptions\n ): Promise<SSEStreamResult | null> => {\n setStatus('running')\n setText('')\n setStepCount(0)\n setError(null)\n setArtifacts([])\n artifactsRef.current = new Map()\n bufferRef.current = ''\n let streamError: string | null = null\n try {\n const result = await mutation.mutateAsync({\n question,\n docIds,\n previousResponseId: opts?.previousResponseId ?? undefined,\n model: opts?.model,\n onToken: (c: string) => {\n bufferRef.current += c\n setText(bufferRef.current)\n },\n onAgentStep: () => setStepCount((n) => n + 1),\n onArtifact: (a: ArtifactEvent) => {\n // Artifacts are documents; keep the latest version per doc.\n artifactsRef.current.set(a.doc_ext_id, a)\n setArtifacts([...artifactsRef.current.values()])\n },\n onError: (m: string) => {\n streamError = m\n },\n })\n const finalText = result.text || bufferRef.current\n setText(finalText)\n setResponseId(result.assistantMessageExtId)\n setStepCount(result.agentSteps.length || 0)\n if (result.artifacts?.length) {\n for (const a of result.artifacts) artifactsRef.current.set(a.doc_ext_id, a)\n setArtifacts([...artifactsRef.current.values()])\n }\n const err = streamError || result.errors[0] || null\n if (err && !finalText) {\n setError(err)\n setStatus('error')\n } else {\n setStatus('done')\n }\n return result\n } catch (e) {\n setError(e instanceof Error ? e.message : 'The assistant request failed.')\n setStatus('error')\n return null\n }\n },\n [mutation]\n )\n\n return {\n status,\n text,\n stepCount,\n error,\n responseId,\n artifacts,\n run,\n reset,\n isRunning: status === 'running',\n isDone: status === 'done',\n }\n}\n\n// ── Semantic search (retrieval-only, cited chunks — no LLM generation) ────────\n\nexport interface SearchChunk {\n docId?: string | null\n docTitle?: string | null\n page?: number | null\n score?: number | null\n content: string\n}\n\n/** Search a set of documents and return the top matching passages. */\nexport function useSemanticSearch(docIds: string[]) {\n const arbi = useArbi()\n const [results, setResults] = useState<SearchChunk[]>([])\n const [status, setStatus] = useState<AiTaskStatus>('idle')\n const [error, setError] = useState<string | null>(null)\n const [query, setQuery] = useState('')\n\n const search = useCallback(\n async (q: string, mode: 'semantic' | 'keyword' | 'hybrid' = 'hybrid') => {\n const trimmed = q.trim()\n setQuery(trimmed)\n if (!trimmed || docIds.length === 0) {\n setResults([])\n setStatus('idle')\n return\n }\n setStatus('running')\n setError(null)\n try {\n const res = await arbi.assistant.retrieve(trimmed, docIds, { searchMode: mode })\n const byTool = res.retrieval_chunk?.tool_responses ?? {}\n const chunks: SearchChunk[] = Object.values(byTool)\n .flat()\n .map(\n (c: {\n metadata: {\n doc_ext_id?: string | null\n doc_title?: string | null\n page_number?: number | null\n rerank_score?: number | null\n score?: number | null\n }\n content: string\n }) => ({\n docId: c.metadata.doc_ext_id,\n docTitle: c.metadata.doc_title,\n page: c.metadata.page_number,\n score: c.metadata.rerank_score ?? c.metadata.score,\n content: c.content,\n })\n )\n .sort((a, b) => (b.score ?? 0) - (a.score ?? 0))\n setResults(chunks)\n setStatus('done')\n } catch (e) {\n setError(e instanceof Error ? e.message : 'Search failed.')\n setStatus('error')\n }\n },\n [arbi, docIds]\n )\n\n return { query, results, status, error, search, isRunning: status === 'running' }\n}\n","/**\n * Client-side redlining — turn an original + revised text into track-changes\n * markdown (`<del>` strikethrough deletions, `<ins>` insertions). Rendered by\n * {@link AiMarkdown} (via rehype-raw) and the {@link ArtifactCanvas}.\n */\nimport { diffWords } from 'diff'\nimport type { ArtifactEvent } from '@arbidocs/sdk/browser'\n\n/** Produce inline `<del>/<ins>` redline markdown from two document versions. */\nexport function toRedlineMarkdown(original: string, revised: string): string {\n const parts = diffWords(original ?? '', revised ?? '')\n return parts\n .map((p) => {\n if (p.added) return `<ins>${p.value}</ins>`\n if (p.removed) return `<del>${p.value}</del>`\n return p.value\n })\n .join('')\n}\n\n/** Count added/removed words between two versions (for a redline summary). */\nexport function redlineStats(original: string, revised: string) {\n let added = 0\n let removed = 0\n for (const p of diffWords(original ?? '', revised ?? '')) {\n const words = p.value.trim() ? p.value.trim().split(/\\s+/).length : 0\n if (p.added) added += words\n else if (p.removed) removed += words\n }\n return { added, removed }\n}\n\n/** Wrap arbitrary text/markdown as a synthetic artifact for the canvas. */\nexport function textToArtifact(\n title: string,\n content: string,\n opts?: { mode?: ArtifactEvent['mode']; isComplete?: boolean; version?: number; id?: string }\n): ArtifactEvent {\n return {\n type: 'arbi.artifact',\n doc_ext_id: opts?.id ?? `local-${title.replace(/\\W+/g, '-').toLowerCase()}`,\n title,\n mode: opts?.mode ?? 'markdown',\n content,\n is_complete: opts?.isComplete ?? true,\n version: opts?.version ?? 1,\n message_ext_id: null,\n t: null,\n }\n}\n","import ReactMarkdown from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport rehypeRaw from 'rehype-raw'\nimport { cn } from '../lib/utils'\n\n/**\n * Renders agent output (markdown — headings, lists, GFM tables) in one house\n * style so every AI result across the app looks the same. Redline marks\n * (`<del>` / `<ins>` / `<mark>`) render as tracked changes. Token-neutral: uses\n * shadcn semantic tokens plus the kit's `ai-accent` colour.\n */\nexport function AiMarkdown({ children, className }: { children: string; className?: string }) {\n return (\n <div\n className={cn('text-sm leading-relaxed text-foreground', className)}\n data-testid=\"ai-markdown\"\n >\n <ReactMarkdown\n remarkPlugins={[remarkGfm]}\n rehypePlugins={[rehypeRaw]}\n components={{\n h1: (p) => (\n <h1 className=\"mb-2 mt-4 text-lg font-semibold text-foreground first:mt-0\" {...p} />\n ),\n h2: (p) => (\n <h2 className=\"mb-2 mt-4 text-base font-semibold text-foreground first:mt-0\" {...p} />\n ),\n h3: (p) => (\n <h3 className=\"mb-1.5 mt-3 text-sm font-semibold text-foreground first:mt-0\" {...p} />\n ),\n p: (p) => <p className=\"mb-3 last:mb-0\" {...p} />,\n ul: (p) => <ul className=\"mb-3 list-disc space-y-1 pl-5 last:mb-0\" {...p} />,\n ol: (p) => <ol className=\"mb-3 list-decimal space-y-1 pl-5 last:mb-0\" {...p} />,\n li: (p) => <li className=\"pl-1\" {...p} />,\n strong: (p) => <strong className=\"font-semibold text-foreground\" {...p} />,\n a: (p) => <a className=\"text-ai-accent underline underline-offset-2\" {...p} />,\n // Redline marks: deletions in red strike, <ins>/<mark> additions accented.\n del: (p) => (\n <del\n className=\"rounded bg-destructive/10 text-destructive decoration-destructive/60\"\n {...p}\n />\n ),\n ins: (p) => (\n <ins className=\"rounded bg-ai-accent-soft px-0.5 text-ai-accent no-underline\" {...p} />\n ),\n mark: (p) => <mark className=\"rounded bg-ai-accent-soft px-0.5 text-ai-accent\" {...p} />,\n code: (p) => (\n <code className=\"rounded bg-secondary px-1 py-0.5 font-mono text-[0.8em]\" {...p} />\n ),\n blockquote: (p) => (\n <blockquote\n className=\"my-3 border-l-2 border-ai-accent/40 pl-3 italic text-muted-foreground\"\n {...p}\n />\n ),\n table: (p) => (\n <div className=\"my-3 overflow-x-auto rounded-lg border border-border\">\n <table className=\"w-full border-collapse text-xs\" {...p} />\n </div>\n ),\n thead: (p) => <thead className=\"bg-secondary/60\" {...p} />,\n th: (p) => (\n <th\n className=\"border-b border-border px-3 py-2 text-left font-semibold text-foreground\"\n {...p}\n />\n ),\n td: (p) => (\n <td\n className=\"border-b border-border px-3 py-2 align-top text-muted-foreground\"\n {...p}\n />\n ),\n }}\n >\n {children}\n </ReactMarkdown>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Sparkles, Loader2, AlertTriangle, Copy, Check, ShieldCheck } from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport type { AiTaskStatus } from './engine'\nimport { AiMarkdown } from './AiMarkdown'\n\n/**\n * Renders the live state of a single agentic task: streaming tokens, a \"thinking\"\n * indicator with the running step count, errors, and a grounded/cited footer with\n * copy-to-clipboard. Shared by every AI feature so streaming looks identical\n * everywhere. Copy is customisable via `groundedNote` / `runningHint`.\n */\nexport function AiAnswer({\n status,\n text,\n stepCount,\n error,\n className,\n emptyHint,\n groundedNote = 'Grounded in the live workspace · verify citations before relying on it',\n runningHint = 'Reading the documents…',\n testId = 'ai-answer',\n}: {\n status: AiTaskStatus\n text: string\n stepCount?: number\n error?: string | null\n className?: string\n emptyHint?: string\n groundedNote?: string\n runningHint?: string\n testId?: string\n}) {\n const [copied, setCopied] = useState(false)\n const running = status === 'running'\n const hasText = text.trim().length > 0\n\n const copy = async () => {\n await navigator.clipboard.writeText(text)\n setCopied(true)\n setTimeout(() => setCopied(false), 1600)\n }\n\n if (status === 'idle' && !hasText) {\n return emptyHint ? (\n <p className={cn('text-sm text-muted-foreground', className)} data-testid={`${testId}-empty`}>\n {emptyHint}\n </p>\n ) : null\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid={testId} data-status={status}>\n {running && (\n <div\n className=\"flex items-center gap-2 text-xs font-medium text-ai-accent\"\n data-testid={`${testId}-thinking`}\n >\n <Loader2 className=\"size-3.5 animate-spin\" />\n {stepCount && stepCount > 0\n ? `Working — ${stepCount} step${stepCount === 1 ? '' : 's'}…`\n : 'Thinking…'}\n </div>\n )}\n\n {status === 'error' && !hasText && (\n <div\n className=\"flex items-start gap-2 rounded-lg border border-destructive/30 bg-destructive/5 p-3 text-sm text-destructive\"\n data-testid={`${testId}-error`}\n >\n <AlertTriangle className=\"mt-0.5 size-4 shrink-0\" />\n <span>{error ?? 'The assistant request failed.'}</span>\n </div>\n )}\n\n {hasText && (\n <>\n <AiMarkdown>{text}</AiMarkdown>\n {!running && (\n <div className=\"flex items-center justify-between border-t border-border pt-2.5\">\n <span className=\"inline-flex items-center gap-1.5 text-xs text-muted-foreground\">\n <ShieldCheck className=\"size-3.5 text-ai-accent\" />\n {groundedNote}\n </span>\n <button\n type=\"button\"\n onClick={copy}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-muted-foreground hover:text-foreground\"\n data-testid={`${testId}-copy`}\n >\n {copied ? (\n <Check className=\"size-3.5 text-ai-accent\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n {copied ? 'Copied' : 'Copy'}\n </button>\n </div>\n )}\n </>\n )}\n\n {running && !hasText && (\n <div className=\"flex items-center gap-1.5 text-sm text-muted-foreground\">\n <Sparkles className=\"size-4 animate-pulse text-ai-accent\" /> {runningHint}\n </div>\n )}\n </div>\n )\n}\n","import type { LucideIcon } from 'lucide-react'\nimport { Sparkles } from 'lucide-react'\nimport { Card } from '../ui/card'\nimport { Button } from '../ui/button'\nimport { useAiTask } from './engine'\nimport { AiAnswer } from './AiAnswer'\n\n/**\n * A self-contained one-click agentic workflow: title + description + a Run button\n * that streams a grounded, cited result inline. Drop it on any page — it owns its\n * own task state via `useAiTask`.\n */\nexport function AiActionCard({\n icon: Icon = Sparkles,\n title,\n description,\n prompt,\n docIds,\n runLabel = 'Run',\n noDocsHint = 'Connect to the workspace to run this.',\n disabled,\n testId,\n}: {\n icon?: LucideIcon\n title: string\n description: string\n /** The fully-built prompt to run, or a factory (deferred until click). */\n prompt: string | (() => string)\n docIds: string[]\n runLabel?: string\n noDocsHint?: string\n disabled?: boolean\n testId?: string\n}) {\n const task = useAiTask()\n const noDocs = docIds.length === 0\n\n const onRun = () => {\n const p = typeof prompt === 'function' ? prompt() : prompt\n void task.run(p, docIds)\n }\n\n return (\n <Card className=\"p-5\" data-testid={testId}>\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex size-9 shrink-0 items-center justify-center rounded-lg bg-ai-accent-soft text-ai-accent\">\n <Icon className=\"size-4\" />\n </div>\n <div>\n <p className=\"text-sm font-semibold text-foreground\">{title}</p>\n <p className=\"mt-0.5 text-xs leading-relaxed text-muted-foreground\">{description}</p>\n </div>\n </div>\n <Button\n variant={task.isDone ? 'outline' : 'accent'}\n size=\"sm\"\n onClick={onRun}\n disabled={disabled || noDocs || task.isRunning}\n data-testid={testId && `${testId}-run`}\n >\n <Sparkles className=\"size-3.5\" />\n {task.isRunning ? 'Running…' : task.isDone ? 'Re-run' : runLabel}\n </Button>\n </div>\n\n {(task.status !== 'idle' || noDocs) && (\n <div className=\"mt-4\">\n {noDocs ? (\n <p className=\"text-xs text-muted-foreground\">{noDocsHint}</p>\n ) : (\n <AiAnswer\n status={task.status}\n text={task.text}\n stepCount={task.stepCount}\n error={task.error}\n testId={testId && `${testId}-answer`}\n />\n )}\n </div>\n )}\n </Card>\n )\n}\n","import { useEffect, useState } from 'react'\nimport {\n FileText,\n Download,\n Copy,\n Check,\n Loader2,\n GitCompareArrows,\n AlertTriangle,\n} from 'lucide-react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { Badge } from '../ui/badge'\nimport { cn } from '../lib/utils'\nimport type { ArtifactEvent } from './engine'\nimport { AiMarkdown } from './AiMarkdown'\n\n/**\n * The artifacts canvas — renders agent-produced documents (drafts, redlines,\n * memos) as first-class artifacts in a paper-styled panel. Markdown mode supports\n * redlines (`<del>` deletions / `<ins>` additions). Streams live: content grows\n * and `is_complete` flips when finished. Token-neutral: the \"paper\" surface is\n * the kit's `ai-surface` colour.\n */\nexport function ArtifactCanvas({\n artifacts,\n className,\n emptyHint = 'Draft artifacts produced by the agent will open here.',\n busy = false,\n busyHint = 'The agent is working through the documents…',\n stepCount,\n error = null,\n}: {\n artifacts: ArtifactEvent[]\n className?: string\n emptyHint?: string\n /** A run failed before producing content — show it instead of the empty hint. */\n error?: string | null\n /**\n * The agent is running but hasn't produced streamable content yet. Agentic\n * drafts spend a while planning/retrieving before the first token, so show a\n * live working state instead of the empty hint — otherwise the canvas reads\n * as broken during a perfectly normal multi-step run.\n */\n busy?: boolean\n busyHint?: string\n /** Agent steps completed so far, surfaced in the working state when > 0. */\n stepCount?: number\n}) {\n const [activeId, setActiveId] = useState<string | null>(null)\n const [copied, setCopied] = useState(false)\n\n // Follow the most recent artifact as they stream in.\n useEffect(() => {\n if (artifacts.length && (!activeId || !artifacts.some((a) => a.doc_ext_id === activeId))) {\n setActiveId(artifacts[artifacts.length - 1].doc_ext_id)\n }\n }, [artifacts, activeId])\n\n if (artifacts.length === 0) {\n // A failed run with no partial content — surface the error, not a dead hint.\n if (error && !busy) {\n return (\n <div\n className={cn(\n 'flex h-full min-h-[280px] flex-col items-center justify-center rounded-xl border border-destructive/30 bg-destructive/5 p-8 text-center',\n className\n )}\n data-testid=\"artifact-canvas-error\"\n >\n <AlertTriangle className=\"size-8 text-destructive/70\" />\n <p className=\"mt-3 max-w-md text-sm text-foreground\">{error}</p>\n </div>\n )\n }\n // Running-but-empty: the agent is planning/retrieving before it streams.\n if (busy) {\n return (\n <div\n className={cn(\n 'flex h-full min-h-[280px] flex-col items-center justify-center rounded-xl border border-border bg-ai-surface/40 p-8 text-center',\n className\n )}\n data-testid=\"artifact-canvas-busy\"\n >\n <Loader2 className=\"size-8 animate-spin text-ai-accent\" />\n <p className=\"mt-4 max-w-xs text-sm font-medium text-foreground\">{busyHint}</p>\n {typeof stepCount === 'number' && stepCount > 0 && (\n <p className=\"mt-1 text-xs text-muted-foreground\" data-testid=\"artifact-canvas-steps\">\n {stepCount} {stepCount === 1 ? 'step' : 'steps'} so far\n </p>\n )}\n </div>\n )\n }\n return (\n <div\n className={cn(\n 'flex h-full min-h-[280px] flex-col items-center justify-center rounded-xl border border-dashed border-border bg-secondary/30 p-8 text-center',\n className\n )}\n data-testid=\"artifact-canvas-empty\"\n >\n <FileText className=\"size-8 text-muted-foreground/50\" />\n <p className=\"mt-3 max-w-xs text-sm text-muted-foreground\">{emptyHint}</p>\n </div>\n )\n }\n\n const active = artifacts.find((a) => a.doc_ext_id === activeId) ?? artifacts[artifacts.length - 1]\n const isRedline = /~~|<ins|<del|<mark/i.test(active.content)\n\n const copy = async () => {\n await navigator.clipboard.writeText(active.content)\n setCopied(true)\n setTimeout(() => setCopied(false), 1600)\n }\n\n const download = () => {\n const ext = active.mode === 'html' ? 'html' : active.mode === 'text' ? 'txt' : 'md'\n const blob = new Blob([active.content], { type: 'text/plain' })\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = `${active.title.replace(/[^\\w.-]+/g, '_') || 'artifact'}.${ext}`\n a.click()\n URL.revokeObjectURL(url)\n }\n\n return (\n <div\n className={cn(\n 'flex h-full flex-col overflow-hidden rounded-xl border border-border bg-card',\n className\n )}\n data-testid=\"artifact-canvas\"\n >\n {/* Header */}\n <div className=\"flex items-center gap-2 border-b border-border bg-secondary/40 px-4 py-2.5\">\n <FileText className=\"size-4 shrink-0 text-ai-accent\" />\n <span\n className=\"min-w-0 flex-1 truncate text-sm font-medium text-foreground\"\n data-testid=\"artifact-title\"\n >\n {active.title}\n </span>\n {isRedline && (\n <Badge variant=\"accent\" className=\"gap-1\">\n <GitCompareArrows className=\"size-3\" /> Redline\n </Badge>\n )}\n <Badge variant=\"secondary\">v{active.version}</Badge>\n {!active.is_complete ? (\n <span\n className=\"inline-flex items-center gap-1 text-xs text-ai-accent\"\n data-testid=\"artifact-streaming\"\n >\n <Loader2 className=\"size-3 animate-spin\" /> drafting\n </span>\n ) : (\n <div className=\"flex items-center gap-1\">\n <button\n onClick={copy}\n className=\"rounded p-1 text-muted-foreground hover:bg-accent hover:text-foreground\"\n title=\"Copy\"\n data-testid=\"artifact-copy\"\n >\n {copied ? (\n <Check className=\"size-3.5 text-ai-accent\" />\n ) : (\n <Copy className=\"size-3.5\" />\n )}\n </button>\n <button\n onClick={download}\n className=\"rounded p-1 text-muted-foreground hover:bg-accent hover:text-foreground\"\n title=\"Download\"\n data-testid=\"artifact-download\"\n >\n <Download className=\"size-3.5\" />\n </button>\n </div>\n )}\n </div>\n\n {/* Tabs when multiple artifacts */}\n {artifacts.length > 1 && (\n <div className=\"flex gap-1 overflow-x-auto border-b border-border bg-card px-2 py-1.5\">\n {artifacts.map((a) => (\n <button\n key={a.doc_ext_id}\n onClick={() => setActiveId(a.doc_ext_id)}\n className={cn(\n 'shrink-0 rounded-md px-2.5 py-1 text-xs font-medium',\n a.doc_ext_id === active.doc_ext_id\n ? 'bg-ai-accent-soft text-ai-accent'\n : 'text-muted-foreground hover:bg-accent'\n )}\n >\n {a.title.slice(0, 28)}\n </button>\n ))}\n </div>\n )}\n\n {/* Paper body */}\n <div className=\"flex-1 overflow-y-auto bg-ai-surface/40 p-6\">\n <AnimatePresence mode=\"wait\">\n <motion.div\n key={active.doc_ext_id}\n initial={{ opacity: 0, y: 6 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.2 }}\n className=\"mx-auto max-w-2xl rounded-lg bg-card p-8 shadow-sm ring-1 ring-border\"\n >\n {active.mode === 'html' ? (\n <div className=\"text-sm\" dangerouslySetInnerHTML={{ __html: active.content }} />\n ) : active.mode === 'text' ? (\n <pre className=\"whitespace-pre-wrap font-mono text-xs text-foreground\">\n {active.content}\n </pre>\n ) : (\n <AiMarkdown>{active.content}</AiMarkdown>\n )}\n </motion.div>\n </AnimatePresence>\n </div>\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Search, Loader2, FileText, CornerDownLeft } from 'lucide-react'\nimport { Card } from '../ui/card'\nimport { Badge } from '../ui/badge'\nimport { useSemanticSearch } from './engine'\nimport { cn } from '../lib/utils'\n\n/**\n * Semantic search across a document set — retrieval-only (no LLM), returning the\n * top matching passages with their source document and page. Uses the SDK's\n * `assistant.retrieve`, so every hit is a real, cited chunk of a real document.\n */\nexport function DocSearch({\n docIds,\n onOpenDoc,\n placeholder = 'Semantic search across your documents…',\n className,\n}: {\n docIds: string[]\n onOpenDoc?: (docId: string) => void\n placeholder?: string\n className?: string\n}) {\n const { results, status, error, search, isRunning, query } = useSemanticSearch(docIds)\n const [value, setValue] = useState('')\n\n const submit = () => {\n if (value.trim()) void search(value, 'hybrid')\n }\n\n return (\n <div className={cn('space-y-3', className)} data-testid=\"doc-search\">\n <div className=\"relative\">\n <Search className=\"pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-muted-foreground\" />\n {isRunning && (\n <Loader2 className=\"absolute right-3 top-1/2 size-4 -translate-y-1/2 animate-spin text-ai-accent\" />\n )}\n <input\n value={value}\n onChange={(e) => setValue(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && (e.preventDefault(), submit())}\n placeholder={placeholder}\n className=\"h-11 w-full rounded-lg border border-input bg-background pl-9 pr-24 text-sm outline-none focus:border-ai-accent/50 focus:ring-2 focus:ring-ai-accent/15\"\n data-testid=\"doc-search-input\"\n />\n <button\n type=\"button\"\n onClick={submit}\n className=\"absolute right-2 top-1/2 flex -translate-y-1/2 items-center gap-1 rounded-md bg-ai-accent px-2.5 py-1 text-xs font-medium text-ai-accent-foreground\"\n data-testid=\"doc-search-submit\"\n >\n Search <CornerDownLeft className=\"size-3\" />\n </button>\n </div>\n\n {status === 'error' && (\n <p className=\"text-sm text-destructive\" data-testid=\"doc-search-error\">\n {error}\n </p>\n )}\n\n {status === 'done' && (\n <div className=\"space-y-2\" data-testid=\"doc-search-results\">\n <p className=\"text-xs text-muted-foreground\">\n {results.length === 0\n ? `No passages matched “${query}”.`\n : `${results.length} passage${results.length === 1 ? '' : 's'} for “${query}”`}\n </p>\n {results.slice(0, 8).map((r, i) => (\n <Card\n key={`${r.docId}-${r.page}-${i}`}\n className={cn(\n 'p-3',\n onOpenDoc && r.docId && 'cursor-pointer transition-colors hover:border-ai-accent/40'\n )}\n onClick={() => r.docId && onOpenDoc?.(r.docId)}\n data-testid={`doc-search-hit-${i}`}\n >\n <div className=\"mb-1 flex items-center gap-2\">\n <FileText className=\"size-3.5 text-ai-accent\" />\n <span className=\"truncate text-xs font-medium text-foreground\">\n {r.docTitle ?? 'Document'}\n </span>\n {r.page != null && <Badge variant=\"secondary\">p.{r.page}</Badge>}\n {r.score != null && (\n <span className=\"ml-auto text-[10px] text-muted-foreground\">\n score {r.score.toFixed(2)}\n </span>\n )}\n </div>\n <p className=\"line-clamp-3 text-xs leading-relaxed text-muted-foreground\">\n {r.content}\n </p>\n </Card>\n ))}\n </div>\n )}\n </div>\n )\n}\n","import { useState } from 'react'\nimport { Send, Tags } from 'lucide-react'\nimport { Button } from '../ui/button'\nimport { Input } from '../ui/input'\nimport { useAiTask } from './engine'\nimport { AiAnswer } from './AiAnswer'\n\n/**\n * Ask questions grounded in a SINGLE document (docId scoped to one file), plus a\n * one-click \"suggest tags\" action. Drop it in a document viewer.\n */\nexport function DocQaPanel({ docId, docName }: { docId: string; docName?: string }) {\n const task = useAiTask()\n const [q, setQ] = useState('')\n\n const ask = () => {\n const question = q.trim()\n if (!question || task.isRunning) return\n void task.run(\n `You are answering strictly from the single document \"${docName ?? docId}\". Cite the page/section for each point and say if the document does not address the question.\\n\\nQuestion: ${question}`,\n [docId]\n )\n }\n\n const suggestTags = () =>\n void task.run(\n `Suggest 3-6 concise, reusable labels for the document \"${docName ?? docId}\" — covering document type, the key issues it touches, and any key parties. Return them as a short comma-separated list with a one-line rationale for each.`,\n [docId]\n )\n\n return (\n <div className=\"space-y-3\" data-testid=\"doc-qa\">\n <div className=\"flex items-center gap-2\">\n <Input\n value={q}\n onChange={(e) => setQ(e.target.value)}\n onKeyDown={(e) => e.key === 'Enter' && (e.preventDefault(), ask())}\n placeholder=\"Ask about this document…\"\n data-testid=\"doc-qa-input\"\n />\n <Button\n variant=\"accent\"\n size=\"icon\"\n onClick={ask}\n disabled={task.isRunning || !q.trim()}\n data-testid=\"doc-qa-send\"\n >\n <Send className=\"size-4\" />\n </Button>\n <Button\n variant=\"outline\"\n size=\"sm\"\n onClick={suggestTags}\n disabled={task.isRunning}\n data-testid=\"doc-qa-tags\"\n >\n <Tags className=\"size-4\" /> Tags\n </Button>\n </div>\n <AiAnswer\n status={task.status}\n text={task.text}\n stepCount={task.stepCount}\n error={task.error}\n emptyHint=\"Ask a question, or suggest tags — answered from this document only.\"\n testId=\"doc-qa-answer\"\n />\n </div>\n )\n}\n","/**\n * File-type icon colors — the subset of the app's FILE_TYPE_COLORS used by the\n * promoted file-type icons. Kept self-contained so the SDK icons render with the\n * same palette as the ARBI app without depending on the app's style constants.\n */\n\nconst NEUTRAL_GRAY = '#64748b' // slate-500\n\nexport const FILE_TYPE_COLORS = {\n pdf: '#ef4444', // red\n img: '#8b5cf6', // violet-500 (images)\n vid: '#10b981', // emerald-500 (video)\n aud: '#f59e0b', // amber-500 (audio)\n eml: '#0d9488', // teal-600 (email)\n generic: NEUTRAL_GRAY, // gray (unknown)\n white: '#ffffff', // for strokes/text on colored backgrounds\n}\n","/** PDF file icon (red). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const PdfIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.pdf}\n stroke={FILE_TYPE_COLORS.pdf}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n PDF\n </text>\n </svg>\n )\n}\n","/** Audio file icon (amber). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const AudIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.aud}\n stroke={FILE_TYPE_COLORS.aud}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n AUD\n </text>\n </svg>\n )\n}\n","/** Image file icon (violet). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const ImgIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.img}\n stroke={FILE_TYPE_COLORS.img}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n IMG\n </text>\n </svg>\n )\n}\n","/** Video file icon (emerald). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const VidIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.vid}\n stroke={FILE_TYPE_COLORS.vid}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n VID\n </text>\n </svg>\n )\n}\n","/** Email file icon (teal). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const EmlIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.eml}\n stroke={FILE_TYPE_COLORS.eml}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"7\"\n y=\"12\"\n width=\"10\"\n height=\"7\"\n rx=\"1\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"1.2\"\n />\n <path d=\"M7 13l5 3 5-3\" fill=\"none\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","/** Generic file icon (gray, question mark). Promoted from the ARBI app. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const FileIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.generic}\n stroke={FILE_TYPE_COLORS.generic}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"17\"\n fontSize=\"10\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n ?\n </text>\n </svg>\n )\n}\n","/**\n * EntityPill Component\n *\n * Base component for pill-style entity displays. Provides consistent styling and\n * interaction patterns. Promoted verbatim from the ARBI app (import paths only\n * changed to resolve within the SDK).\n *\n * Pattern: [Icon] [Label] [Optional: secondary text] [MoreVertical when interactive]\n */\n\nimport React, { forwardRef } from 'react'\nimport { MoreVertical } from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'\n\ninterface EntityPillProps {\n /** The icon element (Avatar, ShieldIcon, FileIcon, etc.) */\n icon: React.ReactNode\n /** Primary label text */\n label: string\n /** Optional secondary text (e.g., page notation \"p.1\") */\n secondaryText?: React.ReactNode\n\n // Styling\n /** Size variant: 'sm' for compact, 'base' for tab headers */\n size?: 'sm' | 'base'\n /** Shape variant: 'pill' for rounded-full, 'rounded' for rounded-md */\n shape?: 'pill' | 'rounded'\n /** Additional CSS classes */\n className?: string\n /** Max width for label truncation */\n labelMaxWidth?: string\n /** When true, the pill fills its container width (`flex w-full`) and the main\n * area flexes + truncates so the trailing control (⋯ menu) pins to the right\n * edge — used by the documents table's Document column. Default: shrink-to-fit. */\n fullWidth?: boolean\n /** When true, render the pill with the active/\"viewing\" highlight — a solid\n * dark-navy background with light text, applied LAST so it wins over both the\n * default background and the interactive hover. */\n highlight?: boolean\n\n // Behavior\n /** Click handler for main area (icon + label) - primary action */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for icon only — when set, only the icon is clickable (not the label) */\n onIconClick?: (e: React.MouseEvent) => void\n /** Click handler for MoreVertical - opens popover/menu. When provided, shows MoreVertical icon */\n onMoreClick?: (e: React.MouseEvent) => void\n /** Custom trailing element (e.g. a ⋯ dropdown menu). Rendered in the same\n * trailing zone as MoreVertical, but as-is — so it stays outside the pill's\n * primary click area. Takes precedence over `onMoreClick`. */\n moreContent?: React.ReactNode\n /** Link URL - makes the main area an anchor tag */\n href?: string\n /** Whether the pill is disabled */\n disabled?: boolean\n\n // Tooltip\n /** Tooltip for main area (describes primary action, e.g., \"View document\") */\n tooltipContent?: React.ReactNode\n /** Tooltip side placement */\n tooltipSide?: 'top' | 'bottom' | 'left' | 'right'\n\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const EntityPill = forwardRef<HTMLElement, EntityPillProps>(function EntityPill(\n {\n icon,\n label,\n secondaryText,\n size = 'sm',\n shape = 'rounded',\n className,\n labelMaxWidth = 'max-w-[320px]',\n fullWidth = false,\n highlight = false,\n onClick,\n onIconClick,\n onMoreClick,\n moreContent,\n href,\n disabled = false,\n tooltipContent,\n tooltipSide = 'bottom',\n 'data-testid': testId,\n },\n ref\n) {\n const shapeClass = shape === 'pill' ? 'rounded-full' : 'rounded-md'\n\n // Size-based classes\n const sizeClasses = size === 'base' ? 'gap-1.5 px-1.5 py-0.5' : 'gap-1 px-1'\n const textSizeClass = size === 'base' ? 'text-base' : 'text-sm'\n\n const baseClasses = cn(\n 'group/pill items-center',\n fullWidth ? 'flex w-full' : 'inline-flex',\n sizeClasses,\n shapeClass,\n 'bg-muted',\n 'border border-border',\n 'transition-all',\n className\n )\n\n const interactiveClasses = 'cursor-pointer hover:bg-muted/80'\n const disabledClasses = 'cursor-default opacity-60'\n const highlightClasses =\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground'\n\n // Main content (icon + label + secondary text)\n const mainContent = (\n <>\n {onIconClick ? (\n <span\n role=\"button\"\n tabIndex={0}\n className=\"flex-shrink-0 cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n onIconClick(e)\n }}\n >\n {icon}\n </span>\n ) : (\n icon\n )}\n <span\n className={cn(textSizeClass, 'font-medium truncate leading-tight min-w-0', labelMaxWidth)}\n >\n {label}\n </span>\n {secondaryText && (\n <span className=\"text-xs text-muted-foreground flex-shrink-0 leading-none\">\n {secondaryText}\n </span>\n )}\n </>\n )\n\n // Helper: wrap any content in a Tooltip (no asChild — TooltipTrigger renders its own button)\n const tooltipWrap = (\n content: React.ReactNode,\n tip: React.ReactNode,\n side: 'top' | 'bottom' | 'left' | 'right' = tooltipSide,\n triggerClassName?: string,\n triggerProps?: Record<string, unknown>\n ) => (\n <Tooltip>\n <TooltipTrigger\n onFocusCapture={(e) => e.stopPropagation()}\n className={triggerClassName}\n {...triggerProps}\n >\n {content}\n </TooltipTrigger>\n <TooltipContent side={side} className=\"p-2\">\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n\n const mainAreaClass = cn('inline-flex items-center gap-1', fullWidth && 'min-w-0 flex-1')\n\n if (onMoreClick || moreContent) {\n let mainArea: React.ReactNode\n if (tooltipContent) {\n mainArea = tooltipWrap(\n mainContent,\n tooltipContent,\n tooltipSide,\n cn(mainAreaClass, disabled && 'opacity-60'),\n {\n type: 'button',\n onClick: href ? onClick : disabled ? undefined : onClick,\n disabled: disabled || undefined,\n }\n )\n } else if (href) {\n mainArea = (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mainAreaClass}\n onClick={onClick}\n >\n {mainContent}\n </a>\n )\n } else if (onClick) {\n mainArea = (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={cn('inline-flex items-center gap-1', disabled && 'opacity-60')}\n >\n {mainContent}\n </button>\n )\n } else {\n mainArea = <span className={mainAreaClass}>{mainContent}</span>\n }\n\n const moreArea = moreContent ? (\n <span className=\"flex-shrink-0 leading-none\">{moreContent}</span>\n ) : (\n tooltipWrap(\n <MoreVertical className=\"w-3.5 h-3.5\" />,\n 'Click for more',\n tooltipSide,\n 'flex-shrink-0 leading-none text-muted-foreground hover:text-foreground',\n {\n type: 'button',\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n onMoreClick?.(e)\n },\n }\n )\n )\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(\n baseClasses,\n (onClick || href) && !disabled && interactiveClasses,\n highlight && highlightClasses\n )}\n data-testid={testId}\n >\n {mainArea}\n {moreArea}\n </span>\n )\n }\n\n if (tooltipContent) {\n if (href) {\n return tooltipWrap(\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mainAreaClass}\n onClick={onClick}\n >\n {mainContent}\n </a>,\n tooltipContent,\n tooltipSide,\n cn(baseClasses, interactiveClasses),\n { 'data-testid': testId }\n )\n }\n\n return tooltipWrap(\n mainContent,\n tooltipContent,\n tooltipSide,\n cn(\n baseClasses,\n onClick && !disabled ? interactiveClasses : '',\n disabled ? disabledClasses : '',\n highlight && highlightClasses\n ),\n {\n type: 'button',\n ref: ref as React.Ref<HTMLButtonElement>,\n onClick: onClick && !disabled ? onClick : undefined,\n disabled: disabled || undefined,\n 'data-testid': testId,\n }\n )\n }\n\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(baseClasses, interactiveClasses)}\n data-testid={testId}\n onClick={onClick}\n >\n {mainContent}\n </a>\n )\n }\n\n if (onClick) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={cn(\n baseClasses,\n disabled ? disabledClasses : interactiveClasses,\n highlight && highlightClasses\n )}\n data-testid={testId}\n >\n {mainContent}\n </button>\n )\n }\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(baseClasses, highlight && highlightClasses)}\n data-testid={testId}\n >\n {mainContent}\n </span>\n )\n})\n","/**\n * DocumentEntity Component\n *\n * Displays a document as a compact entity pill with file-type icon and name.\n * Promoted from the ARBI app and DECOUPLED from the app store/API: it renders\n * purely from the `doc` prop and optional `onClick`/`onIconClick` callbacks.\n */\n\nimport React from 'react'\nimport { Eye, FolderOpen } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { AudIcon } from '../icons/AudIcon'\nimport { EmlIcon } from '../icons/EmlIcon'\nimport { ImgIcon } from '../icons/ImgIcon'\nimport { PdfIcon } from '../icons/PdfIcon'\nimport { VidIcon } from '../icons/VidIcon'\nimport { cn } from '../lib/utils'\n\n/** Minimal, decoupled document shape the pill needs. Structurally compatible\n * with the SDK's `DocResponse` (from `useDocuments`), but no dependency on it —\n * a consumer can pass any object with these fields. */\nexport interface DocumentLike {\n file_name?: string | null\n folder?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\n/** Title of a document: `doc_metadata.title`, falling back to `file_name`. */\nfunction getDocumentTitle(document: DocumentLike | null | undefined, defaultValue = ''): string {\n if (!document) return defaultValue\n return document.doc_metadata?.title || document.file_name || defaultValue\n}\n\n/** Hard cap on the pill's visible label. The full name still shows in the hover\n * tooltip; the pill stays compact so the trailing ⋮ menu never gets pushed. */\nconst MAX_LABEL_CHARS = 30\n\nfunction clampLabel(text: string): string {\n return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}…` : text\n}\n\nconst IMAGE_EXTENSIONS = new Set(['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'tif', 'webp'])\nconst VIDEO_EXTENSIONS = new Set(['mp4', 'mpeg', 'mpg', 'webm', 'mov', 'avi', 'mkv'])\nconst AUDIO_EXTENSIONS = new Set(['mp3', 'wav', 'm4a', 'aac', 'ogg', 'flac'])\nconst EMAIL_EXTENSIONS = new Set(['eml', 'msg'])\n\nfunction getDocIcon(fileName?: string | null, iconSize = 14): React.ReactNode {\n const ext = fileName?.split('.').pop()?.toLowerCase()\n if (ext && VIDEO_EXTENSIONS.has(ext)) return <VidIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && AUDIO_EXTENSIONS.has(ext)) return <AudIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && IMAGE_EXTENSIONS.has(ext)) return <ImgIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && EMAIL_EXTENSIONS.has(ext)) return <EmlIcon size={iconSize} className=\"flex-shrink-0\" />\n return <PdfIcon size={iconSize} className=\"flex-shrink-0\" />\n}\n\nexport interface DocumentEntityProps {\n doc: DocumentLike\n /** Override the default file-type icon */\n icon?: React.ReactNode\n /** Size variant — 'sm' (default) for inline/compact contexts, 'base' for a\n * larger pill (e.g. the documents grid's primary name column). */\n size?: 'sm' | 'base'\n /** Override default label max width */\n labelMaxWidth?: string\n /** Click handler for the whole pill */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for the icon only */\n onIconClick?: (e: React.MouseEvent) => void\n /** When true, the file-type icon swaps to an Eye on pill hover — a cue that\n * clicking opens (view) the document. */\n showHoverEye?: boolean\n /** When true, the Eye is pinned on (not just hover) — marks the document that\n * is currently open/being viewed. Implies the hover-swap behaviour. */\n viewing?: boolean\n /** Small overlay pinned to the icon's corner (e.g. an \"available offline\" pip). */\n iconBadge?: React.ReactNode\n /** Trailing control rendered outside the click area (e.g. a ⋯ actions menu). */\n actions?: React.ReactNode\n /** When true, the pill fills the available width and the name truncates via\n * CSS so the trailing ⋯ menu pins to the right edge. */\n fullWidth?: boolean\n /** Override the default folder/title hover tooltip. */\n tooltipContent?: React.ReactNode\n className?: string\n}\n\nexport function DocumentEntity({\n doc,\n icon,\n size = 'sm',\n labelMaxWidth,\n onClick,\n onIconClick,\n showHoverEye,\n viewing,\n iconBadge,\n actions,\n tooltipContent,\n className,\n fullWidth,\n}: DocumentEntityProps) {\n const title = getDocumentTitle(doc)\n const ext = doc.file_name?.split('.').pop()?.toLowerCase()\n const iconSize = size === 'base' ? 16 : 14\n const eyeSizeClass = size === 'base' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n\n const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize)\n const showEye = showHoverEye || viewing\n const displayIcon =\n showEye || iconBadge ? (\n <span className=\"relative inline-flex flex-shrink-0 items-center justify-center\">\n {showEye ? (\n <>\n <span\n className={cn(\n 'transition-opacity',\n viewing\n ? 'opacity-0'\n : 'group-hover/pill:opacity-0 group-has-[[data-state=open]]/pill:opacity-0'\n )}\n >\n {baseIcon}\n </span>\n <Eye\n className={cn(\n 'absolute inset-0 m-auto transition-opacity',\n eyeSizeClass,\n viewing\n ? 'text-primary-foreground opacity-100'\n : 'text-primary opacity-0 group-hover/pill:opacity-100 group-has-[[data-state=open]]/pill:opacity-100'\n )}\n />\n </>\n ) : (\n baseIcon\n )}\n {iconBadge}\n </span>\n ) : (\n baseIcon\n )\n\n const defaultTooltip = (\n <div className=\"flex flex-col gap-1 text-xs max-w-[300px]\">\n {doc.folder && (\n <span className=\"flex items-center gap-0.5 text-muted-foreground\">\n <FolderOpen className=\"h-3 w-3 text-yellow-600 shrink-0\" />\n {doc.folder.split('/').map((part, i, arr) => (\n <span key={i} className=\"flex items-center gap-0.5 shrink-0\">\n {i > 0 && <span className=\"text-muted-foreground/50 mx-0.5\">/</span>}\n <span className={i < arr.length - 1 ? 'text-muted-foreground/70' : ''}>{part}</span>\n </span>\n ))}\n </span>\n )}\n <span className=\"font-medium break-words\">\n {title}\n {ext ? `.${ext}` : ''}\n </span>\n </div>\n )\n\n return (\n <EntityPill\n icon={displayIcon}\n size={size}\n label={fullWidth ? title : clampLabel(title)}\n labelMaxWidth={labelMaxWidth ?? 'max-w-[140px]'}\n fullWidth={fullWidth}\n onClick={onClick}\n onIconClick={onIconClick}\n moreContent={actions}\n className={className}\n highlight={viewing}\n tooltipContent={tooltipContent ?? defaultTooltip}\n />\n )\n}\n","/**\n * TagEntity Component\n *\n * Single source of truth for tag visual appearance, promoted from the ARBI app\n * and DECOUPLED from the app store/API. It renders purely from the `tag` prop —\n * the app-only bits (creator/updater lookup, visibility toggle, live doctag\n * count from the query cache) are dropped; pass `doctagCount`/`shared` if you\n * want them shown in the tooltip.\n */\n\nimport React from 'react'\nimport { SquareCheckBig, StickyNote, List, Hash, Search, Folder, Calendar, Bot } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { Badge } from '../ui/badge'\n\n/** Base color map — source of truth for entity colors, keyed by the 5th char of\n * an entity id (matches the app's BASE_COLORS). */\nconst BASE_COLORS: Record<string, string> = {\n '0': '#10b981',\n '1': '#3b82f6',\n '2': '#8b5cf6',\n '3': '#f43f5e',\n '4': '#f59e0b',\n '5': '#84cc16',\n '6': '#a855f7',\n '7': '#06b6d4',\n '8': '#f97316',\n '9': '#14b8a6',\n a: '#ef4444',\n b: '#6366f1',\n c: '#ec4899',\n d: '#22c55e',\n e: '#eab308',\n f: '#0ea5e9',\n}\n\n/** Solid entity color derived from an entity id (matches the app's\n * `getEntityColor(id, 'medium')`). */\nfunction getEntityColor(entityId: string): string {\n return BASE_COLORS[entityId[4]] || BASE_COLORS['0']\n}\n\n/** Minimal, decoupled tag shape the pill needs. */\nexport interface TagLike {\n external_id: string\n name: string\n /** Tag type discriminator — drives the icon and the tooltip's \"Type\" line. */\n tag_type?: { type: string } | null\n /** Optional explicit color; when omitted it's derived from `external_id`. */\n color?: string\n /** Optional document count shown in the tooltip. */\n doctag_count?: number | null\n /** Optional shared/private flag shown in the tooltip. */\n shared?: boolean | null\n}\n\nconst TAG_TYPE_LABELS: Record<string, string> = {\n checkbox: 'Checkbox',\n select: 'Select',\n number: 'Number',\n text: 'Text',\n folder: 'Folder',\n search: 'Saved Search',\n date: 'Date',\n assistant: 'AI Assistant',\n}\n\nconst TAG_TYPE_ICONS: Record<string, typeof StickyNote> = {\n checkbox: SquareCheckBig,\n select: List,\n number: Hash,\n text: StickyNote,\n folder: Folder,\n search: Search,\n date: Calendar,\n assistant: Bot,\n}\n\nexport interface TagEntityProps {\n tag: TagLike\n size?: 'sm' | 'md' | 'lg'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Whether to show the detailed tooltip (default: true) */\n showTooltip?: boolean\n}\n\nexport function TagEntity({\n tag,\n size = 'md',\n className = '',\n onClick,\n showTooltip = true,\n}: TagEntityProps) {\n const tagType = tag.tag_type?.type ?? 'text'\n const iconSize = size === 'sm' ? 12 : size === 'md' ? 14 : 16\n const Icon = TAG_TYPE_ICONS[tagType] || StickyNote\n\n const sizeClasses = {\n sm: 'p-0.5',\n md: 'p-1',\n lg: 'p-1.5',\n }\n\n const tagColor = tag.color ?? getEntityColor(tag.external_id)\n\n const iconElement = (\n <span\n className={`inline-flex items-center justify-center rounded-md text-white flex-shrink-0 ${sizeClasses[size]}`}\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={iconSize} className=\"flex-shrink-0\" />\n </span>\n )\n\n const pillSize = size === 'lg' ? 'base' : 'sm'\n\n const tooltipContent = showTooltip ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-flex items-center justify-center rounded-md text-white p-1\"\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={16} />\n </span>\n <span className=\"font-medium text-sm\">{tag.name}</span>\n </div>\n\n <div className=\"flex flex-col gap-1.5 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Type:</span>\n <span>{TAG_TYPE_LABELS[tagType] || tagType}</span>\n </div>\n\n {tag.doctag_count != null && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Documents:</span>\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] justify-center\">\n {tag.doctag_count ?? 0}\n </Badge>\n </div>\n )}\n\n {tag.shared != null && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{tag.shared ? 'Shared' : 'Private'}</span>\n </div>\n )}\n </div>\n </div>\n ) : undefined\n\n return (\n <EntityPill\n icon={iconElement}\n label={tag.name}\n size={pillSize}\n shape=\"rounded\"\n labelMaxWidth=\"max-w-[180px]\"\n tooltipContent={tooltipContent}\n onClick={onClick}\n className={className}\n data-testid={`tag-entity-${tag.external_id}`}\n />\n )\n}\n","/**\n * ProjectEntity Component\n *\n * Fully-rounded pill for a \"project\" (a.k.a. a \"matter\" in some consumer apps).\n * The viewer's relationship to the project drives an INVERTED (solid-fill)\n * colour so the kinds read at a glance:\n * - your paid project → primary\n * - someone else's → secondary\n * - your free project → grey\n * \"Common\" keeps the neutral, non-inverted muted pill.\n *\n * Promoted from the ARBI app and DECOUPLED: no store/stripe deps. The icon\n * defaults to a generic `Package` glyph and can be overridden via `icon`, and\n * the display text via `label` (falls back to `name`) so consumers can relabel\n * a \"project\" as a \"matter\", \"case\", etc.\n */\n\nimport React from 'react'\nimport { Package } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { cn } from '../lib/utils'\n\nexport type ProjectRelation = 'mine' | 'other' | 'common'\n\nexport interface ProjectEntityProps {\n name: string\n /** Display text override (defaults to `name`) — lets a consumer relabel. */\n label?: string\n /** Icon override (defaults to a generic Package glyph). */\n icon?: React.ReactNode\n subscription?: string\n hasCollaborators?: boolean\n size?: 'sm' | 'base'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Viewer's relationship to the project — drives the inverted pill colour. */\n relation?: ProjectRelation\n /** Whether the given `subscription` should be treated as paid. When omitted,\n * it's inferred from the `subscription` value ('active' | 'past_due' | 'dev'). */\n isPaid?: boolean\n /** Hover tooltip. */\n tooltipContent?: React.ReactNode\n}\n\ntype PillVariant = 'mine-paid' | 'mine-free' | 'other' | 'common'\n\nconst VARIANT_STYLES: Record<PillVariant, { pill: string; icon: string }> = {\n 'mine-paid': {\n pill: 'bg-primary text-primary-foreground border-transparent',\n icon: 'text-primary-foreground',\n },\n other: {\n pill: 'bg-secondary text-secondary-foreground border-transparent',\n icon: 'text-secondary-foreground',\n },\n 'mine-free': {\n pill: 'bg-muted-foreground text-background border-transparent',\n icon: 'text-background',\n },\n common: {\n pill: '',\n icon: 'text-muted-foreground',\n },\n}\n\nfunction resolveVariant(\n relation: ProjectRelation | undefined,\n paid: boolean,\n hasCollaborators: boolean\n): PillVariant {\n if (relation === 'common') return 'common'\n if (relation === 'other') return 'other'\n if (relation === 'mine') return paid ? 'mine-paid' : 'mine-free'\n // Legacy, subscription-driven callers (no relation given).\n if (paid) return hasCollaborators ? 'other' : 'mine-paid'\n return 'mine-free'\n}\n\nexport function ProjectEntity({\n name,\n label,\n icon,\n subscription = 'none',\n hasCollaborators = false,\n size = 'sm',\n className,\n onClick,\n relation,\n isPaid,\n tooltipContent,\n}: ProjectEntityProps) {\n const paid =\n isPaid ?? (subscription === 'active' || subscription === 'past_due' || subscription === 'dev')\n const variant = resolveVariant(relation, paid, hasCollaborators)\n const { pill, icon: iconClass } = VARIANT_STYLES[variant]\n\n const iconSizeClass = size === 'base' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n const iconNode = icon ?? <Package className={cn(iconSizeClass, iconClass)} />\n\n return (\n <EntityPill\n icon={iconNode}\n label={label ?? name}\n size={size}\n shape=\"pill\"\n className={cn(pill, className)}\n onClick={onClick}\n tooltipContent={tooltipContent}\n />\n )\n}\n","/**\n * SDK-owned UI store for cross-block coordination.\n *\n * This is a SMALL, decoupled zustand store (NOT the ARBI app's multi-slice\n * store). Blocks such as `DocumentTable` use it as a fallback for selection /\n * \"viewing\" state when the consumer does not drive that state via props.\n */\n\nimport { create } from 'zustand'\n\nexport interface ArbiUiState {\n /** External ids of the currently selected documents. */\n selectedDocIds: string[]\n setSelectedDocIds: (ids: string[]) => void\n /** External id of the document currently being viewed/opened, if any. */\n viewingDocId: string | null\n setViewingDocId: (id: string | null) => void\n}\n\nexport const useArbiUiStore = create<ArbiUiState>((set) => ({\n selectedDocIds: [],\n setSelectedDocIds: (ids) => set({ selectedDocIds: ids }),\n viewingDocId: null,\n setViewingDocId: (id) => set({ viewingDocId: id }),\n}))\n","/**\n * DocumentTable — a reusable AG Grid (community) block that renders a\n * workspace's documents using the promoted entity pills.\n *\n * REUSE-FIRST: this composes AG Grid + `DocumentEntity`/`TagEntity` + the shadcn\n * `Badge`; it is not a bespoke table. Data comes from the SDK `useDocuments`\n * hook (or an explicit `documents` prop). Selection is controlled via\n * `selectedIds`/`onSelectionChange`, falling back to the SDK-owned\n * `useArbiUiStore` when those props are omitted.\n */\n\nimport React from 'react'\nimport { AgGridReact } from 'ag-grid-react'\nimport {\n ModuleRegistry,\n AllCommunityModule,\n type ColDef,\n type ICellRendererParams,\n type RowClickedEvent,\n type SelectionChangedEvent,\n type GridReadyEvent,\n} from 'ag-grid-community'\nimport type { components } from '@arbidocs/client'\n\nimport { useDocuments, useTags } from '../hooks'\nimport { useArbiUiStore } from '../store'\nimport { DocumentEntity } from '../entities/DocumentEntity'\nimport { TagEntity } from '../entities/TagEntity'\nimport { Badge } from '../ui/badge'\n\n// Register the community modules once, at import time (matches the app's usage).\nModuleRegistry.registerModules([AllCommunityModule])\n\ntype DocResponse = components['schemas']['DocResponse']\n\nexport interface DocumentTableProps {\n /** Workspace to load documents from (used when `documents` is not supplied). */\n workspaceId?: string\n /** Explicit rows. When provided, `useDocuments` is not called. */\n documents?: DocResponse[]\n /** Called when a row (document) is opened — row click or name-pill click. */\n onOpenDocument?: (id: string) => void\n /** Controlled selection (external ids). Falls back to the SDK ui store. */\n selectedIds?: string[]\n /** Called with the new selection (external ids). Falls back to the SDK ui store. */\n onSelectionChange?: (ids: string[]) => void\n /** Grid height. Number → pixels; string passed through. Default 480. */\n height?: number | string\n className?: string\n}\n\n/** Format a byte count as a compact human-readable size. */\nfunction formatBytes(bytes?: number | null): string {\n if (bytes == null || Number.isNaN(bytes)) return '—'\n if (bytes < 1024) return `${bytes} B`\n const units = ['KB', 'MB', 'GB', 'TB']\n let value = bytes / 1024\n let i = 0\n while (value >= 1024 && i < units.length - 1) {\n value /= 1024\n i++\n }\n return `${value.toFixed(value >= 10 || i === 0 ? 0 : 1)} ${units[i]}`\n}\n\nconst STATUS_VARIANTS: Record<string, 'default' | 'secondary' | 'destructive' | 'outline'> = {\n completed: 'default',\n empty: 'secondary',\n 'low-content': 'secondary',\n processing: 'outline',\n queued: 'outline',\n failed: 'destructive',\n skipped: 'destructive',\n}\n\nexport function DocumentTable({\n workspaceId,\n documents,\n onOpenDocument,\n selectedIds,\n onSelectionChange,\n height = 480,\n className,\n}: DocumentTableProps) {\n // Server data via the SDK hook, unless rows are supplied directly.\n const query = useDocuments(workspaceId, { enabled: !documents })\n const rows = documents ?? query.data ?? []\n const isLoading = !documents && query.isLoading\n\n // Resolve tag ids → human names so the \"Labels\" column shows real AI tags\n // (e.g. \"Issue\", \"Relevance\") rather than opaque id prefixes.\n const tagsQuery = useTags(workspaceId)\n const tagNameById = React.useMemo(() => {\n const map = new Map<string, string>()\n for (const t of tagsQuery.data ?? []) {\n if (t.external_id) map.set(t.external_id, t.name ?? t.external_id.slice(0, 8))\n }\n return map\n }, [tagsQuery.data])\n\n // Selection: controlled via props, else the SDK-owned ui store.\n const storeSelected = useArbiUiStore((s) => s.selectedDocIds)\n const storeSetSelected = useArbiUiStore((s) => s.setSelectedDocIds)\n const viewingDocId = useArbiUiStore((s) => s.viewingDocId)\n const setViewingDocId = useArbiUiStore((s) => s.setViewingDocId)\n\n const effectiveSelected = selectedIds ?? storeSelected\n const emitSelection = onSelectionChange ?? storeSetSelected\n\n const gridApiRef = React.useRef<GridReadyEvent['api'] | null>(null)\n\n const openDocument = React.useCallback(\n (id: string) => {\n setViewingDocId(id)\n onOpenDocument?.(id)\n },\n [onOpenDocument, setViewingDocId]\n )\n\n // Sync the incoming `effectiveSelected` down into the grid's node selection.\n const applySelection = React.useCallback(() => {\n const api = gridApiRef.current\n if (!api) return\n const wanted = new Set(effectiveSelected)\n api.forEachNode((node) => {\n const id = (node.data as DocResponse | undefined)?.external_id\n const shouldSelect = !!id && wanted.has(id)\n if (node.isSelected() !== shouldSelect) node.setSelected(shouldSelect)\n })\n }, [effectiveSelected])\n\n React.useEffect(() => {\n applySelection()\n }, [applySelection])\n\n const columnDefs = React.useMemo<ColDef<DocResponse>[]>(\n () => [\n {\n colId: 'select',\n headerName: '',\n width: 44,\n pinned: 'left',\n checkboxSelection: true,\n headerCheckboxSelection: true,\n sortable: false,\n filter: false,\n resizable: false,\n suppressMovable: true,\n },\n {\n colId: 'title',\n headerName: 'Document Name',\n flex: 3,\n minWidth: 240,\n sortable: true,\n valueGetter: (p) => p.data?.doc_metadata?.title || p.data?.file_name || '',\n cellRenderer: (p: ICellRendererParams<DocResponse>) => {\n const doc = p.data\n if (!doc) return null\n return (\n <DocumentEntity\n doc={doc}\n size=\"base\"\n fullWidth\n showHoverEye\n viewing={viewingDocId === doc.external_id}\n onClick={(e) => {\n e.stopPropagation()\n if (doc.external_id) openDocument(doc.external_id)\n }}\n />\n )\n },\n },\n {\n colId: 'status',\n headerName: 'Status',\n width: 140,\n sortable: true,\n field: 'status',\n cellRenderer: (p: ICellRendererParams<DocResponse>) => {\n const status = p.data?.status\n if (!status) return null\n return (\n <Badge variant={STATUS_VARIANTS[status.toLowerCase()] ?? 'secondary'}>{status}</Badge>\n )\n },\n },\n {\n colId: 'all_tags',\n headerName: 'Labels',\n flex: 1,\n minWidth: 160,\n sortable: false,\n filter: false,\n cellRenderer: (p: ICellRendererParams<DocResponse>) => {\n const doctags = p.data?.doctags ?? []\n if (doctags.length === 0) return null\n return (\n <div className=\"flex flex-wrap items-center gap-1 py-1\">\n {doctags.map((dt) => (\n <TagEntity\n key={dt.tag_ext_id}\n size=\"sm\"\n tag={{\n external_id: dt.tag_ext_id,\n name: tagNameById.get(dt.tag_ext_id) ?? dt.tag_ext_id.slice(0, 8),\n }}\n />\n ))}\n </div>\n )\n },\n },\n {\n colId: 'file_size',\n headerName: 'Size',\n width: 110,\n sortable: true,\n field: 'file_size',\n valueFormatter: (p) => formatBytes(p.value as number | null | undefined),\n },\n {\n colId: 'folder',\n headerName: 'Folder',\n flex: 1,\n minWidth: 140,\n sortable: true,\n field: 'folder',\n valueFormatter: (p) => (p.value as string | null | undefined) || '—',\n },\n ],\n [openDocument, viewingDocId, tagNameById]\n )\n\n const handleGridReady = (e: GridReadyEvent) => {\n gridApiRef.current = e.api\n applySelection()\n }\n\n const handleSelectionChanged = (e: SelectionChangedEvent) => {\n const ids = e.api\n .getSelectedRows()\n .map((r) => (r as DocResponse).external_id)\n .filter((id): id is string => !!id)\n emitSelection(ids)\n }\n\n const handleRowClicked = (e: RowClickedEvent) => {\n const id = (e.data as DocResponse | undefined)?.external_id\n if (id) openDocument(id)\n }\n\n const getRowId = React.useCallback((params: { data: DocResponse }) => params.data.external_id, [])\n\n const autoHeight = height === 'auto'\n const style: React.CSSProperties = autoHeight\n ? {}\n : { height: typeof height === 'number' ? `${height}px` : height, width: '100%' }\n\n if (isLoading) {\n return (\n <div className={className} style={style}>\n <div className=\"flex h-full w-full items-center justify-center p-8 text-sm text-muted-foreground\">\n Loading documents…\n </div>\n </div>\n )\n }\n\n if (rows.length === 0) {\n return (\n <div className={className} style={style}>\n <div className=\"flex h-full w-full items-center justify-center p-8 text-sm text-muted-foreground\">\n No documents\n </div>\n </div>\n )\n }\n\n return (\n <div className={className} style={style}>\n <AgGridReact<DocResponse>\n columnDefs={columnDefs}\n rowData={rows}\n getRowId={getRowId}\n rowSelection=\"multiple\"\n suppressRowClickSelection\n domLayout={autoHeight ? 'autoHeight' : 'normal'}\n rowHeight={44}\n onGridReady={handleGridReady}\n onSelectionChanged={handleSelectionChanged}\n onRowClicked={handleRowClicked}\n />\n </div>\n )\n}\n"]}