@arbidocs/react 0.3.65 → 0.3.67
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 +7 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -691,7 +691,12 @@ function WorkspaceScreen({ theme, labels, onSelect }) {
|
|
|
691
691
|
setLoading(true);
|
|
692
692
|
setError("");
|
|
693
693
|
try {
|
|
694
|
-
const
|
|
694
|
+
const projects = await arbi.projects.list();
|
|
695
|
+
const projectExtId = projects[0]?.external_id;
|
|
696
|
+
if (!projectExtId) {
|
|
697
|
+
throw new Error("No project available; create one before adding a workspace");
|
|
698
|
+
}
|
|
699
|
+
const ws = await arbi.workspaces.create(name, projectExtId);
|
|
695
700
|
await arbi.selectWorkspace(ws.external_id);
|
|
696
701
|
onSelect(ws.external_id);
|
|
697
702
|
} catch (err) {
|
|
@@ -930,7 +935,7 @@ function ChatView({ workspaceId, theme, labels }) {
|
|
|
930
935
|
const newIds = [];
|
|
931
936
|
for (const file of Array.from(files)) {
|
|
932
937
|
const result = await arbi.documents.uploadFile(file, file.name);
|
|
933
|
-
newIds.push(...result.doc_ext_ids);
|
|
938
|
+
if (result.doc_ext_ids) newIds.push(...result.doc_ext_ids);
|
|
934
939
|
}
|
|
935
940
|
await refetchDocs();
|
|
936
941
|
setSelectedDocs((prev) => [...prev, ...newIds]);
|
package/dist/index.cjs.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"],"names":["createContext","useMemo","Arbi","useContext","useState","jsxs","jsx","useQuery","useMutation","resolveCitations","summarizeCitations","useRef","useEffect","useCallback","Fragment","QueryClient","QueryClientProvider"],"mappings":"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","file":"index.cjs","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}\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","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 const ws = await arbi.workspaces.create(name)\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 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 } 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 const handleLogin = useCallback(async () => {\n if (initialWorkspaceId) {\n try {\n await arbi.selectWorkspace(initialWorkspaceId)\n setScreen('chat')\n } catch {\n // Fall back to workspace selection if the provided ID fails\n setScreen('workspace')\n }\n } else {\n setScreen('workspace')\n }\n }, [arbi, initialWorkspaceId])\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/**\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 const theme = useMemo(() => getTheme(themeOverrides), [themeOverrides])\n const labels = useMemo(() => getLabels(labelOverrides), [labelOverrides])\n\n return (\n <QueryClientProvider client={queryClient}>\n <ArbiProvider url={url}>\n <ChatWidget\n theme={theme}\n labels={labels}\n initialWorkspaceId={workspaceId}\n width={width}\n height={height}\n />\n </ArbiProvider>\n </QueryClientProvider>\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"],"names":["createContext","useMemo","Arbi","useContext","useState","jsxs","jsx","useQuery","useMutation","resolveCitations","summarizeCitations","useRef","useEffect","useCallback","Fragment","QueryClient","QueryClientProvider"],"mappings":";;;;;;;;AAYO,IAAM,WAAA,GAAcA,oBAA2B,IAAI,CAAA;AAMnD,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,GAAG,SAAQ,EAAsB;AACxE,EAAA,MAAM,IAAA,GAAOC,aAAA;AAAA,IACX,MAAM,IAAIC,YAAA,CAAK,OAAO,CAAA;AAAA;AAAA;AAAA,IAGtB,CAAC,OAAA,CAAQ,GAAA,EAAK,OAAA,CAAQ,gBAAA,EAAkB,QAAQ,WAAW;AAAA,GAC7D;AAEA,EAAA,sCAAQ,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,MAAO,QAAA,EAAS,CAAA;AACtD;;;AChBA,IAAM,aAAA,GAA+B;AAAA,EACnC,YAAA,EAAc,SAAA;AAAA,EACd,eAAA,EAAiB,SAAA;AAAA,EACjB,YAAA,EAAc,SAAA;AAAA,EACd,SAAA,EAAW,SAAA;AAAA,EACX,UAAA,EAAY,SAAA;AAAA,EACZ,WAAA,EAAa,SAAA;AAAA,EACb,eAAA,EAAiB,SAAA;AAAA,EACjB,mBAAA,EAAqB,SAAA;AAAA,EACrB,oBAAA,EAAsB,yBAAA;AAAA,EACtB,wBAAA,EAA0B,SAAA;AAAA,EAC1B,YAAA,EAAc,KAAA;AAAA,EACd,UAAA,EACE;AACJ,CAAA;AAEA,IAAM,cAAA,GAAiC;AAAA,EACrC,KAAA,EAAO,MAAA;AAAA,EACP,KAAA,EAAO,OAAA;AAAA,EACP,QAAA,EAAU,UAAA;AAAA,EACV,WAAA,EAAa,QAAA;AAAA,EACb,kBAAA,EAAoB,eAAA;AAAA,EACpB,cAAA,EAAgB,gBAAA;AAAA,EAChB,cAAA,EAAgB,iBAAA;AAAA,EAChB,cAAA,EAAgB,2BAAA;AAAA,EAChB,gBAAA,EAAkB,mBAAA;AAAA,EAClB,eAAA,EAAiB,kBAAA;AAAA,EACjB,SAAA,EAAW,YAAA;AAAA,EACX,QAAA,EAAU,WAAA;AAAA,EACV,gBAAA,EAAkB,gBAAA;AAAA,EAClB,aAAA,EAAe,eAAA;AAAA,EACf,eAAA,EAAiB,oBAAA;AAAA,EACjB,oBAAA,EAAsB,WAAA;AAAA,EACtB,cAAA,EAAgB,UAAA;AAAA,EAChB,eAAA,EAAiB,sBAAA;AAAA,EACjB,aAAA,EAAe,gBAAA;AAAA,EACf,YAAA,EAAc,QAAA;AAAA,EACd,eAAA,EAAiB,kBAAA;AAAA,EACjB,SAAA,EAAW,WAAA;AAAA,EACX,UAAA,EAAY,MAAA;AAAA,EACZ,WAAA,EAAa,mBAAA;AAAA,EACb,YAAA,EAAc,QAAA;AAAA,EACd,SAAA,EAAW,cAAA;AAAA,EACX,WAAA,EAAa,uCAAA;AAAA,EACb,gBAAA,EAAkB,iDAAA;AAAA,EAClB,UAAA,EAAY;AACd,CAAA;AAEO,SAAS,SAAS,OAAA,EAAiD;AACxE,EAAA,OAAO,EAAE,GAAG,aAAA,EAAe,GAAG,OAAA,EAAQ;AACxC;AAEO,SAAS,UAAU,OAAA,EAA0C;AAClE,EAAA,OAAO,EAAE,GAAG,cAAA,EAAgB,GAAG,OAAA,EAAQ;AACzC;AAIO,SAAS,cAAA,CACd,KAAA,EACA,KAAA,EACA,MAAA,EACe;AACf,EAAA,OAAO;AAAA,IACL,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AAAA,IAClD,QAAQ,OAAO,MAAA,KAAW,QAAA,GAAW,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,IACrD,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IACtC,cAAc,KAAA,CAAM,YAAA;AAAA,IACpB,QAAA,EAAU,QAAA;AAAA,IACV,SAAA,EAAW;AAAA,GACb;AACF;AAEO,SAAS,YAAY,KAAA,EAAqC;AAC/D,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS,WAAA;AAAA,IACT,UAAA,EAAY,GAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,YAAA,EAAc,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IAC5C,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,SAAA,GAA2B;AACzC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,QAAA,EAAU;AAAA,GACZ;AACF;AAIO,SAAS,kBAAA,GAAoC;AAClD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,cAAA,EAAgB,QAAA;AAAA,IAChB,OAAA,EAAS,WAAA;AAAA,IACT,GAAA,EAAK;AAAA,GACP;AACF;AAEO,SAAS,WAAW,KAAA,EAAqC;AAC9D,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AACF;AAEO,SAAS,WAAW,KAAA,EAAqC;AAC9D,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAA;AAAA,IACP,OAAA,EAAS,UAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IACtC,YAAA,EAAc,KAAA;AAAA,IACd,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW;AAAA,GACb;AACF;AAEO,SAAS,YAAY,KAAA,EAAqC;AAC/D,EAAA,OAAO;AAAA,IACL,GAAG,WAAW,KAAK,CAAA;AAAA,IACnB,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,WAAA,CAAY,OAAsB,QAAA,EAAmC;AACnF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,KAAA,EAAO,SAAA;AAAA,IACP,eAAA,EAAiB,QAAA,GAAW,KAAA,CAAM,UAAA,GAAa,KAAA,CAAM,YAAA;AAAA,IACrD,MAAA,EAAQ,MAAA;AAAA,IACR,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,WAAW,aAAA,GAAgB,SAAA;AAAA,IACnC,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,IAC1B,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,UAAA,GAA4B;AAC1C,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACV;AACF;AAIO,SAAS,sBAAA,GAAwC;AACtD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,OAAA,EAAS,WAAA;AAAA,IACT,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK;AAAA,GACP;AACF;AAEO,SAAS,kBAAA,CACd,OACA,IAAA,EACe;AACf,EAAA,MAAM,SAAS,IAAA,KAAS,MAAA;AACxB,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,KAAA;AAAA,IACV,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,MAAA;AAAA,IACd,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW,YAAA;AAAA,IACX,UAAA,EAAY,UAAA;AAAA,IACZ,SAAA,EAAW,SAAS,UAAA,GAAa,YAAA;AAAA,IACjC,eAAA,EAAiB,MAAA,GAAS,KAAA,CAAM,eAAA,GAAkB,KAAA,CAAM,oBAAA;AAAA,IACxD,KAAA,EAAO,MAAA,GAAS,KAAA,CAAM,mBAAA,GAAsB,KAAA,CAAM;AAAA,GACpD;AACF;AAEO,SAAS,cAAc,KAAA,EAAqC;AACjE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,GAAA,EAAK,KAAA;AAAA,IACL,OAAA,EAAS,WAAA;AAAA,IACT,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IACzC,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,eAAe,KAAA,EAAqC;AAClE,EAAA,OAAO;AAAA,IACL,GAAG,WAAW,KAAK,CAAA;AAAA,IACnB,IAAA,EAAM;AAAA,GACR;AACF;AAEO,SAAS,eAAA,CAAgB,OAAsB,QAAA,EAAmC;AACvF,EAAA,OAAO;AAAA,IACL,GAAG,WAAA,CAAY,KAAA,EAAO,QAAQ,CAAA;AAAA,IAC9B,OAAA,EAAS,UAAA;AAAA,IACT,UAAA,EAAY;AAAA,GACd;AACF;AAIO,SAAS,iBAAiB,KAAA,EAAqC;AACpE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,YAAA,EAAc,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IAC5C,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,eAAe,KAAA,EAAqC;AAClE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,MAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,CAAA;AAAA,IACT,YAAY,KAAA,CAAM;AAAA,GACpB;AACF;AAEO,SAAS,YAAA,GAA8B;AAC5C,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,OAAA,EAAS,MAAA;AAAA,IACT,aAAA,EAAe,QAAA;AAAA,IACf,GAAA,EAAK,KAAA;AAAA,IACL,SAAA,EAAW,OAAA;AAAA,IACX,SAAA,EAAW;AAAA,GACb;AACF;AAEO,SAAS,aAAa,KAAA,EAAqC;AAChE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,SAAA,EAAW;AAAA,GACb;AACF;AAEO,SAAS,gBAAgB,KAAA,EAAqC;AACnE,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,QAAA,EAAU,MAAA;AAAA,IACV,OAAA,EAAS,MAAA;AAAA,IACT,SAAA,EAAW;AAAA,GACb;AACF;AAEO,SAAS,qBAAA,GAAuC;AACrD,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,GAAA,EAAK,KAAA;AAAA,IACL,QAAA,EAAU;AAAA,GACZ;AACF;AAEO,SAAS,cAAc,KAAA,EAAqC;AACjE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,MAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,GAAA,EAAK,KAAA;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,SAAA,EAAW,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IACzC,UAAA,EAAY,CAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,kBAAkB,KAAA,EAAqC;AACrE,EAAA,OAAO;AAAA,IACL,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,UAAA,EAAY,GAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GAClB;AACF;AAIO,SAAS,gBAAgB,KAAA,EAAqC;AACnE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,MAAA;AAAA,IACZ,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,CAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,OAAO,KAAA,CAAM,YAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,cAAA,EAAgB;AAAA,GAClB;AACF;AAEO,SAAS,oBAAA,CAAqB,OAAsB,QAAA,EAAmC;AAC5F,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,UAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,YAAY,KAAA,CAAM,UAAA;AAAA,IAClB,KAAA,EAAO,QAAA,GAAW,KAAA,CAAM,UAAA,GAAa,KAAA,CAAM,YAAA;AAAA,IAC3C,eAAA,EAAiB,aAAA;AAAA,IACjB,QAAQ,CAAA,UAAA,EAAa,QAAA,GAAW,KAAA,CAAM,WAAA,GAAc,MAAM,YAAY,CAAA,CAAA;AAAA,IACtE,YAAA,EAAc,KAAA;AAAA,IACd,MAAA,EAAQ,WAAW,aAAA,GAAgB,SAAA;AAAA,IACnC,OAAA,EAAS,WAAW,GAAA,GAAM,CAAA;AAAA,IAC1B,UAAA,EAAY,eAAA;AAAA,IACZ,UAAA,EAAY;AAAA,GACd;AACF;AAEO,SAAS,cAAA,GAAgC;AAC9C,EAAA,OAAO,EAAE,SAAS,MAAA,EAAO;AAC3B;AAEO,SAAS,iBAAiB,KAAA,EAAqC;AACpE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,SAAA,EAAW,QAAA;AAAA,IACX,OAAA,EAAS,OAAA;AAAA,IACT,SAAA,EAAW;AAAA,GACb;AACF;AClXO,SAAS,OAAA,GAAgB;AAC9B,EAAA,MAAM,IAAA,GAAOC,iBAAW,WAAW,CAAA;AACnC,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,OAAO,IAAA;AACT;ACOO,SAAS,UAAA,CAAW,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAQ,EAAoB;AACtE,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,eAAmB,OAAO,CAAA;AAClD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAuB,OAAO,CAAA;AAEtD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,eAAS,EAAE,CAAA;AACnC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AAErC,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,YAAA,CAAa,EAAE,CAAA;AACf,IAAA,OAAA,CAAQ,EAAE,CAAA;AACV,IAAA,YAAA,CAAa,EAAE,CAAA;AACf,IAAA,WAAA,CAAY,EAAE,CAAA;AACd,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,OAAA,CAAQ,OAAO,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAmB;AACrC,IAAA,SAAA,EAAU;AACV,IAAA,OAAA,CAAQ,IAAI,CAAA;AAAA,EACd,CAAA;AAIA,EAAA,MAAM,WAAA,GAAc,OAAO,CAAA,KAAiB;AAC1C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAChC,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,cAAc,CAAA;AAAA,IAC9D,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAIA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,EAClB,CAAA;AAIA,EAAA,MAAM,kBAAkB,YAAY;AAClC,IAAA,IAAI,CAAC,KAAA,EAAO;AACZ,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,oBAAoB,KAAK,CAAA;AACpC,MAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,IAClB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,kCAAkC,CAAA;AAAA,IAClF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAIA,EAAA,MAAM,cAAA,GAAiB,OAAO,CAAA,KAAiB;AAC7C,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,aAAa,SAAA,EAAW;AAC1B,MAAA,QAAA,CAAS,wBAAwB,CAAA;AACjC,MAAA;AAAA,IACF;AACA,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,SAAS,EAAE,KAAA,EAAO,UAAU,gBAAA,EAAkB,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,CAAA;AACpF,MAAA,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,EAAO,QAAQ,CAAA;AAChC,MAAA,OAAA,EAAQ;AAAA,IACV,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,qBAAqB,CAAA;AAAA,IACrE,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAIA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,uCACG,MAAA,EAAA,EAAK,QAAA,EAAU,WAAA,EAAa,KAAA,EAAO,oBAAmB,EACrD,QAAA,EAAA;AAAA,sBAAAC,eAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,KAAA,EAAM,CAAA;AAAA,wBAC7CA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,KAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,WAAA,EAAY,iBAAA;AAAA,YACZ,YAAA,EAAa,OAAA;AAAA,YACb,QAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,OAAA,EACF,CAAA;AAAA,sCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,QAAA,EAAS,CAAA;AAAA,wBAChDA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,UAAA;AAAA,YACL,KAAA,EAAO,QAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC3C,YAAA,EAAa,kBAAA;AAAA,YACb,QAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,OAAA,EACF,CAAA;AAAA,sBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,UAAU,OAAA,EAAS,KAAA,EAAO,WAAA,CAAY,KAAA,EAAO,OAAO,CAAA,EACvE,QAAA,EAAA,OAAA,GAAU,MAAA,CAAO,kBAAA,GAAqB,OAAO,WAAA,EAChD,CAAA;AAAA,MACC,yBAASA,cAAAA,CAAC,SAAI,KAAA,EAAO,UAAA,IAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC3CA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,IACvB,QAAA,kBAAAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,MAAM,UAAA,CAAW,UAAU,CAAA;AAAA,UACpC,KAAA,EAAO,gBAAgB,KAAK,CAAA;AAAA,UAE3B,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,OACV,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,IAAI,SAAS,OAAA,EAAS;AACpB,IAAA,MAAM,OAAA,GAAU,CAAC,KAAA,CAAM,IAAA,EAAK;AAC5B,IAAA,uBACED,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,kBAAA,EAAmB,EAC7B,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,KAAA,EAAM,CAAA;AAAA,wBAC7CA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,OAAA;AAAA,YACL,KAAA,EAAO,KAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACxC,WAAA,EAAY,iBAAA;AAAA,YACZ,YAAA,EAAa,OAAA;AAAA,YACb,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,OAAA,EACF,CAAA;AAAA,sBACAD,eAAA,CAAC,SAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,GAAA,EAAK,OAAM,EACxC,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,cAAA;AAAA,YACT,QAAA,EAAU,OAAA;AAAA,YACV,KAAA,EAAO,EAAE,GAAG,WAAA,CAAY,OAAO,OAAO,CAAA,EAAG,MAAM,CAAA,EAAE;AAAA,YAEhD,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,SACV;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,eAAA;AAAA,YACT,UAAU,OAAA,IAAW,OAAA;AAAA,YACrB,KAAA,EAAO,EAAE,GAAG,WAAA,CAAY,OAAO,OAAA,IAAW,OAAO,CAAA,EAAG,IAAA,EAAM,CAAA,EAAE;AAAA,YAE3D,QAAA,EAAA,OAAA,GAAU,QAAQ,MAAA,CAAO;AAAA;AAAA;AAC5B,OAAA,EACF,CAAA;AAAA,MACC,yBAASA,cAAAA,CAAC,SAAI,KAAA,EAAO,UAAA,IAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC3CA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,WAAW,QAAA,EAAS,EAChC,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,MAAM,UAAA,CAAW,OAAO,CAAA,EAAG,KAAA,EAAO,gBAAgB,KAAK,CAAA,EACnF,QAAA,EAAA,MAAA,CAAO,aAAA,EACV,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAIA,EAAA,uCACG,MAAA,EAAA,EAAK,QAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,oBAAmB,EACxD,QAAA,EAAA;AAAA,oBAAAD,eAAA,CAAC,SAAI,KAAA,EAAO,EAAE,SAAS,MAAA,EAAQ,GAAA,EAAK,OAAM,EACxC,QAAA,EAAA;AAAA,sBAAAA,eAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EACpB,QAAA,EAAA;AAAA,wBAAAC,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,SAAA,EAAU,CAAA;AAAA,wBACjDA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,SAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC5C,YAAA,EAAa,YAAA;AAAA,YACb,QAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,OAAA,EACF,CAAA;AAAA,sCACC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,IAAA,EAAM,GAAE,EACpB,QAAA,EAAA;AAAA,wBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,QAAA,EAAS,CAAA;AAAA,wBAChDA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,QAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC3C,YAAA,EAAa,aAAA;AAAA,YACb,QAAA,EAAQ,IAAA;AAAA,YACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,gBAAA,EAAiB,CAAA;AAAA,sBACxDA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,IAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACvC,YAAA,EAAa,eAAA;AAAA,UACb,QAAA,EAAQ,IAAA;AAAA,UACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,KAAA,EACF,CAAA;AAAA,oCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,QAAA,EAAS,CAAA;AAAA,sBAChDA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,QAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAC3C,YAAA,EAAa,cAAA;AAAA,UACb,QAAA,EAAQ,IAAA;AAAA,UACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,KAAA,EACF,CAAA;AAAA,oCACC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,eAAA,EAAgB,CAAA;AAAA,sBACvDA,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,UAAA;AAAA,UACL,KAAA,EAAO,SAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAC5C,YAAA,EAAa,cAAA;AAAA,UACb,QAAA,EAAQ,IAAA;AAAA,UACR,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,KAAA,EACF,CAAA;AAAA,oBACAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,QAAA,EAAU,OAAA,EAAS,KAAA,EAAO,WAAA,CAAY,OAAO,OAAO,CAAA,EACvE,QAAA,EAAA,OAAA,GAAU,KAAA,GAAQ,OAAO,cAAA,EAC5B,CAAA;AAAA,IACC,yBAASA,cAAAA,CAAC,SAAI,KAAA,EAAO,UAAA,IAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC3CA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,WAAW,QAAA,EAAS,EAChC,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAO,IAAA,EAAK,UAAS,OAAA,EAAS,MAAM,UAAA,CAAW,OAAO,CAAA,EAAG,KAAA,EAAO,gBAAgB,KAAK,CAAA,EACnF,QAAA,EAAA,MAAA,CAAO,aAAA,EACV,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACtQO,IAAM,aAAA,GAAgB;AAAA,EAC3B,UAAA,EAAY,MAAM,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,EACvC,WAAW,CAAC,WAAA,KAAwB,CAAC,MAAA,EAAQ,aAAa,WAAW,CAAA;AAAA,EACrE,eAAe,CAAC,WAAA,KAAwB,CAAC,MAAA,EAAQ,iBAAiB,WAAW,CAAA;AAAA,EAC7E,MAAM,CAAC,WAAA,KAAwB,CAAC,MAAA,EAAQ,QAAQ,WAAW,CAAA;AAAA,EAC3D,MAAA,EAAQ,MAAM,CAAC,MAAA,EAAQ,QAAQ,CAAA;AAAA,EAC/B,QAAA,EAAU,MAAM,CAAC,MAAA,EAAQ,UAAU,CAAA;AAAA,EACnC,MAAA,EAAQ,MAAM,CAAC,MAAA,EAAQ,QAAQ;AACjC;AAKO,SAAS,cAAc,OAAA,EAAiC;AAC7D,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOC,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,cAAc,UAAA,EAAW;AAAA,IACnC,OAAA,EAAS,MAAM,IAAA,CAAK,UAAA,CAAW,IAAA,EAAK;AAAA,IACpC,OAAA,EAAS,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK;AAAA,GACnC,CAAA;AACH;AAGO,SAAS,YAAA,CAAa,aAAiC,OAAA,EAAiC;AAC7F,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOA,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,aAAA,CAAc,SAAA,CAAU,WAAA,IAAe,EAAE,CAAA;AAAA,IACnD,OAAA,EAAS,MAAM,IAAA,CAAK,SAAA,CAAU,IAAA,EAAK;AAAA,IACnC,UAAU,OAAA,EAAS,OAAA,IAAW,SAAS,CAAC,CAAC,eAAe,IAAA,CAAK;AAAA,GAC9D,CAAA;AACH;AAGO,SAAS,gBAAA,CAAiB,aAAiC,OAAA,EAAiC;AACjG,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOA,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,aAAA,CAAc,aAAA,CAAc,WAAA,IAAe,EAAE,CAAA;AAAA,IACvD,OAAA,EAAS,MAAM,IAAA,CAAK,aAAA,CAAc,IAAA,EAAK;AAAA,IACvC,UAAU,OAAA,EAAS,OAAA,IAAW,SAAS,CAAC,CAAC,eAAe,IAAA,CAAK;AAAA,GAC9D,CAAA;AACH;AAGO,SAAS,OAAA,CAAQ,aAAiC,OAAA,EAAiC;AACxF,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOA,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,aAAA,CAAc,IAAA,CAAK,WAAA,IAAe,EAAE,CAAA;AAAA,IAC9C,OAAA,EAAS,MAAM,IAAA,CAAK,IAAA,CAAK,IAAA,EAAK;AAAA,IAC9B,UAAU,OAAA,EAAS,OAAA,IAAW,SAAS,CAAC,CAAC,eAAe,IAAA,CAAK;AAAA,GAC9D,CAAA;AACH;AAGO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAM,OAAO,OAAA,EAAQ;AAErB,EAAA,OAAOC,sBAAA,CAcL;AAAA,IACA,UAAA,EAAY,CAAC,EAAE,QAAA,EAAU,GAAG,OAAA,EAAQ,KAAM,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,QAAA,EAAU,OAAO;AAAA,GACjF,CAAA;AACH;AAGO,SAAS,UAAU,OAAA,EAAiC;AACzD,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOD,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,cAAc,MAAA,EAAO;AAAA,IAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,CAAO,IAAA,EAAK;AAAA,IAChC,OAAA,EAAS,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK;AAAA,GACnC,CAAA;AACH;AAGO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOC,sBAAA,CAAuD;AAAA,IAC5D,UAAA,EAAY,CAAC,EAAE,WAAA,OAAkB,IAAA,CAAK,MAAA,CAAO,OAAO,WAAW;AAAA,GAChE,CAAA;AACH;AAGO,SAAS,YAAY,OAAA,EAAiC;AAC3D,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOD,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,cAAc,QAAA,EAAS;AAAA,IACjC,OAAA,EAAS,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AAAA,IAClC,OAAA,EAAS,OAAA,EAAS,OAAA,IAAW,IAAA,CAAK;AAAA,GACnC,CAAA;AACH;AAKO,SAAS,UAAU,OAAA,EAAiC;AACzD,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,OAAOA,mBAAA,CAAS;AAAA,IACd,QAAA,EAAU,cAAc,MAAA,EAAO;AAAA,IAC/B,OAAA,EAAS,MAAM,IAAA,CAAK,MAAA,CAAO,KAAA,EAAM;AAAA,IACjC,SAAS,OAAA,EAAS;AAAA,GACnB,CAAA;AACH;ACpGO,SAAS,eAAA,CAAgB,EAAE,KAAA,EAAO,MAAA,EAAQ,UAAS,EAAyB;AACjF,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,EAAE,IAAA,EAAM,UAAA,EAAY,SAAA,KAAc,aAAA,EAAc;AAEtD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIH,eAAqB,QAAQ,CAAA;AACrD,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AAErC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAOE,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,qBAAA,IAAyB,QAAA,EAAA,uBAAA,EAAqB,CAAA;AAAA,EACnE;AAIA,EAAA,MAAM,gBAAgB,YAAY;AAChC,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,gBAAgB,QAAQ,CAAA;AACnC,MAAA,QAAA,CAAS,QAAQ,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,4BAA4B,CAAA;AAAA,IAC5E,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAIA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,EAAK;AAC1B,IAAA,IAAI,CAAC,IAAA,EAAM;AACX,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,IAAI;AAQF,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK;AAC1C,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,CAAC,CAAA,EAAG,WAAA;AAClC,MAAA,IAAI,CAAC,YAAA,EAAc;AACjB,QAAA,MAAM,IAAI,MAAM,4DAA4D,CAAA;AAAA,MAC9E;AACA,MAAA,MAAM,KAAK,MAAM,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,MAAM,YAAY,CAAA;AAC1D,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAA,CAAG,WAAW,CAAA;AACzC,MAAA,QAAA,CAAS,GAAG,WAAW,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,QAAA,CAAS,GAAA,YAAe,KAAA,GAAQ,GAAA,CAAI,OAAA,GAAU,4BAA4B,CAAA;AAAA,IAC5E,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AAEA,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,oBAAmB,EAC7B,QAAA,EAAA;AAAA,sBAAAA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAC,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,aAAA,EAAc,CAAA;AAAA,wBACrDA,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,OAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC1C,QAAA,EAAU,OAAA;AAAA,YACV,KAAA,EAAO,WAAW,KAAK;AAAA;AAAA;AACzB,OAAA,EACF,CAAA;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,OAAA,EAAS,YAAA;AAAA,UACT,QAAA,EAAU,CAAC,OAAA,CAAQ,IAAA,EAAK,IAAK,OAAA;AAAA,UAC7B,OAAO,WAAA,CAAY,KAAA,EAAO,CAAC,OAAA,CAAQ,IAAA,MAAU,OAAO,CAAA;AAAA,UAEnD,QAAA,EAAA,OAAA,GAAU,QAAQ,MAAA,CAAO;AAAA;AAAA,OAC5B;AAAA,MACC,yBAASA,cAAAA,CAAC,SAAI,KAAA,EAAO,UAAA,IAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC3CA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,IACvB,QAAA,kBAAAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,SAAS,MAAM;AACb,YAAA,QAAA,CAAS,EAAE,CAAA;AACX,YAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,UAClB,CAAA;AAAA,UACA,KAAA,EAAO,gBAAgB,KAAK,CAAA;AAAA,UAC7B,QAAA,EAAA;AAAA;AAAA,OAED,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,oBAAmB,EAC7B,QAAA,EAAA;AAAA,oBAAAA,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAC,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAW,KAAK,CAAA,EAAI,iBAAO,eAAA,EAAgB,CAAA;AAAA,sBACvDD,eAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,QAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,WAAA,CAAY,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAC3C,QAAA,EAAU,OAAA;AAAA,UACV,KAAA,EAAO,YAAY,KAAK,CAAA;AAAA,UAExB,QAAA,EAAA;AAAA,4BAAAC,eAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAG,QAAA,EAAQ,IAAA,EACtB,iBAAO,oBAAA,EACV,CAAA;AAAA,YACC,UAAA,EAAY,GAAA,CAAI,CAAC,EAAA,qBAChBA,cAAAA,CAAC,QAAA,EAAA,EAA4B,KAAA,EAAO,EAAA,CAAG,WAAA,EACpC,QAAA,EAAA,EAAA,CAAG,IAAA,EAAA,EADO,EAAA,CAAG,WAEhB,CACD;AAAA;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,aAAA;AAAA,QACT,QAAA,EAAU,CAAC,QAAA,IAAY,OAAA;AAAA,QACvB,KAAA,EAAO,WAAA,CAAY,KAAA,EAAO,CAAC,YAAY,OAAO,CAAA;AAAA,QAE7C,QAAA,EAAA,OAAA,GAAU,kBAAkB,MAAA,CAAO;AAAA;AAAA,KACtC;AAAA,IACC,yBAASA,cAAAA,CAAC,SAAI,KAAA,EAAO,UAAA,IAAe,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC3CA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,SAAA,EAAW,QAAA,IACvB,QAAA,kBAAAA,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,SAAS,MAAM;AACb,UAAA,QAAA,CAAS,EAAE,CAAA;AACX,UAAA,OAAA,CAAQ,QAAQ,CAAA;AAAA,QAClB,CAAA;AAAA,QACA,KAAA,EAAO,gBAAgB,KAAK,CAAA;AAAA,QAE3B,QAAA,EAAA,MAAA,CAAO;AAAA;AAAA,KACV,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AC1JA,IAAM,OAAA,GAAU,8BAAA;AAGhB,SAAS,mBAAA,CACP,IAAA,EACA,KAAA,EACA,WAAA,EACa;AACb,EAAA,MAAM,QAAqB,EAAC;AAC5B,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,IAAI,KAAA;AAEJ,EAAA,OAAA,CAAQ,KAAA,GAAQ,OAAA,CAAQ,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAE5C,IAAA,IAAI,KAAA,CAAM,QAAQ,SAAA,EAAW;AAC3B,MAAA,KAAA,CAAM,KAAK,IAAA,CAAK,KAAA,CAAM,SAAA,EAAW,KAAA,CAAM,KAAK,CAAC,CAAA;AAAA,IAC/C;AACA,IAAA,MAAM,SAAA,GAAY,MAAM,CAAC,CAAA;AACzB,IAAA,MAAM,OAAA,GAAU,MAAM,CAAC,CAAA;AACvB,IAAA,KAAA,CAAM,IAAA;AAAA,sBACJD,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,wBACDC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,cAAA,CAAA,CAAE,eAAA,EAAgB;AAClB,cAAA,WAAA,CAAY,OAAO,CAAA;AAAA,YACrB,CAAA;AAAA,YACA,KAAA,EAAO,aAAa,KAAK,CAAA;AAAA,YACzB,KAAA,EAAO,YAAY,OAAO,CAAA,CAAA;AAAA,YAEzB,QAAA,EAAA;AAAA;AAAA;AACH,OAAA,EAAA,EAXS,CAAA,KAAA,EAAQ,KAAA,CAAM,KAAK,CAAA,CAY9B;AAAA,KACF;AACA,IAAA,SAAA,GAAY,KAAA,CAAM,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,CAAE,MAAA;AAAA,EACrC;AAGA,EAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,EAClC;AAEA,EAAA,OAAO,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,KAAA,GAAQ,CAAC,IAAI,CAAA;AACzC;AAEO,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,KAAA,EAAM,EAAuB;AACpE,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIF,eAAwB,IAAI,CAAA;AAEpE,EAAA,MAAM,YAAA,GACJ,QAAQ,IAAA,KAAS,WAAA,IAAe,QAAQ,QAAA,IAAY,OAAA,CAAQ,IAAA,CAAK,OAAA,CAAQ,IAAI,CAAA;AAG/E,EAAA,OAAA,CAAQ,SAAA,GAAY,CAAA;AAEpB,EAAA,MAAM,WAAW,YAAA,GACbK,wBAAA,CAAiB,OAAA,CAAQ,QAAkD,IAC3E,EAAC;AACL,EAAA,MAAM,SAAA,GAAY,YAAA,GAAeC,0BAAA,CAAmB,QAAQ,IAAI,EAAC;AACjE,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,SAAA,CAAU,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,WAAA,EAAa,CAAC,CAAC,CAAC,CAAA;AAEnE,EAAA,MAAM,eAAA,GAAkB,CAAC,GAAA,KAAgB;AACvC,IAAA,eAAA,CAAgB,CAAC,IAAA,KAAU,IAAA,KAAS,GAAA,GAAM,OAAO,GAAI,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,YAAA,GAAe,UAAA,CAAW,GAAA,CAAI,YAAY,CAAA,GAAI,IAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,eAAe,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,WAAA,KAAgB,YAAY,CAAA,GAAI,IAAA;AAE7F,EAAA,uBACEL,gBAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAC,eAAC,KAAA,EAAA,EAAI,KAAA,EAAO,kBAAA,CAAmB,KAAA,EAAO,QAAQ,IAAI,CAAA,EAC/C,QAAA,EAAA,YAAA,GAAe,mBAAA,CAAoB,QAAQ,IAAA,EAAM,KAAA,EAAO,eAAe,CAAA,GAAI,QAAQ,IAAA,EACtF,CAAA;AAAA,IACC,aAAA,IAAiB,kCAChBD,eAAAA,CAAC,SAAI,KAAA,EAAO,cAAA,CAAe,KAAK,CAAA,EAC9B,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,oBAAA,CAAqB,KAAK,CAAA,EACpC,QAAA,EAAA;AAAA,wBAAAA,gBAAC,QAAA,EAAA,EAAO,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,aAAA,CAAc,WAAA;AAAA,UAAY;AAAA,SAAA,EAAC,CAAA;AAAA,QAAS,GAAA;AAAA,QAAE,aAAA,CAAc,QAAA;AAAA,QAC7D,aAAA,CAAc,UAAA,IAAc,IAAA,oBAC3BA,eAAAA,CAAC,MAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,KAAA,CAAM,UAAA,EAAW,EAAG,QAAA,EAAA;AAAA,UAAA,KAAA;AAAA,UAAI,aAAA,CAAc;AAAA,SAAA,EAAW;AAAA,OAAA,EAE3E,CAAA;AAAA,MACC,eAAe,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,EAAO,sBACjCC,cAAAA,CAAC,KAAA,EAAA,EAAY,KAAA,EAAO,eAAe,KAAK,CAAA,EACrC,QAAA,EAAA,KAAA,CAAM,OAAA,EAAA,EADC,CAEV,CACD;AAAA,KAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAIA,SAAS,aAAa,KAAA,EAAqC;AACzD,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,QAAA;AAAA,IAChB,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAO,KAAA,CAAM,YAAA;AAAA,IACb,MAAA,EAAQ,SAAA;AAAA,IACR,UAAA,EAAY,KAAA;AAAA,IACZ,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AACF;AAEA,SAAS,eAAe,KAAA,EAAqC;AAC3D,EAAA,OAAO;AAAA,IACL,SAAA,EAAW,KAAA;AAAA,IACX,OAAA,EAAS,UAAA;AAAA,IACT,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,iBAAiB,KAAA,CAAM,YAAA;AAAA,IACvB,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IACtC,YAAA,EAAc,KAAA;AAAA,IACd,QAAA,EAAU;AAAA,GACZ;AACF;AAEA,SAAS,qBAAqB,KAAA,EAAqC;AACjE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,UAAA,EAAY,GAAA;AAAA,IACZ,OAAO,KAAA,CAAM,SAAA;AAAA,IACb,YAAA,EAAc;AAAA,GAChB;AACF;AAEA,SAAS,eAAe,KAAA,EAAqC;AAC3D,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,MAAA;AAAA,IACV,OAAO,KAAA,CAAM,UAAA;AAAA,IACb,UAAA,EAAY,CAAA,UAAA,EAAa,KAAA,CAAM,WAAW,CAAA,CAAA;AAAA,IAC1C,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,KAAA;AAAA,IACX,UAAA,EAAY,UAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACb;AACF;AC5HO,SAAS,QAAA,CAAS,EAAE,WAAA,EAAa,KAAA,EAAO,QAAO,EAAkB;AACtE,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,SAAS,WAAA,EAAY,GAAI,aAAa,WAAW,CAAA;AACrE,EAAA,MAAM,WAAW,iBAAA,EAAkB;AAEnC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIF,cAAAA,CAAwB,EAAE,CAAA;AAC1D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,cAAAA,CAAmB,EAAE,CAAA;AAC7D,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AACtD,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,eAAwB,IAAI,CAAA;AAChF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,cAAA,GAAiBO,aAAuB,IAAI,CAAA;AAClD,EAAA,MAAM,YAAA,GAAeA,aAAyB,IAAI,CAAA;AAGlD,EAAAC,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,QAAQ,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,YAAA,CAAa,WAAW,CAAA,EAAG;AACxD,MAAA,eAAA,CAAgB,KAAK,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAC,CAAA;AAAA,IAChD;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,YAAA,CAAa,MAAM,CAAC,CAAA;AAG9B,EAAAA,eAAA,CAAU,MAAM;AACd,IAAA,cAAA,CAAe,OAAA,EAAS,cAAA,CAAe,EAAE,QAAA,EAAU,UAAU,CAAA;AAAA,EAC/D,CAAA,EAAG,CAAC,QAAA,EAAU,SAAA,EAAW,WAAW,CAAC,CAAA;AAErC,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAkB;AACnC,IAAA,eAAA;AAAA,MAAgB,CAAC,IAAA,KACf,IAAA,CAAK,QAAA,CAAS,KAAK,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,EAAA,KAAO,OAAO,KAAK,CAAA,GAAI,CAAC,GAAG,MAAM,KAAK;AAAA,KAC5E;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GAAeC,iBAAA;AAAA,IACnB,OAAO,CAAA,KAAqC;AAC1C,MAAA,MAAM,KAAA,GAAQ,EAAE,MAAA,CAAO,KAAA;AACvB,MAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAClC,MAAA,YAAA,CAAa,IAAI,CAAA;AACjB,MAAA,IAAI;AACF,QAAA,MAAM,SAAmB,EAAC;AAC1B,QAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,EAAG;AACpC,UAAA,MAAM,SAAS,MAAM,IAAA,CAAK,UAAU,UAAA,CAAW,IAAA,EAAM,KAAK,IAAI,CAAA;AAI9D,UAAA,IAAI,OAAO,WAAA,EAAa,MAAA,CAAO,IAAA,CAAK,GAAG,OAAO,WAAW,CAAA;AAAA,QAC3D;AACA,QAAA,MAAM,WAAA,EAAY;AAClB,QAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,GAAG,MAAM,CAAC,CAAA;AAAA,MAChD,CAAA,CAAA,MAAQ;AAAA,MAER,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAElB,QAAA,IAAI,YAAA,CAAa,OAAA,EAAS,YAAA,CAAa,OAAA,CAAQ,KAAA,GAAQ,EAAA;AAAA,MACzD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM,WAAW;AAAA,GACpB;AAEA,EAAA,MAAM,YAAA,GAAeA,iBAAA;AAAA,IACnB,CAAC,CAAA,KAAiB;AAChB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,MAAM,QAAA,GAAW,MAAM,IAAA,EAAK;AAC5B,MAAA,IAAI,CAAC,QAAA,IAAY,YAAA,CAAa,MAAA,KAAW,CAAA,IAAK,SAAS,SAAA,EAAW;AAElE,MAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,GAAG,IAAA,EAAM,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,QAAA,EAAU,CAAC,CAAA;AACjE,MAAA,QAAA,CAAS,EAAE,CAAA;AACX,MAAA,YAAA,CAAa,EAAE,CAAA;AACf,MAAA,cAAA,CAAe,EAAE,CAAA;AAEjB,MAAA,QAAA,CAAS,MAAA;AAAA,QACP;AAAA,UACE,QAAA;AAAA,UACA,MAAA,EAAQ,YAAA;AAAA,UACR,kBAAA;AAAA,UACA,SAAS,CAAC,CAAA,KAAM,aAAa,CAAC,IAAA,KAAS,OAAO,CAAC,CAAA;AAAA,UAC/C,WAAA,EAAa,CAAC,IAAA,KAAS;AACrB,YAAA,IAAI,IAAA,CAAK,KAAA,EAAO,cAAA,CAAe,IAAA,CAAK,KAAK,CAAA;AAAA,UAC3C;AAAA,SACF;AAAA,QACA;AAAA,UACE,SAAA,EAAW,CAAC,MAAA,KAAW;AACrB,YAAA,YAAA,CAAa,EAAE,CAAA;AACf,YAAA,cAAA,CAAe,EAAE,CAAA;AACjB,YAAA,WAAA,CAAY,CAAC,IAAA,KAAS;AAAA,cACpB,GAAG,IAAA;AAAA,cACH,EAAE,MAAM,WAAA,EAAa,IAAA,EAAM,OAAO,IAAA,EAAM,QAAA,EAAU,OAAO,QAAA;AAAS,aACnE,CAAA;AACD,YAAA,qBAAA,CAAsB,OAAO,qBAAqB,CAAA;AAAA,UACpD,CAAA;AAAA,UACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AAChB,YAAA,YAAA,CAAa,EAAE,CAAA;AACf,YAAA,cAAA,CAAe,EAAE,CAAA;AACjB,YAAA,WAAA,CAAY,CAAC,IAAA,KAAS,CAAC,GAAG,MAAM,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,CAAA,OAAA,EAAU,GAAA,CAAI,OAAO,CAAA,CAAA,EAAI,CAAC,CAAA;AAAA,UACvF;AAAA;AACF,OACF;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,YAAA,EAAc,kBAAA,EAAoB,QAAQ;AAAA,GACpD;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,CAAA;AACxC,EAAA,MAAM,cAAA,GAAiB,aAAa,MAAA,KAAW,CAAA;AAE/C,EAAA,uBACER,gBAAAS,mBAAA,EAAA,EAEE,QAAA,EAAA;AAAA,oBAAAR,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,IAAA,EAAK,MAAA;AAAA,QACL,QAAA,EAAQ,IAAA;AAAA,QACR,MAAA,EAAO,2DAAA;AAAA,QACP,QAAA,EAAU,YAAA;AAAA,QACV,OAAO,cAAA;AAAe;AAAA,KACxB;AAAA,oBAGAD,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gBAAA,CAAiB,KAAK,CAAA,EAChC,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,QAAQ,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,eAAA,EAAgB,EACnF,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,SAAS,MAAM,eAAA,CAAgB,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAAA,YAC9C,KAAA,EAAO,eAAe,KAAK,CAAA;AAAA,YAE3B,QAAA,EAAA;AAAA,8BAAAC,cAAAA,CAAC,UAAK,KAAA,EAAO,EAAE,UAAU,MAAA,EAAO,EAAI,QAAA,EAAA,YAAA,GAAe,QAAA,GAAW,QAAA,EAAS,CAAA;AAAA,cACtE,MAAA,CAAO,SAAA;AAAA,cAAU,IAAA;AAAA,cAAG,YAAA,CAAa,MAAA;AAAA,cAAO,GAAA;AAAA,cAAE,MAAM,MAAA,IAAU,CAAA;AAAA,cAAE;AAAA;AAAA;AAAA,SAC/D;AAAA,wBACAA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,OAAA,EAAS,MAAM,YAAA,CAAa,OAAA,EAAS,KAAA,EAAM;AAAA,YAC3C,QAAA,EAAU,SAAA;AAAA,YACV,KAAA,EAAO,oBAAA,CAAqB,KAAA,EAAO,SAAS,CAAA;AAAA,YAE3C,QAAA,EAAA,SAAA,GAAY,MAAA,CAAO,SAAA,GAAY,MAAA,CAAO;AAAA;AAAA;AACzC,OAAA,EACF,CAAA;AAAA,MACC,YAAA,IAAgB,QAAQ,IAAA,CAAK,MAAA,GAAS,qBACrCA,cAAAA,CAAC,SAAI,KAAA,EAAO,YAAA,IACT,QAAA,EAAA,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,qBACTD,gBAAC,OAAA,EAAA,EAA4B,KAAA,EAAO,YAAA,CAAa,KAAK,CAAA,EACpD,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,UAAA;AAAA,YACL,OAAA,EAAS,YAAA,CAAa,QAAA,CAAS,GAAA,CAAI,WAAW,CAAA;AAAA,YAC9C,QAAA,EAAU,MAAM,SAAA,CAAU,GAAA,CAAI,WAAW;AAAA;AAAA,SAC3C;AAAA,QACC,GAAA,CAAI;AAAA,OAAA,EAAA,EANK,GAAA,CAAI,WAOhB,CACD,CAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAD,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,wBAAuB,EAChC,QAAA,EAAA;AAAA,MAAA,QAAA,CAAS,WAAW,CAAA,IAAK,CAAC,6BACzBC,cAAAA,CAAC,SAAI,KAAA,EAAO,eAAA,CAAgB,KAAK,CAAA,EAC9B,mBACG,MAAA,CAAO,WAAA,GACP,iBACE,MAAA,CAAO,gBAAA,GACP,OAAO,UAAA,EACf,CAAA;AAAA,MAED,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,qBAClBA,cAAAA,CAAC,aAAA,EAAA,EAAsB,OAAA,EAAS,GAAA,EAAK,KAAA,EAAA,EAAjB,CAA+B,CACpD,CAAA;AAAA,MACA,WAAA,IAAe,CAAC,SAAA,oBAAaD,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,gBAAA,CAAiB,KAAK,CAAA,EAAI,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,QAAY;AAAA,OAAA,EAAG,CAAA;AAAA,MAClF,SAAA,oBACCC,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,EAAE,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,SAAA,EAAU,EAAG,KAAA,EAAc,CAAA;AAAA,sBAEhFA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,cAAA,EAAgB;AAAA,KAAA,EAC5B,CAAA;AAAA,oBAGAD,gBAAC,MAAA,EAAA,EAAK,QAAA,EAAU,cAAc,KAAA,EAAO,aAAA,CAAc,KAAK,CAAA,EACtD,QAAA,EAAA;AAAA,sBAAAC,cAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,MAAA;AAAA,UACL,KAAA,EAAO,KAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACxC,WAAA,EAAa,MAAA,IAAU,cAAA,GAAiB,2BAAA,GAA8B,MAAA,CAAO,WAAA;AAAA,UAC7E,QAAA,EAAU,MAAA,IAAU,cAAA,IAAkB,QAAA,CAAS,SAAA;AAAA,UAC/C,KAAA,EAAO,eAAe,KAAK;AAAA;AAAA,OAC7B;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,UAAU,CAAC,KAAA,CAAM,IAAA,EAAK,IAAK,kBAAkB,QAAA,CAAS,SAAA;AAAA,UACtD,KAAA,EAAO,gBAAgB,KAAA,EAAO,CAAC,MAAM,IAAA,EAAK,IAAK,cAAA,IAAkB,QAAA,CAAS,SAAS,CAAA;AAAA,UAElF,QAAA,EAAA,QAAA,CAAS,SAAA,GAAY,KAAA,GAAQ,MAAA,CAAO;AAAA;AAAA;AACvC,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACvMO,SAAS,WAAW,EAAE,KAAA,EAAO,QAAQ,kBAAA,EAAoB,KAAA,EAAO,QAAO,EAAoB;AAChG,EAAA,MAAM,OAAO,OAAA,EAAQ;AACrB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIF,eAAuB,MAAM,CAAA;AACzD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,eAA6B,kBAAkB,CAAA;AAErF,EAAA,MAAM,WAAA,GAAcS,kBAAY,YAAY;AAC1C,IAAA,IAAI,kBAAA,EAAoB;AACtB,MAAA,IAAI;AACF,QAAA,MAAM,IAAA,CAAK,gBAAgB,kBAAkB,CAAA;AAC7C,QAAA,SAAA,CAAU,MAAM,CAAA;AAAA,MAClB,CAAA,CAAA,MAAQ;AAEN,QAAA,SAAA,CAAU,WAAW,CAAA;AAAA,MACvB;AAAA,IACF,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,WAAW,CAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,CAAC,IAAA,EAAM,kBAAkB,CAAC,CAAA;AAE7B,EAAA,MAAM,qBAAA,GAAwBA,iBAAAA,CAAY,CAAC,EAAA,KAAe;AACxD,IAAA,cAAA,CAAe,EAAE,CAAA;AACjB,IAAA,SAAA,CAAU,MAAM,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,qBAAA,GAAwBA,kBAAY,MAAM;AAC9C,IAAA,SAAA,CAAU,WAAW,CAAA;AAAA,EACvB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBACER,gBAAC,KAAA,EAAA,EAAI,KAAA,EAAO,eAAe,KAAA,EAAO,KAAA,EAAO,MAAM,CAAA,EAC7C,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,GAAG,YAAY,KAAK,CAAA,EAAG,cAAA,EAAgB,eAAA,EAAgB,EACnE,QAAA,EAAA;AAAA,sBAAAC,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,MACnB,WAAW,MAAA,IAAU,CAAC,kBAAA,oBACrBA,eAAC,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,OAAA,EAAS,uBAAuB,KAAA,EAAO,eAAA,CAAgB,KAAK,CAAA,EAC/E,iBAAO,eAAA,EACV;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAEAD,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,WAAU,EACnB,QAAA,EAAA;AAAA,MAAA,MAAA,KAAW,0BAAUC,cAAAA,CAAC,cAAW,KAAA,EAAc,MAAA,EAAgB,SAAS,WAAA,EAAa,CAAA;AAAA,MACrF,MAAA,KAAW,+BACVA,cAAAA,CAAC,mBAAgB,KAAA,EAAc,MAAA,EAAgB,UAAU,qBAAA,EAAuB,CAAA;AAAA,MAEjF,MAAA,KAAW,UAAU,WAAA,oBACpBA,eAAC,QAAA,EAAA,EAAS,WAAA,EAA0B,OAAc,MAAA,EAAgB;AAAA,KAAA,EAEtE,CAAA;AAAA,oBAEAD,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAO,aAAA,CAAc,KAAK,CAAA,EAAG,QAAA,EAAA;AAAA,MAAA,YAAA;AAAA,MACrB,GAAA;AAAA,sBACXC,cAAAA;AAAA,QAAC,GAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,0BAAA;AAAA,UACL,MAAA,EAAO,QAAA;AAAA,UACP,GAAA,EAAI,qBAAA;AAAA,UACJ,KAAA,EAAO,kBAAkB,KAAK,CAAA;AAAA,UAC/B,QAAA,EAAA;AAAA;AAAA;AAED,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AChEO,SAAS,QAAA,CAAS;AAAA,EACvB,GAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA,EAAO,cAAA;AAAA,EACP,MAAA,EAAQ,cAAA;AAAA,EACR,KAAA,GAAQ,OAAA;AAAA,EACR,MAAA,GAAS;AACX,CAAA,EAAkB;AAChB,EAAA,MAAM,WAAA,GAAcL,aAAAA;AAAA,IAClB,MACE,IAAIc,sBAAA,CAAY;AAAA,MACd,cAAA,EAAgB;AAAA,QACd,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,sBAAsB,KAAA,EAAM;AAAA,QACjD,SAAA,EAAW,EAAE,KAAA,EAAO,KAAA;AAAM;AAC5B,KACD,CAAA;AAAA,IACH;AAAC,GACH;AAEA,EAAA,MAAM,KAAA,GAAQd,cAAQ,MAAM,QAAA,CAAS,cAAc,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AACtE,EAAA,MAAM,MAAA,GAASA,cAAQ,MAAM,SAAA,CAAU,cAAc,CAAA,EAAG,CAAC,cAAc,CAAC,CAAA;AAExE,EAAA,uBACEK,eAACU,8BAAA,EAAA,EAAoB,MAAA,EAAQ,aAC3B,QAAA,kBAAAV,cAAAA,CAAC,YAAA,EAAA,EAAa,GAAA,EACZ,QAAA,kBAAAA,cAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,MAAA;AAAA,MACA,kBAAA,EAAoB,WAAA;AAAA,MACpB,KAAA;AAAA,MACA;AAAA;AAAA,KAEJ,CAAA,EACF,CAAA;AAEJ","file":"index.cjs","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}\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","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 } 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 const handleLogin = useCallback(async () => {\n if (initialWorkspaceId) {\n try {\n await arbi.selectWorkspace(initialWorkspaceId)\n setScreen('chat')\n } catch {\n // Fall back to workspace selection if the provided ID fails\n setScreen('workspace')\n }\n } else {\n setScreen('workspace')\n }\n }, [arbi, initialWorkspaceId])\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/**\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 const theme = useMemo(() => getTheme(themeOverrides), [themeOverrides])\n const labels = useMemo(() => getLabels(labelOverrides), [labelOverrides])\n\n return (\n <QueryClientProvider client={queryClient}>\n <ArbiProvider url={url}>\n <ChatWidget\n theme={theme}\n labels={labels}\n initialWorkspaceId={workspaceId}\n width={width}\n height={height}\n />\n </ArbiProvider>\n </QueryClientProvider>\n )\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -690,7 +690,12 @@ function WorkspaceScreen({ theme, labels, onSelect }) {
|
|
|
690
690
|
setLoading(true);
|
|
691
691
|
setError("");
|
|
692
692
|
try {
|
|
693
|
-
const
|
|
693
|
+
const projects = await arbi.projects.list();
|
|
694
|
+
const projectExtId = projects[0]?.external_id;
|
|
695
|
+
if (!projectExtId) {
|
|
696
|
+
throw new Error("No project available; create one before adding a workspace");
|
|
697
|
+
}
|
|
698
|
+
const ws = await arbi.workspaces.create(name, projectExtId);
|
|
694
699
|
await arbi.selectWorkspace(ws.external_id);
|
|
695
700
|
onSelect(ws.external_id);
|
|
696
701
|
} catch (err) {
|
|
@@ -929,7 +934,7 @@ function ChatView({ workspaceId, theme, labels }) {
|
|
|
929
934
|
const newIds = [];
|
|
930
935
|
for (const file of Array.from(files)) {
|
|
931
936
|
const result = await arbi.documents.uploadFile(file, file.name);
|
|
932
|
-
newIds.push(...result.doc_ext_ids);
|
|
937
|
+
if (result.doc_ext_ids) newIds.push(...result.doc_ext_ids);
|
|
933
938
|
}
|
|
934
939
|
await refetchDocs();
|
|
935
940
|
setSelectedDocs((prev) => [...prev, ...newIds]);
|
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"],"names":["jsx","useState","jsxs","useCallback","useMemo"],"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}\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","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 const ws = await arbi.workspaces.create(name)\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 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 } 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 const handleLogin = useCallback(async () => {\n if (initialWorkspaceId) {\n try {\n await arbi.selectWorkspace(initialWorkspaceId)\n setScreen('chat')\n } catch {\n // Fall back to workspace selection if the provided ID fails\n setScreen('workspace')\n }\n } else {\n setScreen('workspace')\n }\n }, [arbi, initialWorkspaceId])\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/**\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 const theme = useMemo(() => getTheme(themeOverrides), [themeOverrides])\n const labels = useMemo(() => getLabels(labelOverrides), [labelOverrides])\n\n return (\n <QueryClientProvider client={queryClient}>\n <ArbiProvider url={url}>\n <ChatWidget\n theme={theme}\n labels={labels}\n initialWorkspaceId={workspaceId}\n width={width}\n height={height}\n />\n </ArbiProvider>\n </QueryClientProvider>\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"],"names":["jsx","useState","jsxs","useCallback","useMemo"],"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}\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","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 } 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 const handleLogin = useCallback(async () => {\n if (initialWorkspaceId) {\n try {\n await arbi.selectWorkspace(initialWorkspaceId)\n setScreen('chat')\n } catch {\n // Fall back to workspace selection if the provided ID fails\n setScreen('workspace')\n }\n } else {\n setScreen('workspace')\n }\n }, [arbi, initialWorkspaceId])\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/**\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 const theme = useMemo(() => getTheme(themeOverrides), [themeOverrides])\n const labels = useMemo(() => getLabels(labelOverrides), [labelOverrides])\n\n return (\n <QueryClientProvider client={queryClient}>\n <ArbiProvider url={url}>\n <ChatWidget\n theme={theme}\n labels={labels}\n initialWorkspaceId={workspaceId}\n width={width}\n height={height}\n />\n </ArbiProvider>\n </QueryClientProvider>\n )\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arbidocs/react",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.67",
|
|
4
4
|
"description": "React hooks and provider for the ARBI SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -22,8 +22,8 @@
|
|
|
22
22
|
"typecheck": "tsc --noEmit"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@arbidocs/sdk": "0.3.
|
|
26
|
-
"@arbidocs/client": "0.3.
|
|
25
|
+
"@arbidocs/sdk": "0.3.67",
|
|
26
|
+
"@arbidocs/client": "0.3.67",
|
|
27
27
|
"@tanstack/react-query": ">=5"
|
|
28
28
|
},
|
|
29
29
|
"peerDependencies": {
|