@arbidocs/react 0.3.102 → 0.3.103
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.cjs.map +1 -1
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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 { SSEStreamResult, SSEStreamStartData, AgentStepEvent } 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 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/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"]}
|