@arbidocs/react 0.3.185 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/dist/{chunk-YJAYST7S.js → chunk-3CLGHHME.js} +880 -240
  2. package/dist/chunk-3CLGHHME.js.map +1 -0
  3. package/dist/chunk-6ALMBER7.js +176 -0
  4. package/dist/chunk-6ALMBER7.js.map +1 -0
  5. package/dist/chunk-BXP6S34V.cjs +284 -0
  6. package/dist/chunk-BXP6S34V.cjs.map +1 -0
  7. package/dist/chunk-EJ2BMHYK.js +272 -0
  8. package/dist/chunk-EJ2BMHYK.js.map +1 -0
  9. package/dist/{chunk-IZPXHVPJ.cjs → chunk-OU2QLIKS.cjs} +969 -344
  10. package/dist/chunk-OU2QLIKS.cjs.map +1 -0
  11. package/dist/chunk-RZQACYNQ.cjs +218 -0
  12. package/dist/chunk-RZQACYNQ.cjs.map +1 -0
  13. package/dist/{index-4WwLZsQO.d.cts → index-CcbVSNSP.d.cts} +40 -2
  14. package/dist/{index-4WwLZsQO.d.ts → index-CcbVSNSP.d.ts} +40 -2
  15. package/dist/index.cjs +589 -1070
  16. package/dist/index.cjs.map +1 -1
  17. package/dist/index.d.cts +11 -155
  18. package/dist/index.d.ts +11 -155
  19. package/dist/index.js +223 -725
  20. package/dist/index.js.map +1 -1
  21. package/dist/shell/index.cjs +13 -4
  22. package/dist/shell/index.d.cts +1 -1
  23. package/dist/shell/index.d.ts +1 -1
  24. package/dist/shell/index.js +2 -1
  25. package/dist/ui/index.cjs +211 -190
  26. package/dist/ui/index.d.cts +204 -3
  27. package/dist/ui/index.d.ts +204 -3
  28. package/dist/ui/index.js +2 -1
  29. package/dist/viewers/index.cjs +327 -76
  30. package/dist/viewers/index.cjs.map +1 -1
  31. package/dist/viewers/index.d.cts +90 -4
  32. package/dist/viewers/index.d.ts +90 -4
  33. package/dist/viewers/index.js +316 -78
  34. package/dist/viewers/index.js.map +1 -1
  35. package/package.json +4 -3
  36. package/dist/chunk-3MLQUKT4.cjs +0 -97
  37. package/dist/chunk-3MLQUKT4.cjs.map +0 -1
  38. package/dist/chunk-IZPXHVPJ.cjs.map +0 -1
  39. package/dist/chunk-J3XEKOV5.js +0 -87
  40. package/dist/chunk-J3XEKOV5.js.map +0 -1
  41. package/dist/chunk-YJAYST7S.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/utils.ts","../src/ai/markdown-base-components.tsx","../src/ai/markdown-streaming-context.ts","../src/ai/split-markdown-blocks.ts","../src/ai/MarkdownRenderer.tsx","../src/ui/tooltip.tsx","../src/ui/IconToggle.tsx","../src/ui/DictateContext.tsx","../src/ui/avatar.tsx","../src/ui/badge.tsx","../src/ui/button.tsx","../src/ui/hover-card.tsx","../src/ui/card.tsx","../src/documents/media-error.ts","../src/documents/useAudioRecorder.ts","../src/documents/format-elapsed.ts","../src/documents/MicWaveformIndicator.tsx","../src/documents/MicRecordingOverlay.tsx","../src/documents/InlineMicButton.tsx","../src/ui/input.tsx","../src/ui/label.tsx","../src/ui/separator.tsx","../src/ui/textarea.tsx","../src/ui/collapsible.tsx","../src/ui/progress.tsx","../src/ui/scroll-area.tsx","../src/ui/radio-group.tsx","../src/ui/checkbox.tsx","../src/ui/switch.tsx","../src/ui/tabs.tsx","../src/ui/table.tsx","../src/ui/slider.tsx","../src/ui/toggle.tsx","../src/ui/toggle-group.tsx","../src/lib/toast-interaction.ts","../src/ui/dialog.tsx","../src/ui/popover.tsx","../src/ui/dropdown-menu.tsx","../src/ui/select.tsx","../src/ui/command.tsx","../src/ai/AiMarkdown.tsx","../src/entities/EntityPill.tsx","../src/entities/tag-types.ts","../src/entities/TagEntity.tsx","../src/icons/colors.ts","../src/icons/PdfIcon.tsx","../src/icons/AudIcon.tsx","../src/icons/ImgIcon.tsx","../src/icons/VidIcon.tsx","../src/icons/EmlIcon.tsx","../src/icons/ArbiBotHeadIcon.tsx","../src/entities/DocumentEntity.tsx","../src/entities/ProjectEntity.tsx","../src/entities/UserEntity.tsx","../src/entities/AgentMarkers.tsx","../src/entities/status.tsx","../src/entities/registry.tsx","../src/entities/colors.ts"],"names":["jsx","React","Fragment","Icon","jsxs","createContext","useContext","React3","cva","React4","React5","React6","useState","useRef","useCallback","useEffect","createPortal","React7","React8","React9","React10","CollapsibleTrigger","CollapsibleContent","React11","React12","React13","React14","Check","React15","React16","React17","React18","React19","React20","React21","React22","React23","Circle","React24","React25","CommandPrimitive","forwardRef","EntityPill","sizeClasses","List","Search","useId","document","UserEntity","Badge","FolderOpen","Eye","Hash","StickyNote","NotebookPen","CreditCard","NEUTRAL_GRAY","BASE_COLORS","getEntityColor"],"mappings":"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","file":"chunk-YJAYST7S.js","sourcesContent":["/**\n * Core utility: `cn()` — merge class names with Tailwind-aware conflict\n * resolution (clsx + tailwind-merge). Copied faithfully from the ARBI app so the\n * promoted \"lego\" components style identically in a consumer app.\n */\n\nimport { clsx, type ClassValue } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","import React from 'react'\nimport type { Components } from 'react-markdown'\n\n/**\n * Brand-neutral presentational component overrides for react-markdown, shared by\n * every markdown surface in the workspace (the monolith's `MarkdownRenderer` and\n * the AI kit's `AiMarkdown`). One house style for headings, lists, tables and the\n * inline text elements — token-based, so it themes per app.\n *\n * Deliberately excluded (kept per-consumer): `a` (external-link confirm vs\n * plain), `code`/`pre` (rich CodeBlock + Mermaid vs inline), `span` (doc-entity\n * pills), and `del`/`ins`/`mark` (general emphasis vs redline tracked-changes) —\n * these differ by intent or carry heavy/coupled behaviour, so each renderer owns\n * them and spreads this base underneath.\n */\nexport const markdownBaseComponents: Partial<Components> = {\n h1: ({ children, ...props }: React.ComponentPropsWithoutRef<'h1'>) => (\n <h1 className=\"text-lg font-semibold\" data-testid=\"markdown-heading-1\" {...props}>\n {children}\n </h1>\n ),\n h2: ({ children, ...props }: React.ComponentPropsWithoutRef<'h2'>) => (\n <h2 className=\"font-semibold text-base\" data-testid=\"markdown-heading-2\" {...props}>\n {children}\n </h2>\n ),\n h3: ({ children, ...props }: React.ComponentPropsWithoutRef<'h3'>) => (\n <h3 className=\"font-semibold text-base\" data-testid=\"markdown-heading-3\" {...props}>\n {children}\n </h3>\n ),\n h4: ({ children, ...props }: React.ComponentPropsWithoutRef<'h4'>) => (\n <h4 className=\"font-semibold text-base\" {...props}>\n {children}\n </h4>\n ),\n h5: ({ children, ...props }: React.ComponentPropsWithoutRef<'h5'>) => (\n <h5 className=\"font-medium\" {...props}>\n {children}\n </h5>\n ),\n strong: ({ children, ...props }: React.ComponentPropsWithoutRef<'strong'>) => (\n <strong className=\"font-semibold\" {...props}>\n {children}\n </strong>\n ),\n blockquote: ({ children, ...props }: React.ComponentPropsWithoutRef<'blockquote'>) => (\n <blockquote className=\"border-l-2 border-primary pl-4\" {...props}>\n {children}\n </blockquote>\n ),\n ol: ({ children, ...props }: React.ComponentPropsWithoutRef<'ol'>) => (\n <ol className=\"list-decimal space-y-2 pl-6\" data-testid=\"markdown-ordered-list\" {...props}>\n {children}\n </ol>\n ),\n ul: ({ children, ...props }: React.ComponentPropsWithoutRef<'ul'>) => (\n <ul className=\"list-none space-y-2 pl-6\" data-testid=\"markdown-unordered-list\" {...props}>\n {children}\n </ul>\n ),\n li: ({ children, ...props }: React.ComponentPropsWithoutRef<'li'>) => (\n <li className=\"my-1.5\" {...props}>\n {children}\n </li>\n ),\n table: ({ children, ...props }: React.ComponentPropsWithoutRef<'table'>) => (\n <table data-testid=\"markdown-table\" {...props}>\n {children}\n </table>\n ),\n th: ({ children, ...props }: React.ComponentPropsWithoutRef<'th'>) => (\n <th {...props}>{children}</th>\n ),\n td: ({ children, ...props }: React.ComponentPropsWithoutRef<'td'>) => (\n <td {...props}>{children}</td>\n ),\n tr: ({ children, ...props }: React.ComponentPropsWithoutRef<'tr'>) => (\n <tr {...props}>{children}</tr>\n ),\n p: ({ children, ...props }: React.ComponentPropsWithoutRef<'p'>) => (\n <p className=\"whitespace-pre-wrap\" {...props}>\n {children}\n </p>\n ),\n hr: (props: React.ComponentPropsWithoutRef<'hr'>) => (\n <hr className=\"border-foreground/20\" {...props} />\n ),\n sup: ({ children, ...props }: React.ComponentPropsWithoutRef<'sup'>) => (\n <sup className=\"text-xs\" {...props}>\n {children}\n </sup>\n ),\n sub: ({ children, ...props }: React.ComponentPropsWithoutRef<'sub'>) => (\n <sub className=\"text-xs\" {...props}>\n {children}\n </sub>\n ),\n div: ({ children, className, ...props }: React.ComponentPropsWithoutRef<'div'>) => (\n <div className={className} {...props}>\n {children}\n </div>\n ),\n br: (props: React.ComponentPropsWithoutRef<'br'>) => <br {...props} />,\n kbd: ({ children, ...props }: React.ComponentPropsWithoutRef<'kbd'>) => (\n <kbd\n className=\"px-1.5 py-0.5 text-xs font-mono bg-muted border border-border rounded\"\n {...props}\n >\n {children}\n </kbd>\n ),\n abbr: ({ children, title, ...props }: React.ComponentPropsWithoutRef<'abbr'>) => (\n <abbr title={title} className=\"underline decoration-dotted cursor-help\" {...props}>\n {children}\n </abbr>\n ),\n cite: ({ children, ...props }: React.ComponentPropsWithoutRef<'cite'>) => (\n <cite className=\"italic\" {...props}>\n {children}\n </cite>\n ),\n}\n","import { createContext } from 'react'\n\n/**\n * Signals to `MarkdownRenderer`'s component overrides that the surrounding\n * message is still streaming tokens. Heavy renderers can defer their work while\n * this is true to avoid burning CPU on partially complete fences and to keep the\n * UI responsive during long generations.\n *\n * Default `false` means non-streaming usages (parsed documents, static answers,\n * DM bubbles) get the full rendering with no behaviour change.\n */\nexport const MarkdownStreamingContext = createContext(false)\n","/**\n * Splits a markdown string into top-level blocks at `\\n\\n` boundaries.\n *\n * Streaming AI responses arrive token-by-token; passing the full string to\n * react-markdown re-parses the entire AST on every flush. By splitting into\n * blocks and memoizing each, only the trailing (still-growing) block re-parses\n * — completed blocks stay frozen in the DOM.\n *\n * The split avoids three correctness pitfalls:\n * - never splits inside an open ``` code fence (would corrupt the language)\n * - never splits between two adjacent list items (would render as two lists)\n * - never splits between two blockquote lines (would render as two quotes)\n */\nconst LIST_ITEM_RE = /^\\s*([-*+]|\\d+[.)])\\s/\nconst BLOCKQUOTE_RE = /^\\s*>/\n\nexport function splitMarkdownBlocks(content: string): string[] {\n if (!content) return []\n const blocks: string[] = []\n let start = 0\n let inFence = false\n let i = 0\n while (i < content.length) {\n if (content.startsWith('```', i)) {\n inFence = !inFence\n i += 3\n continue\n }\n if (!inFence && content[i] === '\\n' && content[i + 1] === '\\n') {\n const before = content.slice(start, i)\n const lastLine = before.slice(before.lastIndexOf('\\n') + 1)\n const afterStart = i + 2\n const nextNewline = content.indexOf('\\n', afterStart)\n const nextLine = content.slice(afterStart, nextNewline === -1 ? undefined : nextNewline)\n const bothListItems = LIST_ITEM_RE.test(lastLine) && LIST_ITEM_RE.test(nextLine)\n const bothBlockquotes = BLOCKQUOTE_RE.test(lastLine) && BLOCKQUOTE_RE.test(nextLine)\n if (bothListItems || bothBlockquotes) {\n i += 2\n continue\n }\n blocks.push(content.slice(start, afterStart))\n start = afterStart\n i = afterStart\n continue\n }\n i++\n }\n if (start < content.length) blocks.push(content.slice(start))\n return blocks\n}\n","import React, { useMemo, useState } from 'react'\nimport Markdown, { type Components } from 'react-markdown'\nimport remarkGfm from 'remark-gfm'\nimport rehypeRaw from 'rehype-raw'\nimport { Copy, Check } from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport { markdownBaseComponents } from './markdown-base-components'\nimport { MarkdownStreamingContext } from './markdown-streaming-context'\nimport { splitMarkdownBlocks } from './split-markdown-blocks'\n\n/**\n * MarkdownRenderer — the single, full-featured markdown surface for the kit.\n *\n * Renders AI answers, chat/DM messages and parsed-document panes with one house\n * style: headings, paragraphs, bold/italic, ordered/unordered lists, GFM tables,\n * fenced code blocks (monospace + copy button), inline code, blockquotes, safe\n * links (`rel=\"noopener\"`, new tab) and horizontal rules.\n *\n * Styling is 100% semantic Tailwind tokens (`text-foreground`,\n * `text-muted-foreground`, `border-border`, `bg-muted`, `text-primary`) so it\n * themes per firm — no hardcoded brand colours. It sizes to its container, so it\n * looks right in a compact chat bubble and in a full-width document pane alike.\n *\n * Streaming: the content is split into block-level chunks (see\n * `splitMarkdownBlocks`) and each chunk is memoised, so streaming token updates\n * only re-parse the trailing block instead of the whole message. Pass\n * `isStreaming` to let heavy custom components defer via `MarkdownStreamingContext`.\n *\n * Extending: pass `components` to override any element (the kit's `AiMarkdown`\n * and `CitationRenderer` layer their accent links / citation popovers on top).\n */\n\n/** Fenced code block with a language label and copy-to-clipboard button. */\nfunction CodeBlock({ language, code }: { language: string; code: string }) {\n const [copied, setCopied] = useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code)\n setCopied(true)\n setTimeout(() => setCopied(false), 2000)\n } catch {\n // Clipboard unavailable (insecure context / permissions) — no-op.\n }\n }\n\n return (\n <div\n className=\"code-block relative my-3 overflow-hidden rounded-md border border-border bg-muted\"\n data-testid=\"markdown-code-block\"\n >\n <div className=\"flex items-center justify-between border-b border-border px-3 py-1.5\">\n <span className=\"font-mono text-xs text-muted-foreground\">{language || 'code'}</span>\n <button\n type=\"button\"\n onClick={handleCopy}\n className=\"flex items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground\"\n title={copied ? 'Copied!' : 'Copy code'}\n >\n {copied ? <Check size={12} /> : <Copy size={12} />}\n <span>{copied ? 'Copied' : 'Copy'}</span>\n </button>\n </div>\n <pre className=\"overflow-x-auto p-3 text-sm leading-relaxed\">\n <code className={cn('font-mono text-foreground', language && `language-${language}`)}>\n {code}\n </code>\n </pre>\n </div>\n )\n}\n\n/**\n * Default component overrides. Spreads the shared brand-neutral base\n * (`markdownBaseComponents`: headings, lists, paragraphs, emphasis, hr…) and adds\n * the elements that carry behaviour or need self-contained styling: safe links,\n * code (inline + fenced), bordered tables and blockquotes. Module-scoped so the\n * reference is stable across renders and react-markdown can skip re-parsing.\n */\nconst defaultComponents: Partial<Components> = {\n ...markdownBaseComponents,\n a: ({ href, children, ...props }: React.ComponentPropsWithoutRef<'a'>) => {\n // Internal hash/anchor links stay in-page; everything else opens safely in a\n // new tab. `rel=\"noopener noreferrer\"` prevents reverse-tabnabbing.\n const isInternal = !href || href.startsWith('#') || href.startsWith('cite:')\n return (\n <a\n className=\"text-primary underline underline-offset-2\"\n href={href}\n {...(isInternal ? {} : { target: '_blank', rel: 'noopener noreferrer' })}\n {...props}\n >\n {children}\n </a>\n )\n },\n em: ({ children, ...props }: React.ComponentPropsWithoutRef<'em'>) => (\n <em className=\"italic\" {...props}>\n {children}\n </em>\n ),\n code: function MarkdownCode({\n className,\n children,\n ...props\n }: React.ComponentPropsWithoutRef<'code'>) {\n const match = /language-(\\w+)/.exec(className || '')\n if (!match) {\n return (\n <code\n className=\"rounded bg-muted px-1 py-0.5 font-mono text-[0.9em]\"\n data-testid=\"markdown-inline-code\"\n {...props}\n >\n {children}\n </code>\n )\n }\n return <CodeBlock language={match[1]} code={String(children).replace(/\\n$/, '')} />\n },\n // The CodeBlock renders its own <pre>; unwrap react-markdown's wrapper so we\n // don't nest <pre><pre>.\n pre: ({ children }: React.ComponentPropsWithoutRef<'pre'>) => <>{children}</>,\n blockquote: ({ children, ...props }: React.ComponentPropsWithoutRef<'blockquote'>) => (\n <blockquote className=\"border-l-2 border-border pl-4 italic text-muted-foreground\" {...props}>\n {children}\n </blockquote>\n ),\n table: ({ children, ...props }: React.ComponentPropsWithoutRef<'table'>) => (\n <div className=\"my-3 overflow-x-auto rounded-lg border border-border\">\n <table data-testid=\"markdown-table\" className=\"w-full border-collapse text-sm\" {...props}>\n {children}\n </table>\n </div>\n ),\n thead: ({ children, ...props }: React.ComponentPropsWithoutRef<'thead'>) => (\n <thead className=\"bg-muted\" {...props}>\n {children}\n </thead>\n ),\n th: ({ children, ...props }: React.ComponentPropsWithoutRef<'th'>) => (\n <th\n className=\"border-b border-border px-3 py-2 text-left font-semibold text-foreground\"\n {...props}\n >\n {children}\n </th>\n ),\n td: ({ children, ...props }: React.ComponentPropsWithoutRef<'td'>) => (\n <td className=\"border-b border-border px-3 py-2 align-top\" {...props}>\n {children}\n </td>\n ),\n // General emphasis marks (GFM `~~strikethrough~~` → <del>, raw <ins>/<mark>).\n del: ({ children, ...props }: React.ComponentPropsWithoutRef<'del'>) => (\n <del className=\"text-muted-foreground line-through\" {...props}>\n {children}\n </del>\n ),\n ins: ({ children, ...props }: React.ComponentPropsWithoutRef<'ins'>) => (\n <ins className=\"underline decoration-primary/60\" {...props}>\n {children}\n </ins>\n ),\n mark: ({ children, ...props }: React.ComponentPropsWithoutRef<'mark'>) => (\n <mark className=\"rounded bg-primary/15 px-0.5 text-foreground\" {...props}>\n {children}\n </mark>\n ),\n}\n\n// Stable module-scope plugin arrays so react-markdown compares them by reference\n// and skips re-running the remark/rehype pipeline when nothing else changed.\n// `rehype-raw` enables inline HTML (e.g. redline <del>/<ins>); no math/mermaid\n// plugins are bundled to keep the kit light.\nconst remarkPlugins = [remarkGfm]\nconst rehypePlugins = [rehypeRaw]\n\n/**\n * One parsed markdown block, memoised on (content, components) so already-rendered\n * blocks don't re-parse when a later block streams new tokens. This is the core\n * of the streaming-rendering optimisation.\n */\nconst MemoizedBlock = React.memo(function MarkdownBlock({\n content,\n components,\n}: {\n content: string\n components: Partial<Components>\n}) {\n return (\n <Markdown remarkPlugins={remarkPlugins} rehypePlugins={rehypePlugins} components={components}>\n {content}\n </Markdown>\n )\n})\n\n/** Prevents a malformed-markdown render error from crashing the whole surface. */\nclass MarkdownErrorBoundary extends React.Component<\n { fallback: React.ReactNode; children: React.ReactNode },\n { hasError: boolean }\n> {\n state = { hasError: false }\n static getDerivedStateFromError() {\n return { hasError: true }\n }\n render() {\n return this.state.hasError ? this.props.fallback : this.props.children\n }\n}\n\nexport interface MarkdownRendererProps {\n /** Markdown content to render. */\n children: string\n /** Custom component overrides merged on top of the defaults. */\n components?: Partial<Components>\n /**\n * When true, signals heavy custom components (via `MarkdownStreamingContext`)\n * to defer their work while tokens are still arriving. Defaults to false.\n */\n isStreaming?: boolean\n /** Extra classes on the wrapper (font-size, prose width, etc.). */\n className?: string\n /** Overrides the `data-testid` on the wrapper (default `markdown-renderer`). */\n testId?: string\n}\n\nfunction MarkdownRendererComponent({\n children,\n components: customComponents,\n isStreaming = false,\n className,\n testId = 'markdown-renderer',\n}: MarkdownRendererProps) {\n const components = useMemo(\n () => (customComponents ? { ...defaultComponents, ...customComponents } : defaultComponents),\n [customComponents]\n )\n\n const blocks = useMemo(() => splitMarkdownBlocks(children), [children])\n\n return (\n <MarkdownErrorBoundary\n fallback={\n <div className={cn('whitespace-pre-wrap break-words text-foreground', className)}>\n {children}\n </div>\n }\n >\n <MarkdownStreamingContext.Provider value={isStreaming}>\n <div\n className={cn(\n 'markdown-content space-y-3 break-words leading-relaxed text-foreground',\n className\n )}\n data-testid={testId}\n >\n {blocks.map((block, index) => (\n <MemoizedBlock key={index} content={block} components={components} />\n ))}\n </div>\n </MarkdownStreamingContext.Provider>\n </MarkdownErrorBoundary>\n )\n}\n\n/**\n * Memoised so a stable message in a long thread doesn't re-parse when unrelated\n * tokens arrive elsewhere; a streaming message gets a fresh `children` each flush\n * and re-renders (only its trailing block re-parses, thanks to `MemoizedBlock`).\n */\nexport const MarkdownRenderer = React.memo(MarkdownRendererComponent)\n","import * as React from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { cn } from '../lib/utils'\n\n/**\n * Minimal, dependency-free tooltip — a drop-in API replacement for a Radix\n * wrapper (same exports/props: Tooltip, TooltipTrigger, TooltipContent,\n * TooltipProvider). Promoted verbatim from the ARBI app.\n *\n * It attaches the trigger via a STABLE `useCallback` ref (never setStates,\n * identity never changes), so React 19 never detach/attach-thrashes.\n */\n\ntype Side = 'top' | 'bottom' | 'left' | 'right'\n\ninterface TooltipContextValue {\n open: boolean\n show: () => void\n hide: () => void\n setTrigger: (el: HTMLElement | null) => void\n triggerRef: React.MutableRefObject<HTMLElement | null>\n contentId: string\n}\n\nconst TooltipContext = React.createContext<TooltipContextValue | null>(null)\n\n/** App-wide tooltip defaults, set once by `TooltipProvider`. */\nconst DEFAULT_DELAY = 300\nconst TooltipConfigContext = React.createContext<{ delayDuration: number }>({\n delayDuration: DEFAULT_DELAY,\n})\n\ninterface TooltipProviderProps {\n children?: React.ReactNode\n /** Hover delay, in ms, inherited by every Tooltip below. Default 300. */\n delayDuration?: number\n skipDelayDuration?: number\n disableHoverableContent?: boolean\n}\n\n/**\n * Sets tooltip defaults for the whole tree. Mount it once, at the app root —\n * `AppShell` in @arbidocs/blocks does this so every app gets it for free.\n * Tooltips still render without it, at the default delay.\n */\nconst TooltipProvider = ({ children, delayDuration = DEFAULT_DELAY }: TooltipProviderProps) => {\n const value = React.useMemo(() => ({ delayDuration }), [delayDuration])\n return <TooltipConfigContext.Provider value={value}>{children}</TooltipConfigContext.Provider>\n}\n\ninterface TooltipProps {\n children: React.ReactNode\n /** Overrides the provider's delay for this one tooltip. */\n delayDuration?: number\n}\n\nfunction Tooltip({ children, delayDuration }: TooltipProps) {\n const config = React.useContext(TooltipConfigContext)\n const delay = delayDuration ?? config.delayDuration\n const [open, setOpen] = React.useState(false)\n const triggerRef = React.useRef<HTMLElement | null>(null)\n const timer = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n const contentId = React.useId()\n\n const clearTimer = () => {\n if (timer.current) {\n clearTimeout(timer.current)\n timer.current = null\n }\n }\n\n const show = React.useCallback(() => {\n clearTimer()\n timer.current = setTimeout(() => setOpen(true), delay)\n }, [delay])\n\n const hide = React.useCallback(() => {\n clearTimer()\n setOpen(false)\n }, [])\n\n const setTrigger = React.useCallback((el: HTMLElement | null) => {\n triggerRef.current = el\n }, [])\n\n React.useEffect(() => () => clearTimer(), [])\n\n const value = React.useMemo<TooltipContextValue>(\n () => ({ open, show, hide, setTrigger, triggerRef, contentId }),\n [open, show, hide, setTrigger, contentId]\n )\n\n return <TooltipContext.Provider value={value}>{children}</TooltipContext.Provider>\n}\n\ninterface TooltipTriggerProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n asChild?: boolean\n}\n\nfunction TooltipTrigger({ asChild, children, ...props }: TooltipTriggerProps) {\n const ctx = React.useContext(TooltipContext)\n if (!ctx) return <>{children}</>\n\n const triggerHandlers = {\n onPointerEnter: (e: React.PointerEvent) => {\n ;(props.onPointerEnter as ((e: React.PointerEvent) => void) | undefined)?.(e)\n ctx.show()\n },\n onPointerLeave: (e: React.PointerEvent) => {\n ;(props.onPointerLeave as ((e: React.PointerEvent) => void) | undefined)?.(e)\n ctx.hide()\n },\n onFocus: (e: React.FocusEvent) => {\n ;(props.onFocus as ((e: React.FocusEvent) => void) | undefined)?.(e)\n ctx.show()\n },\n onBlur: (e: React.FocusEvent) => {\n ;(props.onBlur as ((e: React.FocusEvent) => void) | undefined)?.(e)\n ctx.hide()\n },\n 'aria-describedby': ctx.open ? ctx.contentId : undefined,\n 'data-state': ctx.open ? 'open' : 'closed',\n }\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<Record<string, unknown>>\n return React.cloneElement(child, {\n ...props,\n ...triggerHandlers,\n ref: ctx.setTrigger,\n })\n }\n\n return (\n <button\n type=\"button\"\n {...props}\n {...triggerHandlers}\n ref={ctx.setTrigger as unknown as React.Ref<HTMLButtonElement>}\n >\n {children}\n </button>\n )\n}\n\ninterface TooltipContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: Side\n sideOffset?: number\n}\n\nconst TRANSFORM_BY_SIDE: Record<Side, string> = {\n top: 'translate(-50%, -100%)',\n bottom: 'translate(-50%, 0)',\n left: 'translate(-100%, -50%)',\n right: 'translate(0, -50%)',\n}\n\nconst TooltipContent = React.forwardRef<HTMLDivElement, TooltipContentProps>(\n ({ className, side = 'top', sideOffset = 4, style, ...props }, ref) => {\n const ctx = React.useContext(TooltipContext)\n const innerRef = React.useRef<HTMLDivElement | null>(null)\n const [coords, setCoords] = React.useState<{\n top: number\n left: number\n transform: string\n } | null>(null)\n\n React.useLayoutEffect(() => {\n if (!ctx?.open || !ctx.triggerRef.current) {\n setCoords(null)\n return\n }\n const r = ctx.triggerRef.current.getBoundingClientRect()\n const c = innerRef.current?.getBoundingClientRect()\n const ch = c?.height ?? 0\n const cw = c?.width ?? 0\n const vh = window.innerHeight\n const vw = window.innerWidth\n\n let s: Side = side\n if (s === 'top' && r.top - sideOffset - ch < 0) s = 'bottom'\n else if (s === 'bottom' && r.bottom + sideOffset + ch > vh) s = 'top'\n else if (s === 'left' && r.left - sideOffset - cw < 0) s = 'right'\n else if (s === 'right' && r.right + sideOffset + cw > vw) s = 'left'\n\n setCoords({\n top:\n s === 'top'\n ? r.top - sideOffset\n : s === 'bottom'\n ? r.bottom + sideOffset\n : r.top + r.height / 2,\n left:\n s === 'left'\n ? r.left - sideOffset\n : s === 'right'\n ? r.right + sideOffset\n : r.left + r.width / 2,\n transform: TRANSFORM_BY_SIDE[s],\n })\n }, [ctx?.open, side, sideOffset, ctx?.triggerRef])\n\n if (!ctx?.open) return null\n\n const setRefs = (node: HTMLDivElement | null) => {\n innerRef.current = node\n if (typeof ref === 'function') ref(node)\n else if (ref) (ref as React.MutableRefObject<HTMLDivElement | null>).current = node\n }\n\n return createPortal(\n <div\n ref={setRefs}\n id={ctx.contentId}\n role=\"tooltip\"\n className={cn(\n // The kit owns the tooltip's look: semantic tokens only, so it is\n // legible in every app without one of them defining a global class.\n // The `tooltip-content` hook is kept last-but-one so a host stylesheet\n // can still restyle every tooltip in one place (the ARBI app does, with\n // `!important` rules that win over these defaults).\n 'pointer-events-none max-w-[300px] break-words rounded-md border border-border bg-popover px-3 py-2 text-sm font-normal text-popover-foreground shadow-lg',\n 'tooltip-content',\n className\n )}\n style={{\n position: 'fixed',\n top: coords?.top ?? -9999,\n left: coords?.left ?? -9999,\n transform: coords?.transform ?? TRANSFORM_BY_SIDE[side],\n opacity: coords ? undefined : 0,\n zIndex: 9999,\n ...style,\n }}\n {...props}\n />,\n document.body\n )\n }\n)\nTooltipContent.displayName = 'TooltipContent'\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }\n","/**\n * IconToggle Component\n *\n * Base visual toggle button - switch toggle with +/- on hover\n *\n * DO NOT use directly - use a purpose-named wrapper instead (e.g. a\n * ContactToggle, VisibilityToggle, InChatToggle) so each call site reads as\n * what it does, not as a generic switch.\n */\n\nimport { LucideIcon, Plus, Minus } from 'lucide-react'\nimport { Tooltip, TooltipContent, TooltipTrigger } from './tooltip'\n\ninterface ColorClasses {\n text: string\n bg: string\n}\n\nexport interface IconToggleProps {\n icon: LucideIcon\n isActive: boolean\n onToggle: (isActive: boolean) => void\n colors: ColorClasses\n fillWhenActive?: boolean\n disabled?: boolean\n /** Tooltip to show when disabled (e.g., \"You cannot unshare this resource\") */\n disabledTooltip?: string\n showLabel?: boolean\n label?: string\n tooltipActive?: string\n tooltipInactive?: string\n tooltipMixed?: string\n isMixed?: boolean\n /** Set to false to disable tooltip (useful when nested inside another tooltip) */\n showTooltip?: boolean\n 'data-testid'?: string\n}\n\nexport function IconToggle({\n icon: Icon,\n isActive,\n onToggle,\n colors,\n fillWhenActive = false,\n disabled = false,\n disabledTooltip,\n showLabel = false,\n label,\n tooltipActive,\n tooltipInactive,\n tooltipMixed,\n isMixed = false,\n showTooltip = true,\n 'data-testid': dataTestId,\n}: IconToggleProps) {\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation()\n onToggle(!isActive)\n }\n\n const { bg: bgColorClass } = colors\n\n const tooltipText = disabled\n ? disabledTooltip\n : isMixed\n ? tooltipMixed\n : isActive\n ? tooltipActive\n : tooltipInactive\n\n const { text: textColorClass } = colors\n\n const button = (\n <div className=\"inline-flex items-center gap-2\">\n <button\n type=\"button\"\n onClick={handleClick}\n disabled={disabled}\n data-testid={dataTestId}\n aria-pressed={isMixed ? 'mixed' : isActive}\n className={`\n group/toggle relative inline-flex items-center h-4 w-8 rounded-full\n transition-colors cursor-pointer\n disabled:opacity-50 disabled:cursor-not-allowed\n ${isActive ? bgColorClass : isMixed ? 'bg-gray-400' : 'bg-muted'}\n `}\n >\n {/* Hover icon on the opposite side of thumb - hidden when disabled */}\n {isActive && !disabled && (\n <div className=\"absolute left-0 w-4 h-4 flex items-center justify-center\">\n <Minus className=\"w-2.5 h-2.5 text-white/70 hidden group-hover/toggle:block\" />\n </div>\n )}\n {!isActive && !disabled && (\n <div className=\"absolute right-0 w-4 h-4 flex items-center justify-center\">\n <Plus className=\"w-2.5 h-2.5 text-muted-foreground hidden group-hover/toggle:block\" />\n </div>\n )}\n {/* Sliding thumb */}\n <div\n className={`\n absolute h-4 w-4 rounded-full bg-white shadow-sm\n flex items-center justify-center\n transition-transform duration-200\n ${isActive ? 'translate-x-4' : 'translate-x-0'}\n `}\n >\n <Icon\n className={`w-2.5 h-2.5 ${isActive ? textColorClass : 'text-muted-foreground'} ${isActive && fillWhenActive ? 'fill-current' : ''}`}\n />\n </div>\n </button>\n </div>\n )\n\n return (\n <div className=\"inline-flex items-center gap-2\">\n {showLabel && label && <span className=\"font-semibold text-sm text-primary\">{label}</span>}\n {tooltipText && showTooltip ? (\n <Tooltip>\n <TooltipTrigger asChild onFocusCapture={(e) => e.stopPropagation()}>\n {button}\n </TooltipTrigger>\n <TooltipContent>\n <p>{tooltipText}</p>\n </TooltipContent>\n </Tooltip>\n ) : (\n button\n )}\n </div>\n )\n}\n","/**\n * DictateContext\n *\n * Lets `Input`/`Textarea`'s `dictate` prop work with a one-line `dictate` prop\n * anywhere in the app, instead of threading a `transcribe` function through\n * every field individually. A host app wraps its tree once with\n * `<DictateProvider transcribe={...} onError={...}>`; every `dictate`-enabled\n * field downstream then just works. Fields rendered outside a provider\n * silently render without a mic button — dictation is a progressive\n * enhancement, never a hard requirement.\n */\n\nimport { createContext, useContext } from 'react'\n\nexport interface DictateContextValue {\n transcribe: (blob: Blob) => Promise<string>\n onError?: (message: string) => void\n}\n\nconst DictateContext = createContext<DictateContextValue | null>(null)\n\nexport function DictateProvider({\n transcribe,\n onError,\n children,\n}: DictateContextValue & { children: React.ReactNode }) {\n return (\n <DictateContext.Provider value={{ transcribe, onError }}>{children}</DictateContext.Provider>\n )\n}\n\nexport function useDictateContext(): DictateContextValue | null {\n return useContext(DictateContext)\n}\n","import * as React from 'react'\nimport * as AvatarPrimitive from '@radix-ui/react-avatar'\n\nimport { cn } from '../lib/utils'\n\nconst Avatar = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Root\n ref={ref}\n className={cn('relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full', className)}\n {...props}\n />\n))\nAvatar.displayName = AvatarPrimitive.Root.displayName\n\nconst AvatarImage = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Image>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Image\n ref={ref}\n className={cn('aspect-square h-full w-full object-cover', className)}\n {...props}\n />\n))\nAvatarImage.displayName = AvatarPrimitive.Image.displayName\n\nconst AvatarFallback = React.forwardRef<\n React.ElementRef<typeof AvatarPrimitive.Fallback>,\n React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>\n>(({ className, ...props }, ref) => (\n <AvatarPrimitive.Fallback\n ref={ref}\n className={cn(\n 'flex h-full w-full items-center justify-center rounded-full bg-muted',\n className\n )}\n {...props}\n />\n))\nAvatarFallback.displayName = AvatarPrimitive.Fallback.displayName\n\nexport { Avatar, AvatarImage, AvatarFallback }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst badgeVariants = cva(\n 'inline-flex items-center rounded-md border px-2.5 py-0.5 text-sm font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2',\n {\n variants: {\n variant: {\n default: 'border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80',\n accent: 'border-transparent bg-ai-accent-soft text-ai-accent',\n secondary:\n 'border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80',\n destructive:\n 'border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80',\n outline: 'text-foreground',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n)\n\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {}\n\nfunction Badge({ className, variant, ...props }: BadgeProps) {\n return <div className={cn(badgeVariants({ variant }), className)} {...props} />\n}\n\nexport { Badge, badgeVariants }\n","import * as React from 'react'\nimport { Slot } from '@radix-ui/react-slot'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-base font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground shadow hover:bg-primary/90',\n accent: 'bg-ai-accent text-ai-accent-foreground shadow hover:bg-ai-accent/90',\n destructive: 'bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90',\n outline:\n 'border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-9 px-4 py-2',\n sm: 'h-8 rounded-md px-3',\n lg: 'h-10 rounded-md px-8',\n icon: 'h-9 w-9',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {\n asChild?: boolean\n}\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button'\n return (\n <Comp className={cn(buttonVariants({ variant, size, className }))} ref={ref} {...props} />\n )\n }\n)\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n","import * as React from 'react'\nimport * as HoverCardPrimitive from '@radix-ui/react-hover-card'\n\nimport { cn } from '../lib/utils'\n\nconst HoverCard = HoverCardPrimitive.Root\n\nconst HoverCardTrigger = HoverCardPrimitive.Trigger\n\nconst HoverCardContent = React.forwardRef<\n React.ElementRef<typeof HoverCardPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof HoverCardPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, ...props }, ref) => (\n <HoverCardPrimitive.Portal>\n <HoverCardPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-64 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-hover-card-content-transform-origin]',\n className\n )}\n {...props}\n />\n </HoverCardPrimitive.Portal>\n))\nHoverCardContent.displayName = HoverCardPrimitive.Content.displayName\n\nexport { HoverCard, HoverCardTrigger, HoverCardContent }\n","import * as React from 'react'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\n/**\n * Clean-ARBI design contract rule 3: borderless by default; shadows\n * only when an element needs to read as elevated/floating.\n *\n * - `flat` (default): just a rounded surface, no border, no shadow.\n * Separation comes from background + spacing.\n * - `outline`: adds a single border for surfaces that need a visible\n * edge (e.g. selectable list cards, embedded panels).\n * - `elevated`: border + a subtle shadow for cards that should lift.\n *\n * Self-styled consumers that pass their own border/shadow classes keep\n * working unchanged on the default `flat` base.\n */\nconst cardVariants = cva('rounded-lg bg-card text-card-foreground', {\n variants: {\n variant: {\n flat: '',\n outline: 'border',\n elevated: 'border shadow-sm',\n },\n },\n defaultVariants: {\n variant: 'flat',\n },\n})\n\nexport interface CardProps\n extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n ({ className, variant, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card\"\n className={cn(cardVariants({ variant }), className)}\n {...props}\n />\n )\n)\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-header\"\n className={cn('flex flex-col space-y-1.5 p-6', className)}\n {...props}\n />\n )\n)\nCardHeader.displayName = 'CardHeader'\n\nconst CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-title\"\n className={cn('font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n )\n)\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-description\"\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n )\n)\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div ref={ref} data-slot=\"card-content\" className={cn('p-6 pt-0', className)} {...props} />\n )\n)\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n ({ className, ...props }, ref) => (\n <div\n ref={ref}\n data-slot=\"card-footer\"\n className={cn('flex items-center p-6 pt-0', className)}\n {...props}\n />\n )\n)\nCardFooter.displayName = 'CardFooter'\n\nexport { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent, cardVariants }\n","/**\n * Shared getUserMedia error classification — used by both `useAudioRecorder`\n * (microphone) and `useCameraStream` (camera), so \"permission denied\" /\n * \"device not found\" / \"not supported\" read as the same message shape\n * regardless of which device was requested, without duplicating the\n * DOMException-name matching in every recorder hook.\n */\nexport type MediaDeviceKind = 'microphone' | 'camera'\n\nexport function classifyMediaError(err: unknown, kind: MediaDeviceKind): string {\n const label = kind === 'camera' ? 'Camera' : 'Microphone'\n const name = err instanceof DOMException ? err.name : undefined\n if (name === 'NotAllowedError' || name === 'SecurityError') {\n return `${label} access is blocked. Allow ${kind} permission in your browser settings to use this feature.`\n }\n if (name === 'NotFoundError' || name === 'DevicesNotFoundError') {\n return `No ${kind} found on this device.`\n }\n if (!navigator.mediaDevices?.getUserMedia) {\n return `${kind === 'camera' ? 'Camera' : 'Voice'} input is not supported in this browser.`\n }\n return `Could not access the ${kind}. Please try again.`\n}\n","/**\n * useAudioRecorder\n *\n * Shared recording engine — getUserMedia capture, MediaRecorder lifecycle,\n * and an AnalyserNode-driven live level meter. Host apps layer their own\n * interaction model on top of the primitives here: a press-and-hold mic\n * calls start()/stop() on press/release and never pauses; a toggle-style\n * recorder exposes all of start/pause/resume/stop/reset as buttons.\n *\n * REUSE-FIRST: no app coupling. Failures surface via the returned `error`\n * string rather than an app-specific toast/notification call — the host\n * decides how (or whether) to display it.\n */\n\nimport { useCallback, useEffect, useRef, useState } from 'react'\nimport { classifyMediaError } from './media-error'\n\n// How often the live level meter updates (ms). Fast enough to read as live,\n// slow enough not to spam React with a render per animation frame.\nconst LEVEL_UPDATE_INTERVAL_MS = 50\n\nexport type AudioRecorderState = 'idle' | 'recording' | 'paused' | 'stopped'\n\nexport interface UseAudioRecorderResult {\n state: AudioRecorderState\n /** Live input level, 0-1. 0 while idle/paused/stopped. */\n level: number\n /** Total recorded duration so far (excludes time spent paused). Frozen at\n * its final value once stopped, until reset() clears it. */\n elapsedMs: number\n /** The finished recording. Only set once state === 'stopped'. */\n blob: Blob | null\n /** The MediaRecorder MIME type used (e.g. 'audio/webm'). Only set once\n * recording has started at least once. */\n mimeType: string | null\n /** A human-readable message from the last failed start() attempt. Cleared\n * at the start of every new attempt, so it always transitions through\n * `null` even if the next failure has the same message. */\n error: string | null\n start: () => Promise<void>\n pause: () => void\n resume: () => void\n stop: () => void\n /** Back to idle: clears blob/elapsedMs/mimeType, ready to record again. */\n reset: () => void\n}\n\nexport function useAudioRecorder(): UseAudioRecorderResult {\n const [state, setState] = useState<AudioRecorderState>('idle')\n const [level, setLevel] = useState(0)\n const [elapsedMs, setElapsedMs] = useState(0)\n const [blob, setBlob] = useState<Blob | null>(null)\n const [mimeType, setMimeType] = useState<string | null>(null)\n const [error, setError] = useState<string | null>(null)\n\n const mediaRecorderRef = useRef<MediaRecorder | null>(null)\n const chunksRef = useRef<Blob[]>([])\n const streamRef = useRef<MediaStream | null>(null)\n const stateRef = useRef<AudioRecorderState>('idle')\n stateRef.current = state\n // Elapsed time is tracked as (time accumulated in prior recording segments)\n // + (time since the current segment started) — pause/resume closes one\n // segment and opens another, so a pause never counts toward the duration.\n const segmentStartRef = useRef(0)\n const accumulatedMsRef = useRef(0)\n const audioContextRef = useRef<AudioContext | null>(null)\n const analyserRef = useRef<AnalyserNode | null>(null)\n const levelRafRef = useRef<number | null>(null)\n\n const stopMeter = useCallback(() => {\n if (levelRafRef.current !== null) cancelAnimationFrame(levelRafRef.current)\n levelRafRef.current = null\n analyserRef.current = null\n void audioContextRef.current?.close().catch(() => {})\n audioContextRef.current = null\n }, [])\n\n const startMeter = useCallback((stream: MediaStream) => {\n const audioContext = new AudioContext()\n const source = audioContext.createMediaStreamSource(stream)\n const analyser = audioContext.createAnalyser()\n analyser.fftSize = 256\n source.connect(analyser)\n audioContextRef.current = audioContext\n analyserRef.current = analyser\n\n const data = new Uint8Array(analyser.frequencyBinCount)\n let lastUpdate = 0\n const tick = (t: number) => {\n const active = analyserRef.current\n if (!active) return\n if (t - lastUpdate >= LEVEL_UPDATE_INTERVAL_MS) {\n lastUpdate = t\n active.getByteTimeDomainData(data)\n let sumSquares = 0\n for (let i = 0; i < data.length; i++) {\n const centered = (data[i] - 128) / 128\n sumSquares += centered * centered\n }\n const rms = Math.sqrt(sumSquares / data.length)\n // Normal speech RMS is tiny (a laptop mic at conversational\n // distance rarely exceeds ~0.1) — boost it, then apply a sqrt\n // (perceptual) curve so quiet-to-moderate speech is clearly\n // visible instead of needing to shout to move the meter at all.\n setLevel(Math.sqrt(Math.min(1, rms * 8)))\n setElapsedMs(accumulatedMsRef.current + (t - segmentStartRef.current))\n }\n levelRafRef.current = requestAnimationFrame(tick)\n }\n levelRafRef.current = requestAnimationFrame(tick)\n }, [])\n\n const stopTracks = useCallback(() => {\n streamRef.current?.getTracks().forEach((t) => t.stop())\n streamRef.current = null\n }, [])\n\n useEffect(\n () => () => {\n stopTracks()\n stopMeter()\n },\n [stopTracks, stopMeter]\n )\n\n const start = useCallback(async () => {\n if (stateRef.current === 'recording' || stateRef.current === 'paused') return\n setError(null)\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n streamRef.current = stream\n const mt = MediaRecorder.isTypeSupported('audio/webm') ? 'audio/webm' : 'audio/mp4'\n const recorder = new MediaRecorder(stream, { mimeType: mt })\n chunksRef.current = []\n recorder.ondataavailable = (e) => {\n if (e.data.size > 0) chunksRef.current.push(e.data)\n }\n mediaRecorderRef.current = recorder\n setMimeType(mt)\n setBlob(null)\n accumulatedMsRef.current = 0\n segmentStartRef.current = performance.now()\n recorder.start()\n setState('recording')\n startMeter(stream)\n } catch (err) {\n stopTracks()\n setError(classifyMediaError(err, 'microphone'))\n }\n }, [startMeter, stopTracks])\n\n const pause = useCallback(() => {\n const recorder = mediaRecorderRef.current\n if (!recorder || recorder.state !== 'recording') return\n recorder.pause()\n accumulatedMsRef.current += performance.now() - segmentStartRef.current\n stopMeter()\n setLevel(0)\n setState('paused')\n }, [stopMeter])\n\n const resume = useCallback(() => {\n const recorder = mediaRecorderRef.current\n if (!recorder || recorder.state !== 'paused') return\n recorder.resume()\n segmentStartRef.current = performance.now()\n setState('recording')\n if (streamRef.current) startMeter(streamRef.current)\n }, [startMeter])\n\n const stop = useCallback(() => {\n const recorder = mediaRecorderRef.current\n if (!recorder || recorder.state === 'inactive') return\n // Freeze the final duration before tearing the meter down — recording\n // won't include the time it takes MediaRecorder to flush+fire onstop.\n const finalElapsed =\n recorder.state === 'paused'\n ? accumulatedMsRef.current\n : accumulatedMsRef.current + (performance.now() - segmentStartRef.current)\n stopMeter()\n recorder.onstop = () => {\n stopTracks()\n const finalBlob = chunksRef.current.length\n ? new Blob(chunksRef.current, { type: recorder.mimeType })\n : null\n setBlob(finalBlob)\n setElapsedMs(finalElapsed)\n setLevel(0)\n setState('stopped')\n }\n recorder.stop()\n }, [stopMeter, stopTracks])\n\n const reset = useCallback(() => {\n setState('idle')\n setBlob(null)\n setElapsedMs(0)\n setLevel(0)\n setMimeType(null)\n setError(null)\n }, [])\n\n return { state, level, elapsedMs, blob, mimeType, error, start, pause, resume, stop, reset }\n}\n","/** Formats a duration in milliseconds as \"mm:ss\", clamped to non-negative. */\nexport function formatElapsed(ms: number): string {\n const totalSeconds = Math.max(0, Math.floor(ms / 1000))\n const minutes = Math.floor(totalSeconds / 60)\n const seconds = totalSeconds % 60\n return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`\n}\n","/**\n * MicWaveformIndicator\n *\n * The REC-badge + timer + waveform visual — the reusable \"is it hearing me\"\n * piece shared by any press-and-hold or toggle-style audio recorder a host\n * app builds on `useAudioRecorder`. Purely presentational: no portal, no\n * card chrome, no caption — callers provide their own context around it.\n *\n * Styled like the REC-badge + timer + waveform convention every voice\n * recorder app uses (Voice Memos, WhatsApp, Slack huddles) — recognisable\n * at a glance as \"this bar height is how loud you are\", not just decoration.\n */\n\nimport { formatElapsed } from './format-elapsed'\n\n// A waveform silhouette (bell-shaped with a little natural asymmetry) rather\n// than a uniform bank of bars — reads as an actual audio waveform rather\n// than N identical dots. Every bar still scales with the same live `level`.\nconst BAR_WEIGHTS = [\n 0.25, 0.32, 0.48, 0.62, 0.82, 0.56, 0.92, 0.72, 1, 0.86, 0.62, 0.96, 0.76, 0.5, 0.84, 0.66, 0.42,\n 0.56, 0.36, 0.28, 0.22,\n]\nconst MIN_BAR_PX = 3\nconst MAX_BAR_PX = 40\n\nexport interface MicWaveformIndicatorProps {\n level: number\n elapsedMs: number\n /** Dims the REC badge and freezes the \"recording\" framing while paused,\n * without needing a separate visual language. */\n paused?: boolean\n}\n\nexport function MicWaveformIndicator({\n level,\n elapsedMs,\n paused = false,\n}: MicWaveformIndicatorProps) {\n return (\n <div className=\"flex flex-col items-center gap-3\" data-testid=\"mic-waveform-indicator\">\n <div className=\"flex items-center gap-2\">\n <span className=\"relative flex h-2 w-2\">\n {!paused && (\n <span className=\"absolute inline-flex h-full w-full animate-ping rounded-full bg-red-500 opacity-75\" />\n )}\n <span\n className={`relative inline-flex h-2 w-2 rounded-full ${paused ? 'bg-muted-foreground' : 'bg-red-500'}`}\n />\n </span>\n <span\n className={`text-xs font-semibold uppercase tracking-wide ${paused ? 'text-muted-foreground' : 'text-red-500'}`}\n >\n {paused ? 'Paused' : 'Rec'}\n </span>\n <span className=\"font-mono text-xs tabular-nums text-muted-foreground\">\n {formatElapsed(elapsedMs)}\n </span>\n </div>\n <div className=\"flex h-10 items-end gap-[3px]\" data-testid=\"mic-waveform-indicator-bars\">\n {BAR_WEIGHTS.map((weight, i) => (\n <span\n key={i}\n className=\"w-1 rounded-full bg-secondary transition-[height] duration-75 ease-out\"\n style={{\n height: Math.min(MAX_BAR_PX, Math.max(MIN_BAR_PX, level * weight * MAX_BAR_PX)),\n }}\n />\n ))}\n </div>\n </div>\n )\n}\n","/**\n * MicRecordingOverlay\n *\n * The big, unmissable \"is it hearing me\" feedback for an active recording —\n * a centered, portaled card with the REC-badge/timer/waveform visual\n * (MicWaveformIndicator). Shared by any recorder in the app that wants the\n * same prominent treatment while actively recording: the chat composer's\n * press-and-hold mic and the inline dictate button both use this, so\n * \"you are recording\" looks and feels identical everywhere it happens.\n *\n * Non-interactive (pointer-events disabled) so it never blocks a click\n * elsewhere; mounted via a portal so it renders above whatever field or\n * layout it was triggered from, regardless of overflow/z-index there.\n */\n\nimport { createPortal } from 'react-dom'\nimport { MicWaveformIndicator } from './MicWaveformIndicator'\n\nexport interface MicRecordingOverlayProps {\n level: number\n elapsedMs: number\n paused?: boolean\n /** Caption under the waveform — defaults to the press-and-hold framing. */\n caption?: string\n}\n\nexport function MicRecordingOverlay({\n level,\n elapsedMs,\n paused,\n caption = 'Keep button pressed while speaking',\n}: MicRecordingOverlayProps) {\n if (typeof document === 'undefined') return null\n return createPortal(\n <div\n aria-hidden\n className=\"pointer-events-none fixed inset-0 z-[2147483647] flex items-center justify-center\"\n data-testid=\"mic-recording-overlay\"\n >\n <div className=\"flex w-72 flex-col items-center gap-3 rounded-2xl bg-background/95 px-6 py-5 shadow-2xl ring-1 ring-border backdrop-blur-sm\">\n <MicWaveformIndicator level={level} elapsedMs={elapsedMs} paused={paused} />\n <p className=\"text-center text-sm font-medium text-muted-foreground\">{caption}</p>\n </div>\n </div>,\n document.body\n )\n}\n","/**\n * InlineMicButton\n *\n * A dictate-instead-of-type button meant to sit inside a text field's own\n * padding (a corner of an `<input>`/`<textarea>`), not a standalone feature\n * in its own right — no waveform, no timer, no card chrome. Only shows while\n * the host field is focused (or mid-recording/transcribing, so it never\n * vanishes out from under an active dictation) — otherwise the field stays\n * clean. Idle it's subtle (small, muted); once pressed it's the opposite —\n * a solid, unmissable recording indicator, because \"is this thing listening\"\n * is the one moment subtlety actively hurts. Built on the same\n * useAudioRecorder engine as VoiceNoteRecorder/MicButton.\n *\n * Two ways to use it, same as WhatsApp/Telegram voice messages:\n * - Press and hold, release to stop — quick dictation, thumb-friendly.\n * - A quick tap instead locks it into hands-free recording (no need to keep\n * the pointer down for a long note); tap again to stop. A tap is whatever\n * releases before HOLD_THRESHOLD_MS — past that it's a hold, and release\n * stops it immediately.\n *\n * REUSE-FIRST: props/callbacks in. The host supplies `transcribe` (its own\n * speech-to-text endpoint), `focused` (its own focus state), and\n * `onTranscript` (where the text goes — append, insert at cursor, whatever\n * fits the field).\n *\n * `preventDefault()` on pointerdown so pressing this button never steals\n * focus from the field it's embedded in — without that, a field that blurs\n * to collapse itself (e.g. an editor that exits edit mode on blur) would\n * close out from under a user mid-dictation, and `focused` would immediately\n * flip false and hide the button being pressed.\n */\n\nimport { useEffect, useRef, useState } from 'react'\nimport { Mic, Square, Loader2 } from 'lucide-react'\nimport { useAudioRecorder } from './useAudioRecorder'\nimport { MicRecordingOverlay } from './MicRecordingOverlay'\n\n// Below this, a press-release is a \"tap\" (locks into hands-free recording);\n// at or above it, release stops the recording immediately (press-and-hold).\nconst HOLD_THRESHOLD_MS = 350\n\nexport interface InlineMicButtonProps {\n /** Whether the host field currently has focus. The button renders only\n * while this is true, or while actively recording/transcribing. */\n focused: boolean\n /** Called with the transcribed text once recording stops and transcription\n * resolves. The host decides how to merge it into the field's value. */\n onTranscript: (text: string) => void\n /** Surfaces recorder or transcription failures — wire to the host's own\n * notification system. Without it, failures are silent. */\n onError?: (message: string) => void\n /** The host's own speech-to-text call. */\n transcribe: (blob: Blob) => Promise<string>\n className?: string\n}\n\nexport function InlineMicButton({\n focused,\n onTranscript,\n onError,\n transcribe,\n className,\n}: InlineMicButtonProps) {\n const recorder = useAudioRecorder()\n const [isTranscribing, setIsTranscribing] = useState(false)\n // True once a quick tap has left the recording running hands-free — the\n // next press (of any length) is the \"stop\" gesture rather than a new hold.\n const [latched, setLatched] = useState(false)\n const pressedAtRef = useRef(0)\n\n useEffect(() => {\n if (recorder.error) onError?.(recorder.error)\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [recorder.error])\n\n useEffect(() => {\n if (recorder.state !== 'stopped' || !recorder.blob) return\n const blob = recorder.blob\n setIsTranscribing(true)\n transcribe(blob)\n .then((text) => {\n if (text.trim()) onTranscript(text.trim())\n })\n .catch((err) => {\n onError?.(err instanceof Error ? err.message : 'Could not transcribe audio.')\n })\n .finally(() => {\n setIsTranscribing(false)\n setLatched(false)\n recorder.reset()\n })\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [recorder.state, recorder.blob])\n\n const isRecording = recorder.state === 'recording'\n const isBusy = isTranscribing\n\n if (!focused && !isRecording && !isBusy) return null\n\n const handlePointerDown = (e: React.PointerEvent) => {\n e.preventDefault()\n if (isRecording) return // latched (or otherwise already going) — let pointerup stop it\n pressedAtRef.current = Date.now()\n void recorder.start()\n }\n\n const handlePointerUp = () => {\n if (!isRecording) return\n if (latched) {\n recorder.stop()\n setLatched(false)\n return\n }\n const held = Date.now() - pressedAtRef.current\n if (held >= HOLD_THRESHOLD_MS) {\n recorder.stop()\n } else {\n setLatched(true)\n }\n }\n\n const handlePointerLeave = () => {\n // Dragged off mid-hold (not latched into hands-free) — stop, same as\n // releasing over the button. Latched recording stays running regardless\n // of where the pointer goes; that's the point of hands-free.\n if (isRecording && !latched) recorder.stop()\n }\n\n return (\n <>\n <button\n type=\"button\"\n onPointerDown={handlePointerDown}\n onPointerUp={handlePointerUp}\n onPointerLeave={handlePointerLeave}\n onPointerCancel={handlePointerLeave}\n disabled={isBusy}\n title={\n isRecording ? 'Release to stop, or tap again if hands-free' : 'Hold, or tap to dictate'\n }\n data-testid=\"inline-mic-button\"\n className={`inline-flex items-center justify-center rounded-full transition-colors disabled:pointer-events-none ${\n isRecording\n ? 'h-7 w-7 bg-red-500 text-white shadow-sm hover:bg-red-600'\n : isBusy\n ? 'h-6 w-6 text-muted-foreground'\n : 'h-6 w-6 text-muted-foreground/50 hover:bg-muted hover:text-muted-foreground'\n } ${className ?? ''}`}\n >\n {isBusy ? (\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n ) : isRecording ? (\n <Square className=\"h-3 w-3 fill-current\" />\n ) : (\n <Mic className=\"h-3.5 w-3.5\" />\n )}\n </button>\n {/* Same big, unmissable \"is it hearing me\" feedback as the chat\n composer's mic — reused, not reimplemented, so every recording in\n the app looks and feels the same. */}\n {isRecording && (\n <MicRecordingOverlay\n level={recorder.level}\n elapsedMs={recorder.elapsedMs}\n caption={latched ? 'Tap the mic again to stop' : 'Release to stop, or keep holding'}\n />\n )}\n </>\n )\n}\n","import * as React from 'react'\nimport { cn } from '../lib/utils'\nimport { InlineMicButton } from '../documents/InlineMicButton'\nimport { useDictateContext } from './DictateContext'\n\nexport interface InputProps extends React.ComponentProps<'input'> {\n /** Adds a small dictate-instead-of-type button inside the field's right\n * edge (visible only while focused, or mid-recording) that appends\n * transcribed speech to the field's value. Requires a `DictateProvider`\n * ancestor supplying the host's transcribe endpoint — with none, this is\n * a no-op (no button renders). Not meant for password/search/numeric/code\n * fields — opt in per field, not on by default. */\n dictate?: boolean\n}\n\nconst Input = React.forwardRef<HTMLInputElement, InputProps>(\n ({ className, type, dictate, onFocus, onBlur, ...props }, forwardedRef) => {\n const dictateCtx = useDictateContext()\n const [focused, setFocused] = React.useState(false)\n const innerRef = React.useRef<HTMLInputElement>(null)\n React.useImperativeHandle(forwardedRef, () => innerRef.current as HTMLInputElement)\n\n const showDictate = dictate && !!dictateCtx && !props.disabled && !props.readOnly\n\n const input = (\n <input\n type={type}\n data-slot=\"input\"\n className={cn(\n 'flex h-9 w-full rounded-md border border-input bg-background px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground/60 focus-visible:outline-none focus-visible:border-ring/50 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n showDictate && 'pr-9',\n className\n )}\n ref={innerRef}\n onFocus={(e) => {\n setFocused(true)\n onFocus?.(e)\n }}\n onBlur={(e) => {\n setFocused(false)\n onBlur?.(e)\n }}\n {...props}\n />\n )\n\n if (!showDictate) return input\n\n return (\n <div className=\"relative w-full\">\n {input}\n <InlineMicButton\n focused={focused}\n transcribe={dictateCtx.transcribe}\n onError={dictateCtx.onError}\n className=\"absolute right-1.5 top-1/2 -translate-y-1/2\"\n onTranscript={(text) => {\n const el = innerRef.current\n if (!el) return\n const next = el.value ? `${el.value} ${text}` : text\n const setter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n 'value'\n )?.set\n setter?.call(el, next)\n el.dispatchEvent(new Event('input', { bubbles: true }))\n }}\n />\n </div>\n )\n }\n)\nInput.displayName = 'Input'\n\nexport { Input }\n","'use client'\n\nimport * as React from 'react'\n\ninterface LabelProps extends React.LabelHTMLAttributes<HTMLLabelElement> {\n className?: string\n}\n\nconst Label = React.forwardRef<HTMLLabelElement, LabelProps>(({ className, ...props }, ref) => (\n <label\n ref={ref}\n className={`text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70 ${className || ''}`}\n {...props}\n />\n))\n\nLabel.displayName = 'Label'\n\nexport { Label }\n","import * as React from 'react'\nimport * as SeparatorPrimitive from '@radix-ui/react-separator'\n\nimport { cn } from '../lib/utils'\n\nconst Separator = React.forwardRef<\n React.ElementRef<typeof SeparatorPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof SeparatorPrimitive.Root>\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n <SeparatorPrimitive.Root\n ref={ref}\n decorative={decorative}\n orientation={orientation}\n className={cn(\n 'shrink-0 bg-border',\n orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]',\n className\n )}\n {...props}\n />\n))\nSeparator.displayName = SeparatorPrimitive.Root.displayName\n\nexport { Separator }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\nimport { InlineMicButton } from '../documents/InlineMicButton'\nimport { useDictateContext } from './DictateContext'\n\nexport interface TextareaProps extends React.ComponentProps<'textarea'> {\n /** Adds a small dictate-instead-of-type button inside the field's top-right\n * corner (visible only while focused, or mid-recording) that appends\n * transcribed speech to the field's value. Requires a `DictateProvider`\n * ancestor supplying the host's transcribe endpoint — with none, this is\n * a no-op (no button renders). */\n dictate?: boolean\n}\n\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>(\n ({ className, dictate, onFocus, onBlur, ...props }, forwardedRef) => {\n const dictateCtx = useDictateContext()\n const [focused, setFocused] = React.useState(false)\n const innerRef = React.useRef<HTMLTextAreaElement>(null)\n React.useImperativeHandle(forwardedRef, () => innerRef.current as HTMLTextAreaElement)\n\n const showDictate = dictate && !!dictateCtx && !props.disabled && !props.readOnly\n\n const textarea = (\n <textarea\n className={cn(\n 'flex min-h-[60px] w-full rounded-md border border-input bg-background px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground/60 focus-visible:outline-none focus-visible:border-ring/50 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm',\n showDictate && 'pr-9',\n className\n )}\n ref={innerRef}\n onFocus={(e) => {\n setFocused(true)\n onFocus?.(e)\n }}\n onBlur={(e) => {\n setFocused(false)\n onBlur?.(e)\n }}\n {...props}\n />\n )\n\n if (!showDictate) return textarea\n\n return (\n <div className=\"relative w-full\">\n {textarea}\n <InlineMicButton\n focused={focused}\n transcribe={dictateCtx.transcribe}\n onError={dictateCtx.onError}\n className=\"absolute right-1.5 top-1.5\"\n onTranscript={(text) => {\n const el = innerRef.current\n if (!el) return\n const next = el.value ? `${el.value} ${text}` : text\n const setter = Object.getOwnPropertyDescriptor(\n window.HTMLTextAreaElement.prototype,\n 'value'\n )?.set\n setter?.call(el, next)\n el.dispatchEvent(new Event('input', { bubbles: true }))\n }}\n />\n </div>\n )\n }\n)\nTextarea.displayName = 'Textarea'\n\nexport { Textarea }\n","import * as CollapsiblePrimitive from '@radix-ui/react-collapsible'\n\nconst Collapsible = CollapsiblePrimitive.Root\n\nconst CollapsibleTrigger = CollapsiblePrimitive.CollapsibleTrigger\n\nconst CollapsibleContent = CollapsiblePrimitive.CollapsibleContent\n\nexport { Collapsible, CollapsibleTrigger, CollapsibleContent }\n","import * as React from 'react'\nimport * as ProgressPrimitive from '@radix-ui/react-progress'\n\nimport { cn } from '../lib/utils'\n\nconst Progress = React.forwardRef<\n React.ElementRef<typeof ProgressPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ProgressPrimitive.Root>\n>(({ className, value, ...props }, ref) => (\n <ProgressPrimitive.Root\n ref={ref}\n className={cn('relative h-2 w-full overflow-hidden rounded-full bg-primary/20', className)}\n {...props}\n >\n <ProgressPrimitive.Indicator\n className=\"h-full w-full flex-1 bg-primary transition-all\"\n style={{ transform: `translateX(-${100 - (value || 0)}%)` }}\n />\n </ProgressPrimitive.Root>\n))\nProgress.displayName = ProgressPrimitive.Root.displayName\n\nexport { Progress }\n","import * as React from 'react'\nimport * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area'\n\nimport { cn } from '../lib/utils'\n\nconst ScrollArea = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.Root>\n>(({ className, children, ...props }, ref) => (\n <ScrollAreaPrimitive.Root\n ref={ref}\n className={cn('relative overflow-hidden', className)}\n {...props}\n >\n <ScrollAreaPrimitive.Viewport className=\"h-full w-full rounded-[inherit]\">\n {children}\n </ScrollAreaPrimitive.Viewport>\n <ScrollBar />\n <ScrollAreaPrimitive.Corner />\n </ScrollAreaPrimitive.Root>\n))\nScrollArea.displayName = ScrollAreaPrimitive.Root.displayName\n\nconst ScrollBar = React.forwardRef<\n React.ElementRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>,\n React.ComponentPropsWithoutRef<typeof ScrollAreaPrimitive.ScrollAreaScrollbar>\n>(({ className, orientation = 'vertical', ...props }, ref) => (\n <ScrollAreaPrimitive.ScrollAreaScrollbar\n ref={ref}\n orientation={orientation}\n className={cn(\n 'flex touch-none select-none transition-colors',\n orientation === 'vertical' && 'h-full w-2.5 border-l border-l-transparent p-[1px]',\n orientation === 'horizontal' && 'h-2.5 flex-col border-t border-t-transparent p-[1px]',\n className\n )}\n {...props}\n >\n <ScrollAreaPrimitive.ScrollAreaThumb className=\"relative flex-1 rounded-full bg-border\" />\n </ScrollAreaPrimitive.ScrollAreaScrollbar>\n))\nScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName\n\nexport { ScrollArea, ScrollBar }\n","import * as React from 'react'\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group'\nimport { Circle } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\n\nconst RadioGroup = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Root>\n>(({ className, ...props }, ref) => {\n return <RadioGroupPrimitive.Root className={cn('grid gap-2', className)} {...props} ref={ref} />\n})\nRadioGroup.displayName = RadioGroupPrimitive.Root.displayName\n\nconst RadioGroupItem = React.forwardRef<\n React.ElementRef<typeof RadioGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof RadioGroupPrimitive.Item>\n>(({ className, ...props }, ref) => {\n return (\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n 'aspect-square h-4 w-4 rounded-full border border-primary text-primary focus:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator className=\"flex items-center justify-center\">\n <Circle className=\"h-2.5 w-2.5 fill-current text-current\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n )\n})\nRadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName\n\nexport { RadioGroup, RadioGroupItem }\n","import * as React from 'react'\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox'\nimport { Check } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\n\nconst Checkbox = React.forwardRef<\n React.ElementRef<typeof CheckboxPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>\n>(({ className, ...props }, ref) => (\n <CheckboxPrimitive.Root\n ref={ref}\n className={cn(\n 'peer h-4 w-4 shrink-0 rounded-sm border border-primary shadow focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground',\n className\n )}\n {...props}\n >\n <CheckboxPrimitive.Indicator className={cn('flex items-center justify-center text-current')}>\n <Check className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n))\nCheckbox.displayName = CheckboxPrimitive.Root.displayName\n\nexport { Checkbox }\n","import * as React from 'react'\nimport * as SwitchPrimitives from '@radix-ui/react-switch'\n\nimport { cn } from '../lib/utils'\n\nconst Switch = React.forwardRef<\n React.ElementRef<typeof SwitchPrimitives.Root>,\n React.ComponentPropsWithoutRef<typeof SwitchPrimitives.Root>\n>(({ className, ...props }, ref) => (\n <SwitchPrimitives.Root\n className={cn(\n 'peer inline-flex h-5 w-9 shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent shadow-sm transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input',\n className\n )}\n {...props}\n ref={ref}\n >\n <SwitchPrimitives.Thumb\n className={cn(\n 'pointer-events-none block h-4 w-4 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0'\n )}\n />\n </SwitchPrimitives.Root>\n))\nSwitch.displayName = SwitchPrimitives.Root.displayName\n\nexport { Switch }\n","import * as React from 'react'\nimport * as TabsPrimitive from '@radix-ui/react-tabs'\n\nimport { cn } from '../lib/utils'\n\nconst Tabs = TabsPrimitive.Root\n\nconst TabsList = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.List>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.List\n ref={ref}\n className={cn(\n 'inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground',\n className\n )}\n {...props}\n />\n))\nTabsList.displayName = TabsPrimitive.List.displayName\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Trigger>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Trigger\n ref={ref}\n className={cn(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow',\n className\n )}\n {...props}\n />\n))\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName\n\nconst TabsContent = React.forwardRef<\n React.ElementRef<typeof TabsPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof TabsPrimitive.Content>\n>(({ className, ...props }, ref) => (\n <TabsPrimitive.Content\n ref={ref}\n className={cn(\n 'mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n className\n )}\n {...props}\n />\n))\nTabsContent.displayName = TabsPrimitive.Content.displayName\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent }\n","import * as React from 'react'\n\nimport { cn } from '../lib/utils'\n\nconst Table = React.forwardRef<HTMLTableElement, React.HTMLAttributes<HTMLTableElement>>(\n ({ className, ...props }, ref) => (\n <div className=\"relative w-full overflow-auto\">\n <table ref={ref} className={cn('w-full caption-bottom text-sm', className)} {...props} />\n </div>\n )\n)\nTable.displayName = 'Table'\n\nconst TableHeader = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <thead ref={ref} className={cn('[&_tr]:border-b', className)} {...props} />\n))\nTableHeader.displayName = 'TableHeader'\n\nconst TableBody = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tbody ref={ref} className={cn('[&_tr:last-child]:border-0', className)} {...props} />\n))\nTableBody.displayName = 'TableBody'\n\nconst TableFooter = React.forwardRef<\n HTMLTableSectionElement,\n React.HTMLAttributes<HTMLTableSectionElement>\n>(({ className, ...props }, ref) => (\n <tfoot\n ref={ref}\n className={cn('border-t bg-muted/50 font-medium [&>tr]:last:border-b-0', className)}\n {...props}\n />\n))\nTableFooter.displayName = 'TableFooter'\n\nconst TableRow = React.forwardRef<HTMLTableRowElement, React.HTMLAttributes<HTMLTableRowElement>>(\n ({ className, ...props }, ref) => (\n <tr\n ref={ref}\n className={cn(\n 'border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted',\n className\n )}\n {...props}\n />\n )\n)\nTableRow.displayName = 'TableRow'\n\ninterface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n className?: string\n}\n\nconst TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(\n ({ className, ...props }, ref) => (\n <th\n ref={ref}\n className={cn(\n 'h-10 px-2 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n)\nTableHead.displayName = 'TableHead'\n\ninterface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n className?: string\n}\n\nconst TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(\n ({ className, ...props }, ref) => (\n <td\n ref={ref}\n className={cn(\n 'p-2 align-middle [&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-[2px]',\n className\n )}\n {...props}\n />\n )\n)\nTableCell.displayName = 'TableCell'\n\nconst TableCaption = React.forwardRef<\n HTMLTableCaptionElement,\n React.HTMLAttributes<HTMLTableCaptionElement>\n>(({ className, ...props }, ref) => (\n <caption ref={ref} className={cn('mt-4 text-sm text-muted-foreground', className)} {...props} />\n))\nTableCaption.displayName = 'TableCaption'\n\nexport { Table, TableHeader, TableBody, TableFooter, TableHead, TableRow, TableCell, TableCaption }\n","import * as React from 'react'\nimport * as SliderPrimitive from '@radix-ui/react-slider'\n\nimport { cn } from '../lib/utils'\n\ninterface SliderProps extends React.ComponentPropsWithoutRef<typeof SliderPrimitive.Root> {\n rangeClassName?: string\n}\n\nconst Slider = React.forwardRef<React.ElementRef<typeof SliderPrimitive.Root>, SliderProps>(\n ({ className, rangeClassName, ...props }, ref) => (\n <SliderPrimitive.Root\n ref={ref}\n className={cn('relative flex w-full touch-none select-none items-center', className)}\n {...props}\n >\n <SliderPrimitive.Track className=\"relative h-1.5 w-full grow overflow-hidden rounded-full bg-primary/20\">\n <SliderPrimitive.Range className={cn('absolute h-full bg-primary', rangeClassName)} />\n </SliderPrimitive.Track>\n <SliderPrimitive.Thumb className=\"block h-4 w-4 rounded-full border border-primary/50 bg-background shadow transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50\" />\n </SliderPrimitive.Root>\n )\n)\nSlider.displayName = SliderPrimitive.Root.displayName\n\nexport { Slider }\n","'use client'\n\nimport * as React from 'react'\nimport * as TogglePrimitive from '@radix-ui/react-toggle'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\n\nconst toggleVariants = cva(\n 'inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'bg-transparent',\n outline:\n 'border border-input bg-transparent shadow-sm hover:bg-accent hover:text-accent-foreground',\n },\n size: {\n default: 'h-9 px-2 min-w-9',\n sm: 'h-8 px-1.5 min-w-8',\n lg: 'h-10 px-2.5 min-w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n)\n\nconst Toggle = React.forwardRef<\n React.ElementRef<typeof TogglePrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>\n>(({ className, variant, size, ...props }, ref) => (\n <TogglePrimitive.Root\n ref={ref}\n className={cn(toggleVariants({ variant, size, className }))}\n {...props}\n />\n))\n\nToggle.displayName = TogglePrimitive.Root.displayName\n\nexport { Toggle, toggleVariants }\n","import * as React from 'react'\nimport * as ToggleGroupPrimitive from '@radix-ui/react-toggle-group'\nimport { type VariantProps } from 'class-variance-authority'\n\nimport { cn } from '../lib/utils'\nimport { toggleVariants } from './toggle'\n\nconst ToggleGroupContext = React.createContext<VariantProps<typeof toggleVariants>>({\n size: 'default',\n variant: 'default',\n})\n\nconst ToggleGroup = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Root>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Root> &\n VariantProps<typeof toggleVariants>\n>(({ className, variant, size, children, ...props }, ref) => (\n <ToggleGroupPrimitive.Root\n ref={ref}\n className={cn('flex items-center justify-center gap-1', className)}\n {...props}\n >\n <ToggleGroupContext.Provider value={{ variant, size }}>{children}</ToggleGroupContext.Provider>\n </ToggleGroupPrimitive.Root>\n))\n\nToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName\n\nconst ToggleGroupItem = React.forwardRef<\n React.ElementRef<typeof ToggleGroupPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof ToggleGroupPrimitive.Item> &\n VariantProps<typeof toggleVariants>\n>(({ className, children, variant, size, ...props }, ref) => {\n const context = React.useContext(ToggleGroupContext)\n\n return (\n <ToggleGroupPrimitive.Item\n ref={ref}\n className={cn(\n toggleVariants({\n variant: context.variant || variant,\n size: context.size || size,\n }),\n className\n )}\n {...props}\n >\n {children}\n </ToggleGroupPrimitive.Item>\n )\n})\n\nToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName\n\nexport { ToggleGroup, ToggleGroupItem }\n","/**\n * True when an interaction landed on a sonner toast. The toaster renders in its own\n * portal, outside every dialog, so Radix counts a click (or the focus move from\n * clicking a toast's close button) as an \"outside\" interaction and dismisses the open\n * dialog — e.g. clicking the \"Welcome\" toast closed the create-workspace dialog\n * underneath it.\n */\nexport function isToastInteraction(event: Event): boolean {\n const original = (event as CustomEvent<{ originalEvent?: Event }>).detail?.originalEvent\n const target = original?.target ?? event.target\n return target instanceof Element && target.closest('[data-sonner-toaster]') !== null\n}\n","import * as React from 'react'\nimport * as DialogPrimitive from '@radix-ui/react-dialog'\nimport { X } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\nimport { isToastInteraction } from '../lib/toast-interaction'\n\nconst Dialog = DialogPrimitive.Root\n\nconst DialogTrigger = DialogPrimitive.Trigger\n\nconst DialogPortal = DialogPrimitive.Portal\n\nconst DialogClose = DialogPrimitive.Close\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n ref={ref}\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className\n )}\n {...props}\n />\n))\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName\n\nconst DialogContent = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> & { hideCloseButton?: boolean }\n>(({ className, children, hideCloseButton, onInteractOutside, ...props }, ref) => (\n <DialogPortal>\n <DialogOverlay />\n <DialogPrimitive.Content\n ref={ref}\n onInteractOutside={(event) => {\n if (isToastInteraction(event)) event.preventDefault()\n onInteractOutside?.(event)\n }}\n className={cn(\n 'fixed left-[50%] top-[50%] z-50 grid w-[calc(100%-2rem)] max-w-lg max-h-[90vh] translate-x-[-50%] translate-y-[-50%] gap-4 overflow-y-auto border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 rounded-md',\n className\n )}\n {...props}\n >\n {children}\n {!hideCloseButton && (\n <DialogPrimitive.Close\n className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\"\n data-testid=\"dialog-close-button\"\n >\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close dialog</span>\n </DialogPrimitive.Close>\n )}\n </DialogPrimitive.Content>\n </DialogPortal>\n))\nDialogContent.displayName = DialogPrimitive.Content.displayName\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-1.5 text-center sm:text-left', className)} {...props} />\n)\nDialogHeader.displayName = 'DialogHeader'\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div\n className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)}\n {...props}\n />\n)\nDialogFooter.displayName = 'DialogFooter'\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title\n ref={ref}\n className={cn('text-lg font-semibold leading-none tracking-tight', className)}\n {...props}\n />\n))\nDialogTitle.displayName = DialogPrimitive.Title.displayName\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description\n ref={ref}\n className={cn('text-sm text-muted-foreground', className)}\n {...props}\n />\n))\nDialogDescription.displayName = DialogPrimitive.Description.displayName\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n}\n","import * as React from 'react'\nimport * as PopoverPrimitive from '@radix-ui/react-popover'\n\nimport { cn } from '../lib/utils'\n\nconst Popover = PopoverPrimitive.Root\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n container?: HTMLElement | null\n }\n>(({ className, align = 'center', sideOffset = 4, container, ...props }, ref) => (\n <PopoverPrimitive.Portal container={container ?? undefined}>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]',\n className\n )}\n {...props}\n />\n </PopoverPrimitive.Portal>\n))\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport { Popover, PopoverTrigger, PopoverContent, PopoverAnchor }\n","'use client'\n\nimport * as React from 'react'\nimport * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu'\nimport { Check, ChevronRight, Circle } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\n\nconst DropdownMenu = DropdownMenuPrimitive.Root\n\nconst DropdownMenuTrigger = DropdownMenuPrimitive.Trigger\n\nconst DropdownMenuGroup = DropdownMenuPrimitive.Group\n\nconst DropdownMenuPortal = DropdownMenuPrimitive.Portal\n\nconst DropdownMenuSub = DropdownMenuPrimitive.Sub\n\nconst DropdownMenuRadioGroup = DropdownMenuPrimitive.RadioGroup\n\nconst DropdownMenuSubTrigger = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean\n }\n>(({ className, inset, children, ...props }, ref) => (\n <DropdownMenuPrimitive.SubTrigger\n ref={ref}\n className={cn(\n 'flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n inset && 'pl-8',\n className\n )}\n {...props}\n >\n {children}\n <ChevronRight className=\"ml-auto\" />\n </DropdownMenuPrimitive.SubTrigger>\n))\nDropdownMenuSubTrigger.displayName = DropdownMenuPrimitive.SubTrigger.displayName\n\nconst DropdownMenuSubContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.SubContent>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.SubContent>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.SubContent\n ref={ref}\n className={cn(\n 'z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]',\n className\n )}\n {...props}\n />\n))\nDropdownMenuSubContent.displayName = DropdownMenuPrimitive.SubContent.displayName\n\nconst DropdownMenuContent = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Content>\n>(({ className, sideOffset = 4, ...props }, ref) => (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n ref={ref}\n sideOffset={sideOffset}\n className={cn(\n 'z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md',\n 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]',\n className\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n))\nDropdownMenuContent.displayName = DropdownMenuPrimitive.Content.displayName\n\nconst DropdownMenuItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0',\n inset && 'pl-8',\n className\n )}\n {...props}\n />\n))\nDropdownMenuItem.displayName = DropdownMenuPrimitive.Item.displayName\n\nconst DropdownMenuCheckboxItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.CheckboxItem>\n>(({ className, children, checked, ...props }, ref) => (\n <DropdownMenuPrimitive.CheckboxItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n checked={checked}\n {...props}\n >\n <span className=\"absolute left-2 flex h-4 w-4 items-center justify-center rounded border border-border bg-popover\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Check className=\"h-3.5 w-3.5 text-primary\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n))\nDropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive.CheckboxItem.displayName\n\nconst DropdownMenuRadioItem = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.RadioItem>\n>(({ className, children, ...props }, ref) => (\n <DropdownMenuPrimitive.RadioItem\n ref={ref}\n className={cn(\n 'relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Circle className=\"h-2 w-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n))\nDropdownMenuRadioItem.displayName = DropdownMenuPrimitive.RadioItem.displayName\n\nconst DropdownMenuLabel = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean\n }\n>(({ className, inset, ...props }, ref) => (\n <DropdownMenuPrimitive.Label\n ref={ref}\n className={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}\n {...props}\n />\n))\nDropdownMenuLabel.displayName = DropdownMenuPrimitive.Label.displayName\n\nconst DropdownMenuSeparator = React.forwardRef<\n React.ElementRef<typeof DropdownMenuPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <DropdownMenuPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nDropdownMenuSeparator.displayName = DropdownMenuPrimitive.Separator.displayName\n\nconst DropdownMenuShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return <span className={cn('ml-auto text-sm tracking-widest opacity-60', className)} {...props} />\n}\nDropdownMenuShortcut.displayName = 'DropdownMenuShortcut'\n\nexport {\n DropdownMenu,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioItem,\n DropdownMenuLabel,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuGroup,\n DropdownMenuPortal,\n DropdownMenuSub,\n DropdownMenuSubContent,\n DropdownMenuSubTrigger,\n DropdownMenuRadioGroup,\n}\n","'use client'\n\nimport * as React from 'react'\nimport * as SelectPrimitive from '@radix-ui/react-select'\nimport { Check, ChevronDown, ChevronUp } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\n\nconst Select = SelectPrimitive.Root\n\nconst SelectGroup = SelectPrimitive.Group\n\nconst SelectValue = SelectPrimitive.Value\n\nconst SelectTrigger = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Trigger>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Trigger>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Trigger\n ref={ref}\n className={cn(\n 'flex h-9 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm placeholder:text-muted-foreground/60 focus:outline-none focus-visible:border-ring/50 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1',\n className\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDown className=\"h-4 w-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n))\nSelectTrigger.displayName = SelectPrimitive.Trigger.displayName\n\nconst SelectScrollUpButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollUpButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollUpButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollUpButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronUp className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollUpButton>\n))\nSelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName\n\nconst SelectScrollDownButton = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.ScrollDownButton>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.ScrollDownButton>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.ScrollDownButton\n ref={ref}\n className={cn('flex cursor-default items-center justify-center py-1', className)}\n {...props}\n >\n <ChevronDown className=\"h-4 w-4\" />\n </SelectPrimitive.ScrollDownButton>\n))\nSelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName\n\nconst SelectContent = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Content>\n>(({ className, children, position = 'popper', ...props }, ref) => (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n ref={ref}\n className={cn(\n 'relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',\n position === 'popper' &&\n 'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1',\n className\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n 'p-1',\n position === 'popper' &&\n 'h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]'\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n))\nSelectContent.displayName = SelectPrimitive.Content.displayName\n\nconst SelectLabel = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Label>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Label>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Label\n ref={ref}\n className={cn('py-1.5 pl-8 pr-2 text-sm font-semibold', className)}\n {...props}\n />\n))\nSelectLabel.displayName = SelectPrimitive.Label.displayName\n\nconst SelectItem = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Item>\n>(({ className, children, ...props }, ref) => (\n <SelectPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50',\n className\n )}\n {...props}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <Check className=\"h-4 w-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n))\nSelectItem.displayName = SelectPrimitive.Item.displayName\n\nconst SelectSeparator = React.forwardRef<\n React.ElementRef<typeof SelectPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof SelectPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <SelectPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 my-1 h-px bg-muted', className)}\n {...props}\n />\n))\nSelectSeparator.displayName = SelectPrimitive.Separator.displayName\n\nexport {\n Select,\n SelectGroup,\n SelectValue,\n SelectTrigger,\n SelectContent,\n SelectLabel,\n SelectItem,\n SelectSeparator,\n SelectScrollUpButton,\n SelectScrollDownButton,\n}\n","'use client'\n\nimport * as React from 'react'\nimport { type DialogProps } from '@radix-ui/react-dialog'\nimport { Command as CommandPrimitive } from 'cmdk'\nimport { Search } from 'lucide-react'\n\nimport { cn } from '../lib/utils'\nimport { Dialog, DialogContent } from './dialog'\n\nconst Command = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive\n ref={ref}\n className={cn(\n 'flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground',\n className\n )}\n {...props}\n />\n))\nCommand.displayName = CommandPrimitive.displayName\n\nconst CommandDialog = ({ children, ...props }: DialogProps) => {\n return (\n <Dialog {...props}>\n <DialogContent className=\"overflow-hidden p-0\">\n <Command className=\"[&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground [&_[cmdk-group]:not([hidden])_~[cmdk-group]]:pt-0 [&_[cmdk-group]]:px-2 [&_[cmdk-input-wrapper]_svg]:h-5 [&_[cmdk-input-wrapper]_svg]:w-5 [&_[cmdk-input]]:h-12 [&_[cmdk-item]]:px-2 [&_[cmdk-item]]:py-3 [&_[cmdk-item]_svg]:h-5 [&_[cmdk-item]_svg]:w-5\">\n {children}\n </Command>\n </DialogContent>\n </Dialog>\n )\n}\n\nconst CommandInput = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Input>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>\n>(({ className, ...props }, ref) => (\n <div className=\"flex items-center border-b px-3\" data-cmdk-input-wrapper=\"\">\n <Search className=\"mr-2 h-4 w-4 shrink-0 opacity-50\" />\n <CommandPrimitive.Input\n ref={ref}\n className={cn(\n 'flex h-10 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50',\n className\n )}\n {...props}\n />\n </div>\n))\n\nCommandInput.displayName = CommandPrimitive.Input.displayName\n\nconst CommandList = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.List>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.List>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.List\n ref={ref}\n className={cn('max-h-[300px] overflow-y-auto overflow-x-hidden', className)}\n {...props}\n />\n))\n\nCommandList.displayName = CommandPrimitive.List.displayName\n\nconst CommandEmpty = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Empty>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty>\n>((props, ref) => (\n <CommandPrimitive.Empty ref={ref} className=\"py-6 text-center text-sm\" {...props} />\n))\n\nCommandEmpty.displayName = CommandPrimitive.Empty.displayName\n\nconst CommandGroup = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Group>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Group\n ref={ref}\n className={cn(\n 'overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-sm [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground',\n className\n )}\n {...props}\n />\n))\n\nCommandGroup.displayName = CommandPrimitive.Group.displayName\n\nconst CommandSeparator = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Separator>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Separator\n ref={ref}\n className={cn('-mx-1 h-px bg-border', className)}\n {...props}\n />\n))\nCommandSeparator.displayName = CommandPrimitive.Separator.displayName\n\nconst CommandItem = React.forwardRef<\n React.ElementRef<typeof CommandPrimitive.Item>,\n React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>\n>(({ className, ...props }, ref) => (\n <CommandPrimitive.Item\n ref={ref}\n className={cn(\n 'relative flex cursor-default gap-2 select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected=true]:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0',\n className\n )}\n {...props}\n />\n))\n\nCommandItem.displayName = CommandPrimitive.Item.displayName\n\nconst CommandShortcut = ({ className, ...props }: React.HTMLAttributes<HTMLSpanElement>) => {\n return (\n <span\n className={cn('ml-auto text-sm tracking-widest text-muted-foreground', className)}\n {...props}\n />\n )\n}\nCommandShortcut.displayName = 'CommandShortcut'\n\nexport {\n Command,\n CommandDialog,\n CommandInput,\n CommandList,\n CommandEmpty,\n CommandGroup,\n CommandItem,\n CommandShortcut,\n CommandSeparator,\n}\n","import type { Components } from 'react-markdown'\nimport { MarkdownRenderer } from './MarkdownRenderer'\n\n/**\n * Renders agent output in the shared house style, layered with the AI-branded and\n * redline-specific overrides on top of the kit's {@link MarkdownRenderer}: accent\n * links and `<del>`/`<ins>`/`<mark>` as tracked-changes (deletions red-strike,\n * insertions accented). Everything else — headings, lists, GFM tables, fenced\n * code blocks, blockquotes, safe links — comes from the shared renderer, so AI\n * answers, chat messages and parsed documents all look identical.\n *\n * Token-neutral: shadcn semantic tokens plus the kit's `ai-accent` contract.\n */\nconst AI_COMPONENTS: Partial<Components> = {\n a: (p) => (\n <a\n className=\"text-ai-accent underline underline-offset-2\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n {...p}\n />\n ),\n // Redline marks: deletions in red strike, <ins>/<mark> additions accented.\n del: (p) => (\n <del className=\"rounded bg-destructive/10 text-destructive decoration-destructive/60\" {...p} />\n ),\n ins: (p) => (\n <ins className=\"rounded bg-ai-accent-soft px-0.5 text-ai-accent no-underline\" {...p} />\n ),\n mark: (p) => <mark className=\"rounded bg-ai-accent-soft px-0.5 text-ai-accent\" {...p} />,\n thead: (p) => <thead className=\"bg-secondary/60\" {...p} />,\n}\n\nexport function AiMarkdown({\n children,\n className,\n isStreaming,\n}: {\n children: string\n className?: string\n isStreaming?: boolean\n}) {\n return (\n <MarkdownRenderer\n className={className ?? 'text-sm text-foreground'}\n components={AI_COMPONENTS}\n isStreaming={isStreaming}\n testId=\"ai-markdown\"\n >\n {children}\n </MarkdownRenderer>\n )\n}\n","/**\n * EntityPill Component\n *\n * Base component for pill-style entity displays. Provides consistent styling and\n * interaction patterns. Promoted verbatim from the ARBI app (import paths only\n * changed to resolve within the SDK).\n *\n * Pattern: [Icon] [Label] [Optional: secondary text] [MoreVertical when interactive]\n */\n\nimport React, { forwardRef } from 'react'\nimport { MoreVertical } from 'lucide-react'\nimport { cn } from '../lib/utils'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'\n\ninterface EntityPillProps {\n /** The icon element (Avatar, ShieldIcon, FileIcon, etc.) */\n icon: React.ReactNode\n /** Primary label text */\n label: string\n /** Optional secondary text (e.g., page notation \"p.1\") */\n secondaryText?: React.ReactNode\n\n // Styling\n /** Size variant: 'sm' for compact, 'base' for tab headers */\n size?: 'sm' | 'base'\n /** Shape variant: 'pill' for rounded-full, 'rounded' for rounded-md */\n shape?: 'pill' | 'rounded'\n /** Additional CSS classes */\n className?: string\n /** Max width for label truncation */\n labelMaxWidth?: string\n /** Extra classes on the label text (e.g. a heavier weight on a card face). */\n labelClassName?: string\n /** When true, the pill fills its container width (`flex w-full`) and the main\n * area flexes + truncates so the trailing control (⋯ menu) pins to the right\n * edge — used by the documents table's Document column. Default: shrink-to-fit. */\n fullWidth?: boolean\n /** When true, render the pill with the active/\"viewing\" highlight — a solid\n * dark-navy background with light text, applied LAST so it wins over both the\n * default background and the interactive hover. */\n highlight?: boolean\n\n // Behavior\n /** Click handler for main area (icon + label) - primary action */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for icon only — when set, only the icon is clickable (not the label) */\n onIconClick?: (e: React.MouseEvent) => void\n /** Click handler for MoreVertical - opens popover/menu. When provided, shows MoreVertical icon */\n onMoreClick?: (e: React.MouseEvent) => void\n /** Custom trailing element (e.g. a ⋯ dropdown menu). Rendered in the same\n * trailing zone as MoreVertical, but as-is — so it stays outside the pill's\n * primary click area. Takes precedence over `onMoreClick`. */\n moreContent?: React.ReactNode\n /** Link URL - makes the main area an anchor tag */\n href?: string\n /** Whether the pill is disabled */\n disabled?: boolean\n\n // Tooltip\n /** Tooltip for main area (describes primary action, e.g., \"View document\") */\n tooltipContent?: React.ReactNode\n /** Tooltip side placement */\n tooltipSide?: 'top' | 'bottom' | 'left' | 'right'\n\n /** Test ID for testing */\n 'data-testid'?: string\n}\n\nexport const EntityPill = forwardRef<HTMLElement, EntityPillProps>(function EntityPill(\n {\n icon,\n label,\n secondaryText,\n size = 'sm',\n shape = 'rounded',\n className,\n labelMaxWidth = 'max-w-[320px]',\n labelClassName,\n fullWidth = false,\n highlight = false,\n onClick,\n onIconClick,\n onMoreClick,\n moreContent,\n href,\n disabled = false,\n tooltipContent,\n tooltipSide = 'bottom',\n 'data-testid': testId,\n },\n ref\n) {\n const shapeClass = shape === 'pill' ? 'rounded-full' : 'rounded-md'\n\n // Size-based classes\n const sizeClasses = size === 'base' ? 'gap-1.5 px-1.5 py-0.5' : 'gap-1 px-1'\n const textSizeClass = size === 'base' ? 'text-base' : 'text-sm'\n\n const baseClasses = cn(\n 'group/pill items-center',\n fullWidth ? 'flex w-full' : 'inline-flex',\n sizeClasses,\n shapeClass,\n 'bg-muted',\n 'border border-border',\n 'transition-all',\n className\n )\n\n const interactiveClasses = 'cursor-pointer hover:bg-muted/80'\n const disabledClasses = 'cursor-default opacity-60'\n const highlightClasses =\n 'bg-primary text-primary-foreground hover:bg-primary hover:text-primary-foreground'\n\n // Main content (icon + label + secondary text)\n const mainContent = (\n <>\n {onIconClick ? (\n <span\n role=\"button\"\n tabIndex={0}\n className=\"flex-shrink-0 cursor-pointer hover:opacity-70 transition-opacity\"\n onClick={(e) => {\n e.stopPropagation()\n onIconClick(e)\n }}\n >\n {icon}\n </span>\n ) : (\n icon\n )}\n <span\n className={cn(\n textSizeClass,\n 'font-medium truncate leading-tight min-w-0',\n labelMaxWidth,\n labelClassName\n )}\n >\n {label}\n </span>\n {secondaryText && (\n <span className=\"text-xs text-muted-foreground flex-shrink-0 leading-none\">\n {secondaryText}\n </span>\n )}\n </>\n )\n\n // Helper: wrap any content in a Tooltip (no asChild — TooltipTrigger renders its own button)\n const tooltipWrap = (\n content: React.ReactNode,\n tip: React.ReactNode,\n side: 'top' | 'bottom' | 'left' | 'right' = tooltipSide,\n triggerClassName?: string,\n triggerProps?: Record<string, unknown>\n ) => (\n <Tooltip>\n <TooltipTrigger\n onFocusCapture={(e) => e.stopPropagation()}\n className={triggerClassName}\n {...triggerProps}\n >\n {content}\n </TooltipTrigger>\n <TooltipContent side={side} className=\"p-2\">\n {tip}\n </TooltipContent>\n </Tooltip>\n )\n\n const mainAreaClass = cn('inline-flex items-center gap-1', fullWidth && 'min-w-0 flex-1')\n\n if (onMoreClick || moreContent) {\n let mainArea: React.ReactNode\n if (tooltipContent) {\n mainArea = tooltipWrap(\n mainContent,\n tooltipContent,\n tooltipSide,\n cn(mainAreaClass, disabled && 'opacity-60'),\n {\n type: 'button',\n onClick: href ? onClick : disabled ? undefined : onClick,\n disabled: disabled || undefined,\n }\n )\n } else if (href) {\n mainArea = (\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mainAreaClass}\n onClick={onClick}\n >\n {mainContent}\n </a>\n )\n } else if (onClick) {\n mainArea = (\n <button\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={cn('inline-flex items-center gap-1', disabled && 'opacity-60')}\n >\n {mainContent}\n </button>\n )\n } else {\n mainArea = <span className={mainAreaClass}>{mainContent}</span>\n }\n\n const moreArea = moreContent ? (\n <span className=\"flex-shrink-0 leading-none\">{moreContent}</span>\n ) : (\n tooltipWrap(\n <MoreVertical className=\"w-3.5 h-3.5\" />,\n 'Click for more',\n tooltipSide,\n 'flex-shrink-0 leading-none text-muted-foreground hover:text-foreground',\n {\n type: 'button',\n onClick: (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation()\n onMoreClick?.(e)\n },\n }\n )\n )\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(\n baseClasses,\n (onClick || href) && !disabled && interactiveClasses,\n highlight && highlightClasses\n )}\n data-testid={testId}\n >\n {mainArea}\n {moreArea}\n </span>\n )\n }\n\n if (tooltipContent) {\n if (href) {\n return tooltipWrap(\n <a\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={mainAreaClass}\n onClick={onClick}\n >\n {mainContent}\n </a>,\n tooltipContent,\n tooltipSide,\n cn(baseClasses, interactiveClasses),\n { 'data-testid': testId }\n )\n }\n\n return tooltipWrap(\n mainContent,\n tooltipContent,\n tooltipSide,\n cn(\n baseClasses,\n onClick && !disabled ? interactiveClasses : '',\n disabled ? disabledClasses : '',\n highlight && highlightClasses\n ),\n {\n type: 'button',\n ref: ref as React.Ref<HTMLButtonElement>,\n onClick: onClick && !disabled ? onClick : undefined,\n disabled: disabled || undefined,\n 'data-testid': testId,\n }\n )\n }\n\n if (href) {\n return (\n <a\n ref={ref as React.Ref<HTMLAnchorElement>}\n href={href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={cn(baseClasses, interactiveClasses)}\n data-testid={testId}\n onClick={onClick}\n >\n {mainContent}\n </a>\n )\n }\n\n if (onClick) {\n return (\n <button\n ref={ref as React.Ref<HTMLButtonElement>}\n type=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={cn(\n baseClasses,\n disabled ? disabledClasses : interactiveClasses,\n highlight && highlightClasses\n )}\n data-testid={testId}\n >\n {mainContent}\n </button>\n )\n }\n\n return (\n <span\n ref={ref as React.Ref<HTMLSpanElement>}\n className={cn(baseClasses, highlight && highlightClasses)}\n data-testid={testId}\n >\n {mainContent}\n </span>\n )\n})\n","/**\n * Tag-type presentation primitives — the brand-neutral icon and label maps that\n * back the shared `TagEntity` pill. Kept in their own module (not the component\n * file) so app-side wrappers can import them to build their own store-coupled\n * tooltip content without pulling in a component, and so the component file stays\n * fast-refresh friendly.\n */\n\nimport {\n SquareCheckBig,\n StickyNote,\n NotebookPen,\n List,\n Hash,\n Search,\n Folder,\n Calendar,\n Bot,\n} from 'lucide-react'\n\n/** Human-readable tag type names. */\nexport const TAG_TYPE_LABELS: Record<string, string> = {\n checkbox: 'Checkbox',\n select: 'Select',\n number: 'Number',\n text: 'Text',\n folder: 'Folder',\n search: 'Saved Search',\n date: 'Date',\n assistant: 'AI Assistant',\n}\n\n/** Icon mapping for tag types. */\nexport const TAG_TYPE_ICONS: Record<string, typeof StickyNote> = {\n checkbox: SquareCheckBig,\n select: List,\n number: Hash,\n text: NotebookPen,\n folder: Folder,\n search: Search,\n date: Calendar,\n assistant: Bot,\n}\n\n/** Resolve the icon component for a tag type, with the `text` (NotebookPen) fallback.\n * Annotations share the NotebookPen mark used by the AI Annotate bulk action, so\n * the table column and the batch bar name the same thing the same way. */\nexport function getTagTypeIcon(type?: string | null): typeof StickyNote {\n return TAG_TYPE_ICONS[type ?? 'text'] || NotebookPen\n}\n\n/** Resolve the human-readable label for a tag type, falling back to the raw type. */\nexport function getTagTypeLabel(type?: string | null): string {\n const t = type ?? 'text'\n return TAG_TYPE_LABELS[t] || t\n}\n","/**\n * TagEntity Component\n *\n * Single source of truth for tag visual appearance, promoted from the ARBI app\n * and DECOUPLED from the app store/API. It renders purely from the `tag` prop —\n * the app-only bits (creator/updater lookup, visibility toggle, live doctag\n * count from the query cache) are dropped; pass `doctagCount`/`shared` if you\n * want them shown in the built-in tooltip, or inject a fully custom `tooltipContent`.\n */\n\nimport React from 'react'\nimport { EntityPill } from './EntityPill'\nimport { Badge } from '../ui/badge'\nimport { getTagTypeIcon, getTagTypeLabel } from './tag-types'\n\n/** Base color map — source of truth for entity colors, keyed by the 5th char of\n * an entity id (matches the app's BASE_COLORS). */\nconst BASE_COLORS: Record<string, string> = {\n '0': '#10b981',\n '1': '#3b82f6',\n '2': '#8b5cf6',\n '3': '#f43f5e',\n '4': '#f59e0b',\n '5': '#84cc16',\n '6': '#a855f7',\n '7': '#06b6d4',\n '8': '#f97316',\n '9': '#14b8a6',\n a: '#ef4444',\n b: '#6366f1',\n c: '#ec4899',\n d: '#22c55e',\n e: '#eab308',\n f: '#0ea5e9',\n}\n\n/** Solid entity color derived from an entity id (matches the app's\n * `getEntityColor(id, 'medium')`). */\nfunction getEntityColor(entityId: string): string {\n return BASE_COLORS[entityId[4]] || BASE_COLORS['0']\n}\n\n/** Minimal, decoupled tag shape the pill needs. */\nexport interface TagLike {\n external_id: string\n name: string\n /** Tag type discriminator — drives the icon and the tooltip's \"Type\" line. */\n tag_type?: { type: string } | null\n /** Optional explicit color; when omitted it's derived from `external_id`. */\n color?: string\n /** Optional document count shown in the tooltip. */\n doctag_count?: number | null\n /** Optional shared/private flag shown in the tooltip. */\n shared?: boolean | null\n}\n\nexport interface TagEntityProps {\n tag: TagLike\n size?: 'sm' | 'md' | 'lg'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Whether to show a tooltip (default: true) */\n showTooltip?: boolean\n /** Injected tooltip override. When provided (and `showTooltip` is not false) it\n * replaces the built-in tooltip — used by the monolith to render its rich,\n * store-coupled tooltip (fresh count, creator/updater, visibility toggle). */\n tooltipContent?: React.ReactNode\n}\n\nexport function TagEntity({\n tag,\n size = 'md',\n className = '',\n onClick,\n showTooltip = true,\n tooltipContent,\n}: TagEntityProps) {\n const tagType = tag.tag_type?.type ?? 'text'\n const iconSize = size === 'sm' ? 12 : size === 'md' ? 14 : 16\n const Icon = getTagTypeIcon(tagType)\n\n const sizeClasses = {\n sm: 'p-0.5',\n md: 'p-1',\n lg: 'p-1.5',\n }\n\n const tagColor = tag.color ?? getEntityColor(tag.external_id)\n\n const iconElement = (\n <span\n className={`inline-flex items-center justify-center rounded-md text-white flex-shrink-0 ${sizeClasses[size]}`}\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={iconSize} className=\"flex-shrink-0\" />\n </span>\n )\n\n const pillSize = size === 'lg' ? 'base' : 'sm'\n\n const defaultTooltip = (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex items-center gap-2\">\n <span\n className=\"inline-flex items-center justify-center rounded-md text-white p-1\"\n style={{ backgroundColor: tagColor }}\n >\n <Icon size={16} />\n </span>\n <span className=\"font-medium text-sm\">{tag.name}</span>\n </div>\n\n <div className=\"flex flex-col gap-1.5 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Type:</span>\n <span>{getTagTypeLabel(tagType)}</span>\n </div>\n\n {tag.doctag_count != null && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">Documents:</span>\n <Badge variant=\"secondary\" className=\"h-5 min-w-[20px] justify-center\">\n {tag.doctag_count ?? 0}\n </Badge>\n </div>\n )}\n\n {tag.shared != null && (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{tag.shared ? 'Shared' : 'Private'}</span>\n </div>\n )}\n </div>\n </div>\n )\n\n const resolvedTooltip = showTooltip ? (tooltipContent ?? defaultTooltip) : undefined\n\n return (\n <EntityPill\n icon={iconElement}\n label={tag.name}\n size={pillSize}\n shape=\"rounded\"\n labelMaxWidth=\"max-w-[180px]\"\n tooltipContent={resolvedTooltip}\n onClick={onClick}\n className={className}\n data-testid={`tag-entity-${tag.external_id}`}\n />\n )\n}\n","/**\n * File-type icon colors — the subset of the app's FILE_TYPE_COLORS used by the\n * promoted file-type icons. Kept self-contained so the SDK icons render with the\n * same palette as the ARBI app without depending on the app's style constants.\n */\n\nconst NEUTRAL_GRAY = '#64748b' // slate-500\n\nexport const FILE_TYPE_COLORS = {\n pdf: '#ef4444', // red\n doc: '#3b82f6', // blue (Word docs)\n docx: '#3b82f6', // blue\n html: '#0284c7', // sky-600 (web files)\n img: '#8b5cf6', // violet-500 (images)\n vid: '#10b981', // emerald-500 (video)\n aud: '#f59e0b', // amber-500 (audio)\n xls: '#16a34a', // green-600 (Excel)\n eml: '#0d9488', // teal-600 (email)\n txt: NEUTRAL_GRAY, // gray (plain text)\n generic: NEUTRAL_GRAY, // gray (unknown)\n white: '#ffffff', // for strokes/text on colored backgrounds\n}\n","/** PDF file icon (red). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const PdfIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.pdf}\n stroke={FILE_TYPE_COLORS.pdf}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n PDF\n </text>\n </svg>\n )\n}\n","/** Audio file icon (amber). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const AudIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.aud}\n stroke={FILE_TYPE_COLORS.aud}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n AUD\n </text>\n </svg>\n )\n}\n","/** Image file icon (violet). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const ImgIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.img}\n stroke={FILE_TYPE_COLORS.img}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n IMG\n </text>\n </svg>\n )\n}\n","/** Video file icon (emerald). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const VidIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.vid}\n stroke={FILE_TYPE_COLORS.vid}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <text\n x=\"12\"\n y=\"16\"\n fontSize=\"6\"\n fill=\"white\"\n textAnchor=\"middle\"\n fontWeight=\"bold\"\n fontFamily=\"Arial, sans-serif\"\n >\n VID\n </text>\n </svg>\n )\n}\n","/** Email file icon (teal). Promoted from the ARBI app for SDK reuse. */\n\nimport React from 'react'\nimport { FILE_TYPE_COLORS } from './colors'\n\ninterface IconProps {\n size?: number\n className?: string\n}\n\nexport const EmlIcon: React.FC<IconProps> = ({ size = 16, className = '' }) => {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n className={className}\n >\n <path\n d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8l-6-6z\"\n fill={FILE_TYPE_COLORS.eml}\n stroke={FILE_TYPE_COLORS.eml}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <path\n d=\"M14 2v6h6\"\n fill=\"none\"\n stroke={FILE_TYPE_COLORS.white}\n strokeWidth=\"1\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n <rect\n x=\"7\"\n y=\"12\"\n width=\"10\"\n height=\"7\"\n rx=\"1\"\n fill=\"none\"\n stroke=\"white\"\n strokeWidth=\"1.2\"\n />\n <path d=\"M7 13l5 3 5-3\" fill=\"none\" stroke=\"white\" strokeWidth=\"1.2\" strokeLinejoin=\"round\" />\n </svg>\n )\n}\n","import React, { useId } from 'react'\n\ninterface ArbiBotHeadIconProps {\n size?: number\n className?: string\n}\n\nexport const ArbiBotHeadIcon: React.FC<ArbiBotHeadIconProps> = ({ size = 24, className = '' }) => {\n const maskId = useId()\n\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"30 -5 190 190\"\n preserveAspectRatio=\"xMidYMid meet\"\n className={className}\n >\n <defs>\n <mask id={maskId}>\n <g transform=\"translate(0,250) scale(0.1,-0.1)\">\n <rect x=\"0\" y=\"0\" width=\"2500\" height=\"2500\" fill=\"white\" />\n <circle cx=\"855\" cy=\"1715\" r=\"190\" fill=\"black\" />\n <circle cx=\"855\" cy=\"1715\" r=\"50\" fill=\"white\" />\n <circle cx=\"1665\" cy=\"1700\" r=\"190\" fill=\"black\" />\n <circle cx=\"1665\" cy=\"1700\" r=\"50\" fill=\"white\" />\n </g>\n </mask>\n </defs>\n <g mask={`url(#${maskId})`}>\n <g\n transform=\"translate(0,250) scale(0.1,-0.1)\"\n fill=\"currentColor\"\n stroke=\"currentColor\"\n strokeWidth=\"100\"\n >\n <path d=\"M1038 2434 c-217 -39 -406 -154 -522 -318 -121 -170 -176 -376 -103 -384 l27 -3 0 -106 c0 -88 -3 -108 -17 -118 -15 -11 -16 -18 -5 -66 44 -188 209 -369 420 -459 l65 -28 -74 -7 c-283 -26 -444 -152 -535 -418 -70 -204 -73 -507 -5 -507 4 0 12 75 19 168 18 263 68 419 167 530 78 87 224 162 263 134 9 -6 43 -26 76 -43 224 -117 802 -95 948 38 38 34 165 -22 253 -111 117 -119 168 -268 187 -549 6 -92 15 -167 19 -167 89 0 53 415 -54 627 -88 173 -238 270 -458 295 l-99 11 75 32 c201 88 367 274 406 454 10 47 9 56 -5 66 -13 10 -16 32 -16 118 l0 106 28 3 c91 10 -12 297 -165 459 -202 214 -544 307 -895 243z m472 -84 c170 -43 323 -140 416 -264 47 -61 117 -197 128 -248 l6 -28 -65 0 c-64 0 -65 1 -78 33 -43 102 -109 136 -262 137 l-110 0 -38 -40 c-25 -27 -46 -40 -65 -41 -134 -5 -394 1 -410 10 -11 6 -30 24 -42 41 l-21 30 -112 0 c-156 -1 -219 -33 -262 -136 -14 -34 -14 -34 -80 -34 -76 0 -74 -7 -30 103 96 243 311 406 595 452 118 20 319 13 430 -15z m-561 -505 c97 -50 126 -174 61 -263 -118 -163 -380 -23 -309 165 35 93 162 143 248 98z m799 -15 c129 -96 69 -304 -92 -318 -189 -16 -265 218 -106 326 48 33 149 29 198 -8z m272 -389 c0 -23 -45 -110 -86 -168 -245 -343 -856 -408 -1231 -130 -90 67 -213 236 -213 294 0 11 132 13 765 13 457 0 765 -4 765 -9z\" />\n </g>\n <g transform=\"translate(0,250) scale(0.1,-0.1)\" fill=\"currentColor\" stroke=\"none\">\n <path d=\"M785 1777 c-60 -60 -59 -134 1 -186 92 -82 236 9 204 128 -25 93 -138 125 -205 58z m161 -29 c7 -22 -19 -52 -40 -45 -21 7 -30 35 -17 51 19 23 48 20 57 -6z\" />\n <path d=\"M1591 1803 c-128 -67 -85 -243 60 -243 83 0 141 99 105 178 -32 69 -103 97 -165 65z m127 -59 c4 -25 -19 -47 -41 -38 -22 8 -30 34 -16 51 17 20 53 12 57 -13z\" />\n <path d=\"M843 1347 c-9 -15 9 -63 41 -108 148 -202 565 -209 730 -12 37 44 60 103 47 116 -13 13 -810 17 -818 4z\" />\n </g>\n </g>\n </svg>\n )\n}\n","/**\n * DocumentEntity Component\n *\n * Displays a document as a compact entity pill with file-type icon and name.\n * Promoted from the ARBI app and DECOUPLED from the app store/API: it renders\n * purely from the `doc` prop and optional `onClick`/`onIconClick` callbacks.\n */\n\nimport React from 'react'\nimport { Eye, FolderOpen } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { AudIcon } from '../icons/AudIcon'\nimport { EmlIcon } from '../icons/EmlIcon'\nimport { ImgIcon } from '../icons/ImgIcon'\nimport { PdfIcon } from '../icons/PdfIcon'\nimport { VidIcon } from '../icons/VidIcon'\nimport { cn } from '../lib/utils'\n\n/** Minimal, decoupled document shape the pill needs. Structurally compatible\n * with the SDK's `DocResponse` (from `useDocuments`), but no dependency on it —\n * a consumer can pass any object with these fields. */\nexport interface DocumentLike {\n file_name?: string | null\n folder?: string | null\n doc_metadata?: { title?: string | null } | null\n}\n\n/** Title of a document: `doc_metadata.title`, falling back to `file_name`. */\nfunction getDocumentTitle(document: DocumentLike | null | undefined, defaultValue = ''): string {\n if (!document) return defaultValue\n return document.doc_metadata?.title || document.file_name || defaultValue\n}\n\n/** Hard cap on the pill's visible label. The full name still shows in the hover\n * tooltip; the pill stays compact so the trailing ⋮ menu never gets pushed. */\nconst MAX_LABEL_CHARS = 30\n\nfunction clampLabel(text: string): string {\n return text.length > MAX_LABEL_CHARS ? `${text.slice(0, MAX_LABEL_CHARS).trimEnd()}…` : text\n}\n\nconst IMAGE_EXTENSIONS = new Set(['jpg', 'jpeg', 'png', 'gif', 'bmp', 'tiff', 'tif', 'webp'])\nconst VIDEO_EXTENSIONS = new Set(['mp4', 'mpeg', 'mpg', 'webm', 'mov', 'avi', 'mkv'])\nconst AUDIO_EXTENSIONS = new Set(['mp3', 'wav', 'm4a', 'aac', 'ogg', 'flac'])\nconst EMAIL_EXTENSIONS = new Set(['eml', 'msg'])\n\n/**\n * The file-type glyph for a document, by extension.\n *\n * Exported because a document is recognisable by its icon before its name — any\n * surface that lists documents (the entity pill here, the workspace home's\n * Documents card) has to draw the same PDF/image/audio/video/email glyph, or\n * the same file looks like two different things in two places.\n */\nexport function getDocIcon(fileName?: string | null, iconSize = 14): React.ReactNode {\n const ext = fileName?.split('.').pop()?.toLowerCase()\n if (ext && VIDEO_EXTENSIONS.has(ext)) return <VidIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && AUDIO_EXTENSIONS.has(ext)) return <AudIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && IMAGE_EXTENSIONS.has(ext)) return <ImgIcon size={iconSize} className=\"flex-shrink-0\" />\n if (ext && EMAIL_EXTENSIONS.has(ext)) return <EmlIcon size={iconSize} className=\"flex-shrink-0\" />\n return <PdfIcon size={iconSize} className=\"flex-shrink-0\" />\n}\n\nexport interface DocumentEntityProps {\n doc: DocumentLike\n /** Override the default file-type icon */\n icon?: React.ReactNode\n /** Size variant — 'sm' (default) for inline/compact contexts, 'base' for a\n * larger pill (e.g. the documents grid's primary name column). */\n size?: 'sm' | 'base'\n /** Override default label max width */\n labelMaxWidth?: string\n /** Extra classes on the label text (e.g. a heavier weight on a card face). */\n labelClassName?: string\n /** Click handler for the whole pill */\n onClick?: (e: React.MouseEvent) => void\n /** Click handler for the icon only */\n onIconClick?: (e: React.MouseEvent) => void\n /** When true, the file-type icon is replaced by a pinned Eye — marks the\n * document that is currently open/being viewed. */\n viewing?: boolean\n /** Small overlay pinned to the icon's corner (e.g. an \"available offline\" pip). */\n iconBadge?: React.ReactNode\n /** Trailing control rendered outside the click area (e.g. a ⋯ actions menu). */\n actions?: React.ReactNode\n /** When true, the pill fills the available width and the name truncates via\n * CSS so the trailing ⋯ menu pins to the right edge. */\n fullWidth?: boolean\n /** Render the WHOLE title (skip the 30-char `clampLabel` string cut) while\n * keeping the normal content-width layout — for callers that want the full\n * name to show/wrap (via a `labelClassName`) without `fullWidth`'s w-full.\n * `fullWidth` already implies this. */\n noClamp?: boolean\n /** Override the default folder/title hover tooltip. */\n tooltipContent?: React.ReactNode\n className?: string\n}\n\nexport function DocumentEntity({\n doc,\n icon,\n size = 'sm',\n labelMaxWidth,\n labelClassName,\n onClick,\n onIconClick,\n viewing,\n iconBadge,\n actions,\n tooltipContent,\n className,\n fullWidth,\n noClamp,\n}: DocumentEntityProps) {\n const title = getDocumentTitle(doc)\n const ext = doc.file_name?.split('.').pop()?.toLowerCase()\n const iconSize = size === 'base' ? 16 : 14\n const eyeSizeClass = size === 'base' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n\n const baseIcon = icon ?? getDocIcon(doc.file_name, iconSize)\n const displayIcon =\n viewing || iconBadge ? (\n <span className=\"relative inline-flex flex-shrink-0 items-center justify-center\">\n {viewing ? <Eye className={cn('text-primary-foreground', eyeSizeClass)} /> : baseIcon}\n {iconBadge}\n </span>\n ) : (\n baseIcon\n )\n\n const defaultTooltip = (\n <div className=\"flex flex-col gap-1 text-xs max-w-[440px]\">\n {doc.folder && (\n // `flex-wrap` so a deep folder path wraps WITHIN the balloon instead of\n // spilling out of it (each path segment is atomic and wraps as a unit;\n // `min-w-0` + `break-all` lets a single over-long segment break too).\n <span className=\"flex flex-wrap items-center gap-0.5 text-muted-foreground\">\n <FolderOpen className=\"h-3 w-3 text-yellow-600 shrink-0\" />\n {doc.folder.split('/').map((part, i, arr) => (\n <span key={i} className=\"flex min-w-0 items-center gap-0.5\">\n {i > 0 && <span className=\"text-muted-foreground/50 mx-0.5\">/</span>}\n <span className={`break-all ${i < arr.length - 1 ? 'text-muted-foreground/70' : ''}`}>\n {part}\n </span>\n </span>\n ))}\n </span>\n )}\n <span className=\"font-medium break-words\">\n {title}\n {ext ? `.${ext}` : ''}\n </span>\n </div>\n )\n\n return (\n <EntityPill\n icon={displayIcon}\n size={size}\n label={fullWidth || noClamp ? title : clampLabel(title)}\n labelMaxWidth={labelMaxWidth ?? 'max-w-[140px]'}\n labelClassName={labelClassName}\n fullWidth={fullWidth}\n onClick={onClick}\n onIconClick={onIconClick}\n moreContent={actions}\n className={className}\n highlight={viewing}\n tooltipContent={tooltipContent ?? defaultTooltip}\n />\n )\n}\n","/**\n * ProjectEntity Component\n *\n * Fully-rounded pill for a \"project\" (a.k.a. a \"matter\" in some consumer apps).\n * The viewer's relationship to the project drives a TINTED (soft-fill) colour\n * so the kinds read at a glance without shouting:\n * - your paid project → primary tint\n * - someone else's → secondary tint\n * - your free project → grey tint\n * \"Common\" keeps the neutral muted pill.\n *\n * Promoted from the ARBI app and DECOUPLED: no store/stripe deps. The icon\n * defaults to the `CreditCard` glyph and can be overridden via `icon`, and\n * the display text via `label` (falls back to `name`) so consumers can relabel\n * a \"project\" as a \"matter\", \"case\", etc.\n */\n\nimport React from 'react'\nimport { CreditCard } from 'lucide-react'\nimport { EntityPill } from './EntityPill'\nimport { cn } from '../lib/utils'\n\nexport type ProjectRelation = 'mine' | 'other' | 'common'\n\nexport interface ProjectEntityProps {\n name: string\n /** Display text override (defaults to `name`) — lets a consumer relabel. */\n label?: string\n /** Icon override (defaults to the CreditCard glyph). */\n icon?: React.ReactNode\n subscription?: string\n hasCollaborators?: boolean\n size?: 'sm' | 'base'\n className?: string\n onClick?: (e: React.MouseEvent) => void\n /** Viewer's relationship to the project — drives the inverted pill colour. */\n relation?: ProjectRelation\n /** Whether the given `subscription` should be treated as paid. When omitted,\n * it's inferred from the `subscription` value ('active' | 'past_due' | 'dev'). */\n isPaid?: boolean\n /** Hover tooltip. */\n tooltipContent?: React.ReactNode\n}\n\ntype PillVariant = 'mine-paid' | 'mine-free' | 'other' | 'common'\n\n// Soft tint fill + a light, neutral grey border (not a coloured one) so the\n// pill reads as a quiet chip rather than a heavy solid badge.\nconst VARIANT_STYLES: Record<PillVariant, { pill: string; icon: string }> = {\n 'mine-paid': {\n pill: 'bg-primary/10 text-primary border-border/60',\n icon: 'text-primary',\n },\n other: {\n pill: 'bg-secondary/10 text-secondary border-border/60',\n icon: 'text-secondary',\n },\n 'mine-free': {\n pill: 'bg-muted-foreground/10 text-muted-foreground border-border/60',\n icon: 'text-muted-foreground',\n },\n common: {\n pill: '',\n icon: 'text-muted-foreground',\n },\n}\n\nfunction resolveVariant(\n relation: ProjectRelation | undefined,\n paid: boolean,\n hasCollaborators: boolean\n): PillVariant {\n if (relation === 'common') return 'common'\n if (relation === 'other') return 'other'\n if (relation === 'mine') return paid ? 'mine-paid' : 'mine-free'\n // Legacy, subscription-driven callers (no relation given).\n if (paid) return hasCollaborators ? 'other' : 'mine-paid'\n return 'mine-free'\n}\n\nexport function ProjectEntity({\n name,\n label,\n icon,\n subscription = 'none',\n hasCollaborators = false,\n size = 'sm',\n className,\n onClick,\n relation,\n isPaid,\n tooltipContent,\n}: ProjectEntityProps) {\n const paid =\n isPaid ?? (subscription === 'active' || subscription === 'past_due' || subscription === 'dev')\n const variant = resolveVariant(relation, paid, hasCollaborators)\n const { pill, icon: iconClass } = VARIANT_STYLES[variant]\n\n const iconSizeClass = size === 'base' ? 'h-4 w-4' : 'h-3.5 w-3.5'\n const iconNode = icon ?? <CreditCard className={cn(iconSizeClass, iconClass)} />\n\n return (\n <EntityPill\n icon={iconNode}\n label={label ?? name}\n size={size}\n shape=\"rounded\"\n className={cn(pill, className)}\n onClick={onClick}\n tooltipContent={tooltipContent}\n />\n )\n}\n","/**\n * UserEntity Component\n *\n * Single source of truth for the user pill/avatar visual, promoted from the ARBI\n * app and DECOUPLED from the app store/API. It renders purely from injected,\n * already-resolved props — the app-coupled bits (current user, WebSocket presence\n * status, shared-workspace / agent-owner lookups) are resolved by the app adapter\n * and passed in as `isMe` / `displayStatus` / `tooltipContent` / `onClick`.\n *\n * Variants:\n * - pill: Avatar + name in a rounded container (default)\n * - icon: Avatar circle with hover tooltip\n *\n * Status-dot colours use the semantic `--color-status-*` token contract (see the\n * consuming app's @theme); they are seeded to the app's prior palette so the dots\n * stay pixel-identical.\n */\n\nimport React, { memo } from 'react'\nimport { MessageCircleMore } from 'lucide-react'\nimport { Avatar, AvatarFallback, AvatarImage } from '../ui/avatar'\nimport { ArbiBotHeadIcon } from '../icons/ArbiBotHeadIcon'\nimport { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'\nimport { cn } from '../lib/utils'\n\n/** Presence display status - WebSocket states plus 'hidden' for when status is intentionally not shown */\nexport type PresenceDisplayStatus = 'connected' | 'connecting' | 'disconnected' | 'error' | 'hidden'\n\nexport interface UserEntityProps {\n size?: 'xs' | 'sm' | 'md' | 'lg'\n variant?: 'icon' | 'pill'\n className?: string\n /** When true (default), shows tooltip on hover */\n showTooltip?: boolean\n /** When true (default), clicking triggers the injected action. Set false to disable interaction. */\n interactive?: boolean\n /** When true, shows a blue unread indicator on the chat icon */\n hasUnreadMessages?: boolean\n\n /** Two-letter initials shown in the avatar fallback (resolved by the app). */\n initials?: string\n /** Display label — \"You\" for the current user, else the real name. */\n displayName?: string\n /** Avatar image URL, if any. */\n picture?: string | null\n /** Avatar background colour class for non-agents (e.g. 'bg-blue-500'). */\n colorClass?: string\n /** Whether this user is an agent — drives the dashed ring + bot badge. */\n isAgent?: boolean\n /** Inline border/text colour for agent avatars (from the app's agentAvatarColors). */\n agentStyle?: React.CSSProperties\n /**\n * Inline avatar colours for ANY user, not only agents — e.g. the deterministic\n * tint the DM rows derive from the user id. Takes precedence over\n * `agentStyle`, which predates it and is the same mechanism under a narrower\n * name.\n */\n avatarStyle?: React.CSSProperties\n /** Whether this pill represents the current user — hides the chat icon and drives\n * which action `onClick` performs. */\n isMe?: boolean\n /** Resolved presence dot state; undefined hides the dot. */\n displayStatus?: PresenceDisplayStatus\n /** Resolved click handler (open settings for me, DM for others). */\n onClick?: (e: React.MouseEvent) => void\n /** Injected rich tooltip content (built by the app adapter). */\n tooltipContent?: React.ReactNode\n /** Render the empty \"no user\" avatar. */\n empty?: boolean\n}\n\nconst sizeClasses = {\n xs: 'h-5 w-5',\n sm: 'h-6 w-6',\n md: 'h-8 w-8',\n lg: 'h-10 w-10',\n}\n\nconst textSizeClasses = {\n xs: 'text-xs',\n sm: 'text-xs',\n md: 'text-xs',\n lg: 'text-sm',\n}\n\n// Presence dot sizes proportional to avatar size (larger for better visibility)\nconst presenceDotClasses = {\n xs: 'w-2 h-2 border',\n sm: 'w-2.5 h-2.5 border',\n md: 'w-3 h-3 border-2',\n lg: 'w-3.5 h-3.5 border-2',\n}\n\n// Position the presence dot at edge of avatar\nconst presencePositionClasses = {\n xs: '-right-1 bottom-0',\n sm: '-right-1 bottom-0',\n md: '-right-1.5 -bottom-0.5',\n lg: '-right-1.5 -bottom-0.5',\n}\n\n// Presence colours — semantic status tokens seeded to the app's prior palette\n// (matches the sidebar's connection-status colours).\n/** Accessible name for each dot state — the same wording PresenceLabel prints. */\nconst PRESENCE_LABELS: Record<PresenceDisplayStatus, string> = {\n connected: 'Online',\n connecting: 'Connecting',\n disconnected: 'Offline',\n error: 'Connection problem',\n hidden: 'Status hidden',\n}\n\nconst presenceColorClasses: Record<PresenceDisplayStatus, string> = {\n connected: 'bg-status-online',\n connecting: 'bg-status-connecting',\n disconnected: 'bg-status-away',\n error: 'bg-status-busy',\n hidden: 'bg-status-offline',\n}\n\nexport const UserEntity = memo(function UserEntity({\n size = 'md',\n variant = 'pill',\n className,\n showTooltip = true,\n interactive = true,\n hasUnreadMessages = false,\n initials = '',\n displayName = '',\n picture,\n colorClass = '',\n isAgent = false,\n agentStyle,\n avatarStyle,\n isMe = false,\n displayStatus,\n onClick,\n tooltipContent,\n empty = false,\n}: UserEntityProps) {\n // Empty state - no user\n if (empty) {\n return (\n <Avatar\n className={cn(sizeClasses[size], 'border border-border', className)}\n data-testid=\"user-entity\"\n >\n <AvatarFallback className=\"bg-status-empty text-muted-foreground text-xs font-semibold\">\n ?\n </AvatarFallback>\n </Avatar>\n )\n }\n\n const agentBadge = isAgent ? (\n <ArbiBotHeadIcon className=\"w-3.5 h-3.5 text-muted-foreground\" />\n ) : undefined\n\n // Messaging another user: the pill avatar doubles as the affordance — on hover it\n // swaps to a chat icon (see pillAvatar below). `showUnread` recolours the single\n // bottom-right status dot instead of adding a second indicator.\n const canMessage = interactive && !isMe && !isAgent\n const showUnread = hasUnreadMessages && !isMe && !isAgent\n\n // One resolved inline style for the avatar surface. `agentStyle` was always\n // applied regardless of `isAgent`; `avatarStyle` is the same thing named for\n // what it does, so a non-agent tint no longer has to masquerade as one.\n const surfaceStyle = avatarStyle ?? agentStyle\n\n // Core avatar element - used in both icon and pill variants\n const avatarCore = (\n <Avatar\n className={cn(\n sizeClasses[size],\n isAgent ? 'rounded-full border-2 border-dashed' : 'border border-white'\n )}\n style={surfaceStyle}\n data-testid=\"user-entity\"\n >\n {picture && <AvatarImage src={picture} alt={initials} />}\n <AvatarFallback\n className={cn(\n textSizeClasses[size],\n 'font-semibold leading-none',\n isAgent ? 'rounded-full bg-transparent' : `text-white ${colorClass}`\n )}\n style={surfaceStyle}\n >\n {initials}\n </AvatarFallback>\n </Avatar>\n )\n\n // Bottom-right avatar dot — ONE dot, ONE location: blue (#00adef) when there's an\n // unread message from this user, otherwise the presence colour (green/grey/…).\n const statusDot =\n showUnread || displayStatus ? (\n <span\n className={cn(\n 'absolute rounded-full border-white',\n presenceDotClasses[size],\n presencePositionClasses[size],\n !showUnread && displayStatus ? presenceColorClasses[displayStatus] : ''\n )}\n style={showUnread ? { backgroundColor: '#00adef' } : undefined}\n data-testid=\"user-entity-presence\"\n // Named, not just coloured: a colour is legible only to someone who\n // already knows the convention, and to nobody using a screen reader.\n role=\"img\"\n aria-label={showUnread ? 'Unread messages' : PRESENCE_LABELS[displayStatus!]}\n title={showUnread ? 'Unread messages' : PRESENCE_LABELS[displayStatus!]}\n />\n ) : null\n\n // Icon variant avatar (used in stacks/columns) — avatar + optional status dot.\n // Inline-block at avatar size so a parent ring stays circular.\n const avatarElement = statusDot ? (\n <div\n className={cn(\n 'relative inline-block',\n sizeClasses[size],\n variant === 'pill' ? '' : className\n )}\n >\n {avatarCore}\n {statusDot}\n </div>\n ) : (\n <div className={cn('inline-block', variant === 'pill' ? '' : className)}>{avatarCore}</div>\n )\n\n // Pill variant avatar — the avatar itself IS the message affordance: on hover it\n // swaps to a chat icon (for other users), with the status dot pinned bottom-right.\n const pillAvatar = (\n // shrink-0: when the pill is squeezed the NAME truncates away — the avatar\n // must never collapse under it and overflow onto neighbouring text.\n <span className={cn('relative inline-block shrink-0', sizeClasses[size])}>\n <span className={cn('block transition-opacity', canMessage && 'group-hover/pill:opacity-0')}>\n {avatarCore}\n </span>\n {canMessage && (\n <span\n aria-hidden\n className=\"absolute inset-0 flex items-center justify-center rounded-full bg-muted text-foreground opacity-0 transition-opacity group-hover/pill:opacity-100\"\n >\n <MessageCircleMore className={size === 'xs' ? 'h-3 w-3' : 'h-4 w-4'} />\n </span>\n )}\n {statusDot}\n </span>\n )\n\n const resolvedTooltip = showTooltip ? tooltipContent : undefined\n\n // Pill variant — clean, borderless avatar + name (no container chrome). The avatar\n // itself is the message affordance (hover → chat icon); unread + presence share one\n // bottom-right dot. Only the agent badge trails the name. Interactivity + tooltip\n // are layered with no resting background — a subtle hover fill signals the target.\n if (variant === 'pill') {\n const row = (\n <>\n {pillAvatar}\n {displayName && (\n <span className=\"min-w-0 max-w-[320px] truncate text-sm leading-tight\">\n {displayName}\n </span>\n )}\n {agentBadge}\n </>\n )\n const rowClass = 'group/pill inline-flex min-w-0 items-center gap-2'\n const clickable = interactive && !!onClick\n const clickableClass =\n 'cursor-pointer rounded-md px-1 py-0.5 -mx-1 transition-colors hover:bg-muted/60'\n\n if (resolvedTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger\n type=\"button\"\n onClick={clickable ? onClick : undefined}\n onFocusCapture={(e) => e.stopPropagation()}\n className={cn(rowClass, clickable && clickableClass, className)}\n data-testid=\"user-entity-pill\"\n >\n {row}\n </TooltipTrigger>\n <TooltipContent className=\"p-2\">{resolvedTooltip}</TooltipContent>\n </Tooltip>\n )\n }\n\n if (clickable) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n className={cn(rowClass, clickableClass, className)}\n data-testid=\"user-entity-pill\"\n >\n {row}\n </button>\n )\n }\n\n return (\n <span className={cn(rowClass, className)} data-testid=\"user-entity-pill\">\n {row}\n </span>\n )\n }\n\n // Icon variant - always non-interactive, just show avatar with optional tooltip\n // Note: avoid asChild here — Radix ref merging with Avatar's internal refs causes infinite loops\n if (showTooltip) {\n return (\n <Tooltip>\n <TooltipTrigger onFocusCapture={(e) => e.stopPropagation()} className=\"inline-flex\">\n {avatarElement}\n </TooltipTrigger>\n <TooltipContent className=\"p-2\">{tooltipContent}</TooltipContent>\n </Tooltip>\n )\n }\n\n return avatarElement\n})\n","/**\n * The two things you need to know about a correspondent before you write to\n * them: whether it is an agent, and whether it is here.\n *\n * Both live beside {@link UserEntity} rather than in any one feature, because\n * an agent has to look like an agent wherever it appears — a conversation row,\n * a thread header, a members table. Splitting the mark per surface is how you\n * end up with three of them.\n */\n\nimport { ArbiBotHeadIcon } from '../icons/ArbiBotHeadIcon'\nimport { cn } from '../lib/utils'\nimport type { PresenceDisplayStatus } from './UserEntity'\n\n/**\n * \"AGENT\" stamp for an `agt-` peer.\n *\n * `UserEntity` already marks agents with a dashed ring and a bot icon, but that\n * is a detail you have to know to read. An agent is a different KIND of\n * correspondent — it acts on someone's behalf, and what you send it may be\n * acted on rather than read — so it also gets a label you cannot miss.\n */\nexport function AgentBadge({ className }: { className?: string }) {\n return (\n <span\n data-testid=\"agent-badge\"\n className={cn(\n 'inline-flex shrink-0 items-center gap-1 rounded-full border border-ai-accent/50',\n 'bg-ai-accent-soft px-2 py-0.5 text-[11px] font-bold uppercase tracking-wider text-ai-accent',\n className\n )}\n >\n <ArbiBotHeadIcon size={14} className=\"text-ai-accent\" />\n Agent\n </span>\n )\n}\n\n/** Wording for each presence state — `hidden` deliberately says nothing. */\nconst PRESENCE_WORDS: Record<PresenceDisplayStatus, string | null> = {\n connected: 'Online',\n connecting: 'Connecting',\n disconnected: 'Offline',\n error: 'Connection problem',\n hidden: null,\n}\n\n/**\n * Presence in words rather than a coloured dot alone.\n *\n * `status` is *resolved* by the app, exactly as {@link UserEntity} expects it,\n * and `undefined` renders nothing at all. That default matters: a consumer that\n * has not wired a WebSocket provider has no presence information, and labelling\n * every one of its contacts \"Offline\" would be stating something we do not\n * know. Whether absence of a signal means offline is a claim only the app can\n * make, so the app makes it by resolving to `disconnected`.\n */\nexport function PresenceLabel({\n status,\n className,\n}: {\n status?: PresenceDisplayStatus\n className?: string\n}) {\n if (!status) return null\n const word = PRESENCE_WORDS[status]\n if (!word) return null\n\n const online = status === 'connected'\n return (\n <span\n data-testid=\"presence-label\"\n className={cn('inline-flex shrink-0 items-center gap-1 text-xs', className)}\n >\n <span\n className={cn(\n 'size-1.5 rounded-full',\n online ? 'bg-status-online' : 'bg-muted-foreground/50'\n )}\n aria-hidden=\"true\"\n />\n <span className={online ? 'font-medium text-status-online' : 'text-muted-foreground'}>\n {word}\n </span>\n </span>\n )\n}\n","/**\n * Status pill + RAG dot — the generic presentation, with the domain vocabulary\n * INJECTED (never baked in), mirroring the entity registry (`configureEntityRegistry`).\n *\n * A deployment registers its own status→variant vocabulary and, if its Badge has\n * a bespoke skin (brand variants), injects that Badge too — so each app keeps its\n * exact pill look while sharing one component:\n *\n * configureStatusRegistry(\n * { Active: 'success', Privileged: 'brass', … }, // this firm's vocabulary\n * { fallback: 'outline', Badge: FirmBadge }, // this firm's Badge skin\n * )\n */\nimport { type ComponentType, type ReactNode } from 'react'\nimport { Badge as DefaultBadge } from '../ui/badge'\nimport { cn } from '../lib/utils'\n\n/** A status variant is an opaque string — its valid values are defined by the\n * injected Badge (or the default Badge's variants). */\nexport type StatusVariant = string\n\n/** The shape a consumer's Badge must satisfy to be injected as the pill skin. */\nexport interface StatusBadgeProps {\n variant?: StatusVariant\n className?: string\n children?: ReactNode\n 'data-testid'?: string\n}\nexport type StatusBadgeComponent = ComponentType<StatusBadgeProps>\n\n/** The package Badge's own variant vocabulary. Kept as an explicit runtime list so\n * the default skin can narrow a free-form StatusVariant to a known Badge variant\n * with a type guard (no cast) — an unrecognised status just renders as `outline`. */\ntype PackageBadgeVariant = 'default' | 'accent' | 'secondary' | 'destructive' | 'outline'\nconst PACKAGE_BADGE_VARIANTS: readonly PackageBadgeVariant[] = [\n 'default',\n 'accent',\n 'secondary',\n 'destructive',\n 'outline',\n]\nfunction isPackageBadgeVariant(v: string | undefined): v is PackageBadgeVariant {\n return PACKAGE_BADGE_VARIANTS.some((known) => known === v)\n}\n\n/** Default skin: the package Badge. A firm that registers variants outside this set\n * injects its own Badge (see `configureStatusRegistry`); here unknown → `outline`. */\nfunction PackageStatusBadge({ variant, ...rest }: StatusBadgeProps) {\n return <DefaultBadge variant={isPackageBadgeVariant(variant) ? variant : 'outline'} {...rest} />\n}\n\nconst registry: {\n variants: Record<string, StatusVariant>\n fallback: StatusVariant\n Badge: StatusBadgeComponent\n} = {\n variants: {},\n fallback: 'outline',\n Badge: PackageStatusBadge,\n}\n\n/** Register a firm's status→variant vocabulary (merged in place), and optionally\n * its fallback variant + its own Badge skin. Mirrors `configureEntityRegistry`. */\nexport function configureStatusRegistry(\n map: Record<string, StatusVariant>,\n opts?: { fallback?: StatusVariant; Badge?: StatusBadgeComponent }\n): void {\n Object.assign(registry.variants, map)\n if (opts?.fallback) registry.fallback = opts.fallback\n if (opts?.Badge) registry.Badge = opts.Badge\n}\n\n/** Resolve a status string to its variant (falls back to the registered default). */\nexport function getStatusVariant(status: string): StatusVariant {\n return registry.variants[status] ?? registry.fallback\n}\n\nexport interface StatusPillProps {\n status: string\n label?: string\n /** Escape hatch: force a variant, skipping the registry. */\n variant?: StatusVariant\n className?: string\n testId?: string\n}\n\n/** A status chip whose look comes from the injected Badge + registered vocabulary. */\nexport function StatusPill({ status, label, variant, className, testId }: StatusPillProps) {\n const Badge = registry.Badge\n return (\n <Badge variant={variant ?? getStatusVariant(status)} className={className} data-testid={testId}>\n {label ?? status}\n </Badge>\n )\n}\n\n// ── RAG dot ──────────────────────────────────────────────────────────────────\n\nexport type Rag = 'red' | 'amber' | 'green'\n\nlet RAG_LABELS: Record<Rag, string> = { red: 'At risk', amber: 'Attention', green: 'On track' }\n\n/** Override the RAG label copy (defaults are seeded so consumers stay identical). */\nexport function configureRagLabels(labels: Partial<Record<Rag, string>>): void {\n RAG_LABELS = { ...RAG_LABELS, ...labels }\n}\n\n/** A small RAG dot + optional label for dense tables. Semantic tokens only. */\nexport function RagDot({\n rag,\n withLabel,\n className,\n}: {\n rag: Rag\n withLabel?: boolean\n className?: string\n}) {\n const color = rag === 'red' ? 'bg-destructive' : rag === 'amber' ? 'bg-warning' : 'bg-success'\n return (\n <span className={cn('inline-flex items-center gap-1.5', className)} data-testid={`rag-${rag}`}>\n <span className={cn('size-2 rounded-full', color)} />\n {withLabel && <span className=\"text-xs text-muted-foreground\">{RAG_LABELS[rag]}</span>}\n </span>\n )\n}\n","/**\n * Entity registry — the single, canonical source of truth for entity icons and\n * display names across every ARBI app (monolith, clarum, any deployment).\n *\n * Centralises \"what glyph and what word represents a WORKSPACE / DOCUMENT / USER /\n * …\" so rebranding or re-skinning happens in ONE place. The monolith and other\n * deployments layer their own flourishes on top via {@link configureEntityRegistry}\n * (e.g. a custom workspace glyph, or brand names like \"MatterSpace\") without\n * forking this map.\n *\n * Deliberately dependency-light: lucide icon components + plain data. No store,\n * no app `@/` imports. Consumers render via {@link EntityIcon} or read\n * {@link getEntityIcon}/{@link getEntityLabel}.\n */\n\nimport React from 'react'\nimport {\n UserStar,\n Bell,\n BookOpen,\n CaptionsOff,\n ChevronsDown,\n CircleUserRound,\n ClipboardList,\n Columns3Cog,\n Eye,\n EyeOff,\n FileQuestion,\n FolderOpen,\n FolderPlus,\n Hash,\n Info,\n LayoutGrid,\n LogOut,\n MessageSquare,\n MessageSquareLock,\n MessageSquareMore,\n MessageSquareOff,\n MessageSquarePlus,\n MessageSquareText,\n MessagesSquare,\n NotebookPen,\n NotebookText,\n CreditCard,\n Settings2,\n SquareM,\n SquarePlus,\n StickyNote,\n Upload,\n User,\n UserPlus,\n Users,\n Wrench,\n} from 'lucide-react'\n\n/** An icon component usable in the registry (lucide icons + custom SVG wrappers). */\nexport type EntityIconComponent = React.ComponentType<\n React.SVGAttributes<SVGElement> & { size?: number | string; className?: string }\n>\n\n/**\n * Entity Mappings — naming conventions + icons for every entity in the app.\n *\n * `WORKSPACE.ICONS.DEFAULT` is the generic `SquareM` here; the monolith injects a\n * rotated variant via {@link configureEntityRegistry}. The object is mutated in\n * place by that helper, so existing `ENTITY_MAPPINGS` references stay live.\n */\nexport const ENTITY_MAPPINGS = {\n PRODUCT: {\n NAMES: {\n SINGULAR: 'ARBI Docs',\n },\n ICONS: {\n DEFAULT: MessageSquareLock,\n },\n },\n SECTION: {\n NAMES: {\n SINGULAR: 'Section',\n },\n ICONS: {\n DEFAULT: ChevronsDown,\n },\n },\n WORKSPACE: {\n NAMES: {\n SINGULAR: 'Workspace',\n PLURAL: 'Workspaces',\n },\n ICONS: {\n DEFAULT: SquareM,\n NEW: SquarePlus,\n LIST: LayoutGrid,\n SETTINGS: Columns3Cog,\n },\n },\n CONVERSATION: {\n NAMES: {\n SINGULAR: 'Chat',\n PLURAL: 'Chats',\n NEW: 'New ARBI Chat',\n },\n ICONS: {\n DEFAULT: MessagesSquare,\n OFF: MessageSquareOff,\n ACTIVE: MessageSquareText,\n NEW: MessageSquarePlus,\n LIST: MessageSquareMore,\n },\n },\n DOCUMENT: {\n NAMES: {\n SINGULAR: 'File',\n PLURAL: 'Files',\n },\n ICONS: {\n DEFAULT: FolderOpen,\n OFF: CaptionsOff,\n },\n },\n VIEWER: {\n NAMES: {\n SINGULAR: 'Viewer',\n PLURAL: 'Viewers',\n },\n ICONS: {\n DEFAULT: Eye,\n OFF: EyeOff,\n },\n },\n TAG: {\n NAMES: {\n SINGULAR: 'Field',\n PLURAL: 'Fields',\n },\n ICONS: {\n DEFAULT: Hash,\n NEW: FolderPlus,\n },\n },\n ANNOTATION: {\n NAMES: {\n SINGULAR: 'Annotation',\n PLURAL: 'Annotations',\n },\n ICONS: {\n DEFAULT: StickyNote,\n NEW: StickyNote,\n },\n },\n // Workspace knowledge the assistant retains and recalls — durable free text,\n // optionally grounded in source passages. Distinct from ANNOTATION, which is\n // attached TO a document field; a NOTE is workspace-scoped and stands alone.\n // Stored server-side as `memories` (mem-*); \"Note\" is the user-facing name.\n NOTE: {\n NAMES: {\n SINGULAR: 'Note',\n PLURAL: 'Notes',\n },\n ICONS: {\n DEFAULT: NotebookText,\n NEW: NotebookPen,\n },\n },\n USER: {\n NAMES: {\n SINGULAR: 'User',\n PLURAL: 'Users',\n },\n ICONS: {\n DEFAULT: User,\n NEW: UserPlus,\n SETTINGS: Settings2,\n },\n },\n WORKSPACEUSER: {\n NAMES: {\n SINGULAR: 'Member',\n PLURAL: 'Members',\n },\n ICONS: {\n DEFAULT: User,\n PLURAL: Users,\n NEW: UserPlus,\n SETTINGS: Settings2,\n },\n },\n CONTACT: {\n NAMES: {\n SINGULAR: 'Contact',\n PLURAL: 'Contacts',\n },\n ICONS: {\n // A starred person, not an address-book card: contacts here are the\n // people you talk to, and the star reads as \"your people\".\n DEFAULT: UserStar,\n NEW: UserPlus,\n },\n },\n TASK: {\n NAMES: {\n SINGULAR: 'Job',\n PLURAL: 'Jobs',\n },\n ICONS: {\n DEFAULT: ClipboardList,\n },\n },\n PROJECT: {\n NAMES: {\n SINGULAR: 'Project',\n PLURAL: 'Projects',\n },\n ICONS: {\n DEFAULT: CreditCard,\n },\n },\n SKILL: {\n NAMES: {\n SINGULAR: 'Skill',\n PLURAL: 'Skills',\n },\n ICONS: {\n DEFAULT: Wrench,\n },\n },\n ACCOUNT: {\n NAMES: {\n SINGULAR: 'Account',\n },\n ICONS: {\n DEFAULT: CircleUserRound,\n },\n },\n NOTIFICATIONS: {\n NAMES: {\n SINGULAR: 'Activity',\n PLURAL: 'Activities',\n },\n ICONS: {\n DEFAULT: Bell,\n },\n },\n MESSAGE: {\n NAMES: {\n SINGULAR: 'Message',\n PLURAL: 'Messages',\n },\n ICONS: {\n DEFAULT: MessageSquare,\n },\n },\n NOTIFICATION: {\n NAMES: {\n SINGULAR: 'Notification',\n PLURAL: 'Notifications',\n },\n ICONS: {\n DEFAULT: Bell,\n },\n },\n APP: {\n NAMES: {\n SINGULAR: 'Application',\n PLURAL: 'Applications',\n },\n ICONS: {\n DEFAULT: LayoutGrid,\n HOME: LayoutGrid,\n LOGOUT: LogOut,\n UPLOAD: Upload,\n },\n },\n HELP: {\n NAMES: {\n SINGULAR: 'Help',\n PLURAL: 'Help',\n },\n ICONS: {\n DEFAULT: MessageSquareLock,\n DOCS: BookOpen,\n FAQ: FileQuestion,\n ABOUT: Info,\n },\n },\n USERSHIELD: {\n NAMES: {\n SINGULAR: 'User Shield',\n PLURAL: 'User Shields',\n },\n ICONS: {\n DEFAULT: MessageSquareLock,\n },\n },\n}\n\n/** The set of registered entity types. */\nexport type EntityType = keyof typeof ENTITY_MAPPINGS\n\n/** Deployment override for a single entity: extra/replacement names and icons. */\nexport interface EntityRegistryOverride {\n NAMES?: Record<string, string>\n ICONS?: Record<string, EntityIconComponent>\n}\n\n/**\n * Layer deployment-specific names/icons onto the canonical registry — call once\n * at app startup. Merges in place (so live `ENTITY_MAPPINGS` refs pick it up) and\n * only touches the keys you pass, e.g.:\n *\n * ```ts\n * configureEntityRegistry({\n * WORKSPACE: { NAMES: { SINGULAR: 'MatterSpace' }, ICONS: { DEFAULT: RotatedSquareM } },\n * })\n * ```\n */\nexport function configureEntityRegistry(\n overrides: Partial<Record<EntityType, EntityRegistryOverride>>\n): void {\n for (const [type, def] of Object.entries(overrides)) {\n const target = ENTITY_MAPPINGS[type as EntityType] as {\n NAMES: Record<string, string>\n ICONS: Record<string, EntityIconComponent>\n }\n if (!target) continue\n if (def?.NAMES) Object.assign(target.NAMES, def.NAMES)\n if (def?.ICONS) Object.assign(target.ICONS, def.ICONS)\n }\n}\n\n/**\n * Resolve the icon component for an entity type + variant, falling back to the\n * type's DEFAULT icon for unknown variants.\n */\nexport const getEntityIcon = (\n entityType: EntityType,\n variant: string = 'DEFAULT'\n): EntityIconComponent | undefined => {\n const icons = ENTITY_MAPPINGS[entityType]?.ICONS as\n Record<string, EntityIconComponent> | undefined\n return icons?.[variant] || icons?.DEFAULT\n}\n\ninterface EntityNames {\n SINGULAR: string\n PLURAL?: string\n SHORT?: string\n NEW?: string\n}\n\n/**\n * Display label for an entity type. `SINGULAR` (default); `PLURAL`/`SHORT`/`NEW`\n * fall back to derivations of the singular when not explicitly configured.\n */\nexport const getEntityLabel = (\n entityType: EntityType,\n form: 'SINGULAR' | 'PLURAL' | 'SHORT' | 'NEW' = 'SINGULAR'\n): string => {\n const entityMapping = ENTITY_MAPPINGS[entityType]\n if (!entityMapping) return ''\n const names = entityMapping.NAMES as EntityNames\n const singularName = names.SINGULAR || ''\n\n if (form === 'NEW') return names.NEW !== undefined ? names.NEW : 'New ' + singularName\n if (form === 'SHORT')\n return names.SHORT !== undefined ? names.SHORT : singularName.substring(0, 3) + '.'\n if (form === 'PLURAL') return names.PLURAL !== undefined ? names.PLURAL : singularName + 's'\n return singularName\n}\n\ntype EntityIconProps = {\n entityType: EntityType\n variant?: string\n className?: string\n size?: number\n color?: string\n 'data-testid'?: string\n onClick?: () => void\n} & React.SVGAttributes<SVGElement>\n\n/**\n * Render an entity's icon — the recommended way to show entity glyphs so all\n * icon choices stay centralised.\n */\nexport const EntityIcon = ({ entityType, variant = 'DEFAULT', ...props }: EntityIconProps) => {\n const IconComponent = getEntityIcon(entityType, variant)\n return IconComponent ? React.createElement(IconComponent, props) : null\n}\n\n/** Centralised icons for private/shared visibility states. */\nexport const VISIBILITY_ICONS = {\n PRIVATE: MessageSquareLock,\n SHARED: Users,\n}\n\n/** Render the private/shared visibility glyph. */\nexport const VisibilityIcon = ({\n isShared,\n ...props\n}: {\n isShared: boolean\n className?: string\n size?: number\n color?: string\n 'data-testid'?: string\n onClick?: () => void\n} & React.SVGAttributes<SVGElement>) => {\n const IconComponent = isShared ? VISIBILITY_ICONS.SHARED : VISIBILITY_ICONS.PRIVATE\n return React.createElement(IconComponent, props)\n}\n","/**\n * Entity colour system — the single source of truth for deriving a stable colour\n * from an entity id (workspace/tag/doc badges) shared across every app.\n *\n * ONE base palette (16 colours, indexed by the hex char at position 5 of an\n * entity id) + three opacity constants that shift every variant globally. Pure,\n * framework-free: no React, no store, no app `@/` imports.\n */\n\n// Adjust these three constants to shift all entity colours at once.\nconst OPACITY_LIGHT = 0.15 // Light backgrounds (tags with dark text)\nconst OPACITY_MEDIUM = 1.0 // Medium backgrounds (workspace icons with white text)\nconst OPACITY_BORDER = 0.3 // Borders\n\n/** Semantic placeholder colour for empty/pending states (gray-400). */\nexport const PLACEHOLDER_COLOR = '#9ca3af'\n\n/** Neutral gray for generic/unknown file types (slate-500). */\nexport const NEUTRAL_GRAY = '#64748b'\n\n/** Base palette — source of truth for all entity colours (hex char 0–f). */\nexport const BASE_COLORS: Record<string, string> = {\n '0': '#10b981',\n '1': '#3b82f6',\n '2': '#8b5cf6',\n '3': '#f43f5e',\n '4': '#f59e0b',\n '5': '#84cc16',\n '6': '#a855f7',\n '7': '#06b6d4',\n '8': '#f97316',\n '9': '#14b8a6',\n a: '#ef4444',\n b: '#6366f1',\n c: '#ec4899',\n d: '#22c55e',\n e: '#eab308',\n f: '#0ea5e9',\n}\n\n/** Convert a `#rrggbb` hex colour to an `rgba(...)` string at the given opacity. */\nfunction hexToRgba(hex: string, opacity: number): string {\n const r = parseInt(hex.slice(1, 3), 16)\n const g = parseInt(hex.slice(3, 5), 16)\n const b = parseInt(hex.slice(5, 7), 16)\n return `rgba(${r}, ${g}, ${b}, ${opacity})`\n}\n\n/**\n * Deterministic colour for an entity id. The 5th char (index 4) of the id selects\n * a base colour; the variant picks the opacity treatment.\n */\nexport function getEntityColor(\n entityId: string,\n variant: 'light' | 'medium' | 'text' = 'medium'\n): string {\n const baseColor = BASE_COLORS[entityId[4]] || BASE_COLORS['0']\n switch (variant) {\n case 'light':\n return hexToRgba(baseColor, OPACITY_LIGHT)\n case 'medium':\n return hexToRgba(baseColor, OPACITY_MEDIUM)\n case 'text':\n return baseColor\n }\n}\n\n/** Full badge colour set for an entity id: light background + solid text + border. */\nexport function getEntityColorStyles(entityId: string): {\n backgroundColor: string\n color: string\n borderColor: string\n} {\n const baseColor = BASE_COLORS[entityId[4]] || BASE_COLORS['0']\n return {\n backgroundColor: getEntityColor(entityId, 'light'),\n color: baseColor,\n borderColor: hexToRgba(baseColor, OPACITY_BORDER),\n }\n}\n\n/**\n * Colour for a workspace id — the MEDIUM (solid) variant, for white text on top.\n * Returns the `--primary` token when colours are disabled or the id is invalid,\n * so callers always get a paintable value.\n */\nexport const getWorkspaceColor = (\n workspaceId: string | undefined | null,\n useWorkspaceColors?: boolean\n): string => {\n const shouldUseWorkspaceColors = useWorkspaceColors !== undefined ? useWorkspaceColors : true\n if (!shouldUseWorkspaceColors) return 'hsl(var(--primary))'\n const isValidId = workspaceId && workspaceId.startsWith('wrk-') && workspaceId.length >= 5\n if (!isValidId) return 'hsl(var(--primary))'\n return getEntityColor(workspaceId, 'medium')\n}\n"]}