@adoptai/genui-components 0.1.66 → 0.1.68
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/composites/document-preview/PdfViewer.d.ts +2 -1
- package/dist/composites/document-preview/PdfViewer.d.ts.map +1 -1
- package/dist/composites/document-preview/resolver.cjs +90 -11
- package/dist/composites/document-preview/resolver.cjs.map +1 -1
- package/dist/composites/document-preview/resolver.d.ts.map +1 -1
- package/dist/composites/document-preview/resolver.js +90 -11
- package/dist/composites/document-preview/resolver.js.map +1 -1
- package/dist/composites/download-card/resolver.cjs +95 -10
- package/dist/composites/download-card/resolver.cjs.map +1 -1
- package/dist/composites/download-card/resolver.js +95 -10
- package/dist/composites/download-card/resolver.js.map +1 -1
- package/dist/index.cjs +106 -12
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +106 -13
- package/dist/index.js.map +1 -1
- package/dist/renderer.cjs +105 -12
- package/dist/renderer.cjs.map +1 -1
- package/dist/renderer.js +105 -12
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.cjs +105 -12
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.js +105 -12
- package/dist/resolver.js.map +1 -1
- package/dist/shared/viewers/PreviewHost.d.ts.map +1 -1
- package/dist/shared/viewers/pdfWorkerProbe.d.ts +31 -0
- package/dist/shared/viewers/pdfWorkerProbe.d.ts.map +1 -0
- package/dist/tool-definitions.json +2 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/shared/theme.ts","../../../src/shared/ThemeContext.tsx","../../../src/shared/Markdown.tsx","../../../src/composites/document-preview/PdfViewer.tsx","../../../src/composites/document-preview/ExcelViewer.tsx","../../../src/shared/viewers/decode.ts","../../../src/shared/viewers/CsvViewer.tsx","../../../src/shared/viewers/TextViewer.tsx","../../../src/shared/viewers/DocxViewer.tsx","../../../src/shared/ColumnSettingsPanel.tsx","../../../src/shared/ComponentActions.tsx","../../../src/shared/FileCard.tsx","../../../src/shared/fileType.ts","../../../src/shared/viewers/PreviewHost.tsx","../../../src/shared/PreviewModal.tsx","../../../src/composites/download-card/resolver.tsx"],"names":["useContext","createContext","jsx","BORDER","MUTED","PAPER","jsxs","_a","Fragment","SURFACE","useState","useCallback","useEffect","Document","Page","pdfjs","useRef","XLSX","Papa","mammoth","ACCENT","SURFACE_MUTED","toPng","PdfViewer","lazy","ExcelViewer","CsvViewer","TextViewer","DocxViewer","Suspense","FOREGROUND","SCRIM","createPortal","SHADOW","React"],"mappings":"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","file":"resolver.cjs","sourcesContent":["// Theme tokens. Defaults below are the light-mode values; every token is also\n// exposed through `useTheme()` (see ThemeContext) so a consumer can override\n// them per theme (e.g. adoptwebui passes `var(--th-*)` strings for dark mode).\n//\n// IMPORTANT: components must read colors from `useTheme()` — NOT these static\n// imports — so provider overrides actually apply. The static exports remain for\n// non-React callers and as the default values.\nexport const BORDER = \"#dedede\";\nexport const BORDER_SOFT = \"#f2f2f2\"; // lighter hairline (subtle dividers, row lines)\nexport const MUTED = \"#777777\";\nexport const PAPER = \"#f6f6f6\"; // recessed panel surface\nexport const SURFACE = \"#ffffff\"; // primary card / component surface\nexport const SURFACE_MUTED = \"#fafafa\"; // zebra rows, hover fills, progress tracks\nexport const SHADOW = \"0 1px 2px rgba(0,0,0,0.04)\"; // resting card elevation\n// Primary text color. Mirrors contract.css's `--foreground` default so components\n// look identical when unthemed. Exposed as a token so portaled UI (e.g. the\n// preview modal, which mounts on document.body and escapes any ancestor that\n// overrides `--foreground`) can re-pin `--foreground` from the active theme.\nexport const FOREGROUND = \"#111111\";\n// Modal/overlay backdrop scrim. Default is a neutral dark slate; consumers can\n// pass a theme-tinted rgba so the defocus matches the active theme (e.g. warm\n// on a \"carbon\" dark theme, blue on \"midnight\") instead of always reading blue.\nexport const SCRIM = \"rgba(15,23,42,0.55)\";\nexport const ACCENT = \"#ff5000\";\nexport const ACCENT_SOFT = \"#cc4000\";\nexport const SECONDARY = \"#0364ff\";\n\n// Semantic status colors. Backgrounds are translucent tints of the hue so they\n// sit correctly on ANY surface (white in light, dark panel in dark) instead of\n// a fixed pastel fill; the text is a mid-saturated hue legible on both. Keep\n// hue == meaning (blue=info/asset, green=success/revenue, red=error/expense,\n// amber=warning/draft, purple=filed/equity).\nexport const ACCOUNT_TYPE_COLORS = {\n asset: { bg: \"rgba(37,99,235,0.12)\", color: \"#2563eb\" },\n liability: { bg: \"rgba(217,119,6,0.14)\", color: \"#d97706\" },\n equity: { bg: \"rgba(124,58,237,0.13)\", color: \"#7c3aed\" },\n revenue: { bg: \"rgba(22,163,74,0.13)\", color: \"#16a34a\" },\n expense: { bg: \"rgba(220,38,38,0.12)\", color: \"#dc2626\" },\n} as const;\n\nexport const STATUS_COLORS = {\n draft: { bg: \"rgba(217,119,6,0.14)\", color: \"#d97706\" },\n \"pending-review\": { bg: \"rgba(37,99,235,0.12)\", color: \"#2563eb\" },\n approved: { bg: \"rgba(22,163,74,0.13)\", color: \"#16a34a\" },\n filed: { bg: \"rgba(124,58,237,0.13)\", color: \"#7c3aed\" },\n} as const;\n\n// Shared semantic hue pairs for inline status badges (translucent bg + mid-hue\n// text), so components don't hardcode pastel fills that break in dark mode.\nexport const SEMANTIC = {\n success: { bg: \"rgba(22,163,74,0.13)\", color: \"#16a34a\" },\n error: { bg: \"rgba(220,38,38,0.12)\", color: \"#dc2626\" },\n warning: { bg: \"rgba(217,119,6,0.14)\", color: \"#d97706\" },\n info: { bg: \"rgba(37,99,235,0.12)\", color: \"#2563eb\" },\n purple: { bg: \"rgba(124,58,237,0.13)\", color: \"#7c3aed\" },\n neutral: { bg: \"rgba(120,120,120,0.12)\", color: \"#777777\" },\n} as const;\n\nexport const CHART_PALETTE = [\n \"#ff5000\",\n \"#0364ff\",\n \"#16a34a\",\n \"#dc2626\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#f59e0b\",\n \"#6366f1\",\n \"#ec4899\",\n \"#84cc16\",\n \"#e11d48\",\n \"#0ea5e9\",\n];\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport {\n BORDER,\n BORDER_SOFT,\n MUTED,\n PAPER,\n SURFACE,\n SURFACE_MUTED,\n SHADOW,\n FOREGROUND,\n SCRIM,\n ACCENT,\n ACCENT_SOFT,\n SECONDARY,\n CHART_PALETTE,\n} from \"./theme\";\n\nexport interface ThemeTokens {\n BORDER: string;\n /** Lighter hairline — subtle dividers / row lines. */\n BORDER_SOFT: string;\n MUTED: string;\n /** Recessed panel surface. */\n PAPER: string;\n /** Primary card / component surface (white in light, dark panel in dark). */\n SURFACE: string;\n /** Zebra rows, hover fills, progress tracks. */\n SURFACE_MUTED: string;\n /** Resting card elevation box-shadow. */\n SHADOW: string;\n /** Primary text color. Components read text via the `--foreground` CSS var by\n * default; this token lets portaled UI (preview modal) re-pin that var from\n * the active theme. */\n FOREGROUND: string;\n /** Modal/overlay backdrop scrim (rgba). Pass a theme-tinted value so the\n * defocus matches the active theme rather than always reading blue. */\n SCRIM: string;\n ACCENT: string;\n ACCENT_SOFT: string;\n SECONDARY: string;\n CHART_PALETTE: string[];\n}\n\nexport const DEFAULT_TOKENS: ThemeTokens = {\n BORDER,\n BORDER_SOFT,\n MUTED,\n PAPER,\n SURFACE,\n SURFACE_MUTED,\n SHADOW,\n FOREGROUND,\n SCRIM,\n ACCENT,\n ACCENT_SOFT,\n SECONDARY,\n CHART_PALETTE: [...CHART_PALETTE],\n};\n\nconst GenUIThemeContext = createContext<ThemeTokens>(DEFAULT_TOKENS);\n\nexport interface GenUIThemeProviderProps {\n colors?: Partial<ThemeTokens>;\n children: React.ReactNode;\n}\n\nexport function GenUIThemeProvider({ colors, children }: GenUIThemeProviderProps) {\n const merged = useMemo(\n () => (colors ? { ...DEFAULT_TOKENS, ...colors } : DEFAULT_TOKENS),\n [colors]\n );\n return (\n <GenUIThemeContext.Provider value={merged}>\n {children}\n </GenUIThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeTokens {\n return useContext(GenUIThemeContext);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useTheme } from \"./ThemeContext\";\n// ACCENT/SECONDARY are consumed by `renderInline`, a non-hook module function\n// (can't call useTheme), so they stay as static imports; BORDER/MUTED/PAPER move\n// to useTheme inside the MarkdownBlock component so dark-mode overrides apply.\nimport { ACCENT, SECONDARY, SEMANTIC } from \"./theme\";\n\n/**\n * Lightweight, dependency-free markdown renderer for prose fields.\n *\n * Inline grammar (always available): `**bold**`, `*italic*`, `` `code` ``,\n * `[text](url)` links.\n * Block grammar (default mode only): `#`–`####` headings, `- `/`* ` bullet\n * lists, `1.` numbered lists, GFM pipe tables (`| a | b |` + `|---|---|`),\n * blank-line-separated paragraphs.\n *\n * Pass `inline` for compact fields that live in tight rows/cards — it renders\n * only inline spans (no headings/lists/paragraph margins) so layout height is\n * preserved.\n *\n * Note: underscore italics (`_x_`) are intentionally NOT supported — they\n * collide with snake_case identifiers common in this domain.\n */\nexport function renderInline(text: string): React.ReactNode[] {\n const parts: React.ReactNode[] = [];\n let rest = text;\n let k = 0;\n\n const nextIndex = (needle: string): number => {\n const idx = rest.indexOf(needle);\n return idx >= 0 ? idx : Infinity;\n };\n\n while (rest.length > 0) {\n const boldIdx = nextIndex(\"**\");\n const codeIdx = nextIndex(\"`\");\n const linkIdx = nextIndex(\"[\");\n // single-star italic: ignore the `*` that belongs to a `**` run\n let italicIdx = rest.indexOf(\"*\");\n if (italicIdx === boldIdx) italicIdx = rest.indexOf(\"*\", italicIdx + 2);\n const italicIdxN = italicIdx >= 0 ? italicIdx : Infinity;\n\n const nextSpecial = Math.min(boldIdx, codeIdx, linkIdx, italicIdxN);\n\n if (nextSpecial === Infinity) {\n parts.push(<span key={k++}>{rest}</span>);\n break;\n }\n\n if (nextSpecial > 0) {\n parts.push(<span key={k++}>{rest.slice(0, nextSpecial)}</span>);\n rest = rest.slice(nextSpecial);\n }\n\n if (rest.startsWith(\"**\")) {\n const end = rest.indexOf(\"**\", 2);\n if (end > 2) {\n parts.push(\n <strong key={k++} style={{ fontWeight: 600, color: \"var(--foreground)\" }}>\n {renderInline(rest.slice(2, end))}\n </strong>\n );\n rest = rest.slice(end + 2);\n continue;\n }\n }\n\n if (rest.startsWith(\"`\")) {\n const end = rest.indexOf(\"`\", 1);\n if (end > 1) {\n parts.push(\n <code\n key={k++}\n style={{\n fontSize: \"0.9em\",\n padding: \"1px 5px\",\n borderRadius: \"4px\",\n background: SEMANTIC.neutral.bg,\n fontFamily: \"monospace\",\n color: ACCENT,\n }}\n >\n {rest.slice(1, end)}\n </code>\n );\n rest = rest.slice(end + 1);\n continue;\n }\n }\n\n if (rest.startsWith(\"[\")) {\n const closeText = rest.indexOf(\"]\");\n if (closeText > 0 && rest[closeText + 1] === \"(\") {\n const closeUrl = rest.indexOf(\")\", closeText + 2);\n if (closeUrl > closeText + 1) {\n const label = rest.slice(1, closeText);\n const url = rest.slice(closeText + 2, closeUrl);\n parts.push(\n <a\n key={k++}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: SECONDARY, textDecoration: \"none\" }}\n >\n {renderInline(label)}\n </a>\n );\n rest = rest.slice(closeUrl + 1);\n continue;\n }\n }\n }\n\n if (rest.startsWith(\"*\")) {\n const end = rest.indexOf(\"*\", 1);\n if (end > 1) {\n parts.push(\n <em key={k++} style={{ fontStyle: \"italic\" }}>\n {renderInline(rest.slice(1, end))}\n </em>\n );\n rest = rest.slice(end + 1);\n continue;\n }\n }\n\n parts.push(<span key={k++}>{rest[0]}</span>);\n rest = rest.slice(1);\n }\n\n return parts;\n}\n\ntype CellAlign = \"left\" | \"center\" | \"right\";\n\n/** Split a pipe-table row into trimmed cells, honoring escaped `\\|`. */\nfunction parseTableRow(line: string): string[] {\n let s = line.trim();\n if (s.startsWith(\"|\")) s = s.slice(1);\n if (s.endsWith(\"|\") && !s.endsWith(\"\\\\|\")) s = s.slice(0, -1);\n return s\n .split(/(?<!\\\\)\\|/)\n .map((c) => c.trim().replace(/\\\\\\|/g, \"|\"));\n}\n\n/** A separator row is all cells like `---`, `:--`, `--:`, or `:-:`. */\nfunction isTableSeparator(line: string): boolean {\n if (!line.includes(\"-\")) return false;\n const cells = parseTableRow(line);\n return cells.length > 0 && cells.every((c) => /^:?-{1,}:?$/.test(c));\n}\n\nfunction alignFromSeparator(cell: string): CellAlign {\n const left = cell.startsWith(\":\");\n const right = cell.endsWith(\":\");\n if (left && right) return \"center\";\n if (right) return \"right\";\n return \"left\";\n}\n\nfunction MarkdownBlock({ content }: { content: string }): React.ReactElement {\n const { BORDER, MUTED, PAPER } = useTheme();\n const lines = content.split(\"\\n\");\n const elements: React.ReactNode[] = [];\n let key = 0;\n let i = 0;\n\n while (i < lines.length) {\n const trimmed = lines[i].trim();\n\n if (!trimmed) {\n i++;\n continue;\n }\n\n const headingMatch = trimmed.match(/^(#{1,4})\\s+(.+)/);\n if (headingMatch) {\n const level = headingMatch[1].length;\n const cfg: Record<number, { size: string; weight: number; serif: boolean; mt: string }> = {\n 1: { size: \"15px\", weight: 600, serif: true, mt: \"0\" },\n 2: { size: \"14px\", weight: 600, serif: true, mt: \"14px\" },\n 3: { size: \"12px\", weight: 600, serif: false, mt: \"12px\" },\n 4: { size: \"11px\", weight: 600, serif: false, mt: \"10px\" },\n };\n const s = cfg[level] ?? cfg[3];\n elements.push(\n <div\n key={key++}\n style={{\n fontSize: s.size,\n fontWeight: s.weight,\n fontFamily: s.serif ? \"var(--font-serif)\" : \"var(--font-sans)\",\n color: \"var(--foreground)\",\n letterSpacing: s.serif ? \"-0.005em\" : \"0\",\n marginTop: s.mt,\n marginBottom: \"6px\",\n lineHeight: 1.3,\n }}\n >\n {renderInline(headingMatch[2])}\n </div>\n );\n i++;\n continue;\n }\n\n if (trimmed.startsWith(\"- \") || trimmed.startsWith(\"* \")) {\n const items: string[] = [];\n while (i < lines.length) {\n const li = lines[i].trim();\n if (!li.startsWith(\"- \") && !li.startsWith(\"* \")) break;\n items.push(li.slice(2));\n i++;\n }\n elements.push(\n <div key={key++} style={{ margin: \"4px 0 8px 0\", paddingLeft: \"4px\" }}>\n {items.map((text, idx) => (\n <div\n key={idx}\n style={{\n display: \"flex\",\n gap: \"8px\",\n marginBottom: \"5px\",\n alignItems: \"baseline\",\n }}\n >\n <span\n style={{\n width: \"4px\",\n height: \"4px\",\n borderRadius: \"9999px\",\n background: ACCENT,\n opacity: 0.5,\n flexShrink: 0,\n marginTop: \"7px\",\n }}\n />\n <span style={{ flex: 1 }}>{renderInline(text)}</span>\n </div>\n ))}\n </div>\n );\n continue;\n }\n\n const numMatch = trimmed.match(/^(\\d+)\\.\\s+(.+)/);\n if (numMatch) {\n const items: { num: string; text: string }[] = [];\n while (i < lines.length) {\n const li = lines[i].trim();\n const m = li.match(/^(\\d+)\\.\\s+(.+)/);\n if (!m) break;\n items.push({ num: m[1], text: m[2] });\n i++;\n }\n elements.push(\n <div key={key++} style={{ margin: \"4px 0 8px 0\", paddingLeft: \"4px\" }}>\n {items.map((item, idx) => (\n <div\n key={idx}\n style={{\n display: \"flex\",\n gap: \"8px\",\n marginBottom: \"6px\",\n alignItems: \"baseline\",\n }}\n >\n <span\n style={{\n fontSize: \"10px\",\n fontWeight: 700,\n color: ACCENT,\n opacity: 0.7,\n minWidth: \"14px\",\n textAlign: \"right\",\n fontVariantNumeric: \"tabular-nums\",\n flexShrink: 0,\n }}\n >\n {item.num}\n </span>\n <span style={{ flex: 1 }}>{renderInline(item.text)}</span>\n </div>\n ))}\n </div>\n );\n continue;\n }\n\n // GFM pipe table: a header row followed by a separator row.\n if (\n trimmed.includes(\"|\") &&\n i + 1 < lines.length &&\n isTableSeparator(lines[i + 1])\n ) {\n const headers = parseTableRow(trimmed);\n const aligns = parseTableRow(lines[i + 1]).map(alignFromSeparator);\n i += 2;\n const rows: string[][] = [];\n while (i < lines.length) {\n const li = lines[i].trim();\n if (!li || !li.includes(\"|\")) break;\n rows.push(parseTableRow(li));\n i++;\n }\n const colAlign = (idx: number): CellAlign => aligns[idx] ?? \"left\";\n elements.push(\n <div key={key++} style={{ margin: \"6px 0 10px 0\", overflowX: \"auto\" }}>\n <table\n style={{\n borderCollapse: \"collapse\",\n width: \"100%\",\n fontSize: \"12px\",\n lineHeight: 1.4,\n }}\n >\n <thead>\n <tr>\n {headers.map((h, idx) => (\n <th\n key={idx}\n style={{\n textAlign: colAlign(idx),\n padding: \"6px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n background: PAPER,\n fontWeight: 600,\n color: MUTED,\n fontSize: \"10px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n whiteSpace: \"nowrap\",\n }}\n >\n {renderInline(h)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((cells, rIdx) => (\n <tr key={rIdx}>\n {headers.map((_, cIdx) => (\n <td\n key={cIdx}\n style={{\n textAlign: colAlign(cIdx),\n padding: \"6px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n color: \"var(--foreground)\",\n verticalAlign: \"top\",\n }}\n >\n {renderInline(cells[cIdx] ?? \"\")}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n continue;\n }\n\n elements.push(\n <p key={key++} style={{ margin: \"0 0 8px 0\", lineHeight: 1.65 }}>\n {renderInline(trimmed)}\n </p>\n );\n i++;\n }\n\n return <>{elements}</>;\n}\n\nexport function Markdown({\n content,\n inline = false,\n}: {\n content: string | null | undefined;\n inline?: boolean;\n}): React.ReactElement | null {\n if (!content) return null;\n if (inline) {\n return <span style={{ whiteSpace: \"pre-wrap\" }}>{renderInline(content)}</span>;\n }\n return <MarkdownBlock content={content} />;\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useEffect } from \"react\";\nimport { Document, Page, pdfjs } from \"react-pdf\";\nimport \"react-pdf/dist/Page/AnnotationLayer.css\";\nimport \"react-pdf/dist/Page/TextLayer.css\";\n\npdfjs.GlobalWorkerOptions.workerSrc = `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n\nimport { ACCENT } from \"../../shared/theme\";\nimport { useTheme } from \"../../shared/ThemeContext\";\nconst TERRACOTTA = ACCENT;\n\ninterface PdfViewerProps {\n url?: string;\n base64?: string;\n onLoadSuccess?: (numPages: number) => void;\n}\n\nexport function PdfViewer({ url, base64, onLoadSuccess }: PdfViewerProps) {\n const { BORDER, MUTED, SURFACE } = useTheme();\n const [numPages, setNumPages] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [loading, setLoading] = useState(true);\n\n const handleLoad = useCallback(({ numPages: n }: { numPages: number }) => {\n setNumPages(n);\n setLoading(false);\n onLoadSuccess?.(n);\n }, [onLoadSuccess]);\n\n useEffect(() => {\n if (numPages <= 1) return;\n const handler = (e: KeyboardEvent) => {\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\") return;\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n setCurrentPage((p) => Math.max(1, p - 1));\n } else if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setCurrentPage((p) => Math.min(numPages, p + 1));\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [numPages]);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"0\" }}>\n {numPages > 1 && (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: \"8px\", padding: \"8px 14px\",\n background: SURFACE, width: \"100%\", justifyContent: \"center\",\n borderBottom: `1px solid ${BORDER}`,\n }}>\n <button\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\n disabled={currentPage === 1}\n style={{\n border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\",\n background: SURFACE, cursor: \"pointer\", fontSize: \"12px\",\n color: currentPage === 1 ? BORDER : MUTED,\n }}\n >\n ←\n </button>\n <span style={{ fontSize: \"12px\", color: MUTED }}>\n {currentPage} / {numPages}\n </span>\n <button\n onClick={() => setCurrentPage((p) => Math.min(numPages, p + 1))}\n disabled={currentPage === numPages}\n style={{\n border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\",\n background: SURFACE, cursor: \"pointer\", fontSize: \"12px\",\n color: currentPage === numPages ? BORDER : MUTED,\n }}\n >\n →\n </button>\n </div>\n )}\n\n <div style={{ overflow: \"auto\", width: \"100%\", display: \"flex\", justifyContent: \"center\", padding: \"16px\" }}>\n {loading && (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"200px\", color: MUTED, fontSize: \"13px\" }}>\n Loading PDF...\n </div>\n )}\n <Document file={base64 ? `data:application/pdf;base64,${base64}` : url} onLoadSuccess={handleLoad} loading=\"\">\n <Page\n pageNumber={currentPage}\n width={540}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n />\n </Document>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect, useRef } from \"react\";\nimport * as XLSX from \"xlsx\";\n\nimport { ACCENT } from \"../../shared/theme\";\nimport { useTheme } from \"../../shared/ThemeContext\";\nconst TERRACOTTA = ACCENT;\n\ninterface ExcelViewerProps {\n url?: string;\n base64?: string;\n onLoadSuccess?: (sheetNames: string[]) => void;\n}\n\nexport function ExcelViewer({ url, base64, onLoadSuccess }: ExcelViewerProps) {\n const { BORDER, MUTED, PAPER, SURFACE } = useTheme();\n const [sheetNames, setSheetNames] = useState<string[]>([]);\n const [activeSheet, setActiveSheet] = useState(0);\n const [data, setData] = useState<string[][]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const wbRef = useRef<XLSX.WorkBook | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const loadFromBuffer = (buf: ArrayBuffer) => {\n if (cancelled) return;\n const wb = XLSX.read(buf, { type: \"array\" });\n wbRef.current = wb;\n setSheetNames(wb.SheetNames);\n onLoadSuccess?.(wb.SheetNames);\n const rows = XLSX.utils.sheet_to_json<string[]>(wb.Sheets[wb.SheetNames[0]], { header: 1 });\n setData(rows);\n setActiveSheet(0);\n setLoading(false);\n };\n\n if (base64) {\n try {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n loadFromBuffer(bytes.buffer);\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : \"Failed to decode base64\");\n setLoading(false);\n }\n }\n return () => { cancelled = true; };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => { cancelled = true; };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.arrayBuffer();\n })\n .then((buf) => {\n loadFromBuffer(buf);\n })\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => { cancelled = true; };\n }, [url, base64, onLoadSuccess]);\n\n const switchSheet = (idx: number) => {\n if (!wbRef.current) return;\n setActiveSheet(idx);\n const rows = XLSX.utils.sheet_to_json<string[]>(wbRef.current.Sheets[wbRef.current.SheetNames[idx]], { header: 1 });\n setData(rows);\n };\n\n useEffect(() => {\n if (sheetNames.length <= 1) return;\n const handler = (e: KeyboardEvent) => {\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\") return;\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n setActiveSheet((prev) => {\n const next = Math.max(0, prev - 1);\n if (next !== prev && wbRef.current) {\n const rows = XLSX.utils.sheet_to_json<string[]>(wbRef.current.Sheets[wbRef.current.SheetNames[next]], { header: 1 });\n setData(rows);\n }\n return next;\n });\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n setActiveSheet((prev) => {\n const next = Math.min(sheetNames.length - 1, prev + 1);\n if (next !== prev && wbRef.current) {\n const rows = XLSX.utils.sheet_to_json<string[]>(wbRef.current.Sheets[wbRef.current.SheetNames[next]], { header: 1 });\n setData(rows);\n }\n return next;\n });\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [sheetNames.length]);\n\n if (loading) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"200px\", color: MUTED, fontSize: \"13px\" }}>\n Loading spreadsheet...\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"120px\", color: \"#dc2626\", fontSize: \"13px\" }}>\n {error}\n </div>\n );\n }\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {sheetNames.length > 1 && (\n <div style={{ display: \"flex\", gap: \"0\", overflowX: \"auto\", borderBottom: `1px solid ${BORDER}` }}>\n {sheetNames.map((name, i) => (\n <button\n key={name}\n onClick={() => switchSheet(i)}\n style={{\n padding: \"6px 14px\", border: \"none\", cursor: \"pointer\", fontSize: \"12px\", fontWeight: 600,\n background: i === activeSheet ? SURFACE : PAPER,\n color: i === activeSheet ? TERRACOTTA : MUTED,\n borderBottom: i === activeSheet ? `2px solid ${TERRACOTTA}` : \"2px solid transparent\",\n whiteSpace: \"nowrap\",\n }}\n >\n {name}\n </button>\n ))}\n </div>\n )}\n\n <div style={{ overflow: \"auto\", maxHeight: \"500px\" }}>\n <table style={{ width: \"100%\", borderCollapse: \"collapse\", fontSize: \"12px\" }}>\n <tbody>\n {data.map((row, ri) => (\n <tr key={ri}>\n {(row as (string | number | boolean | null | undefined)[]).map((cell, ci) => {\n const isHeader = ri === 0 || (ri === 2 && data[0]?.[0] && !data[1]?.[0]);\n const Tag = isHeader ? \"th\" : \"td\";\n return (\n <Tag\n key={ci}\n style={{\n padding: \"6px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n textAlign: typeof cell === \"number\" ? \"right\" : \"left\",\n fontWeight: isHeader ? 600 : 400,\n color: isHeader ? \"var(--foreground)\" : MUTED,\n background: isHeader ? PAPER : SURFACE,\n whiteSpace: \"nowrap\",\n fontFamily: typeof cell === \"number\" ? \"var(--font-mono, monospace)\" : \"var(--font-sans)\",\n }}\n >\n {cell != null ? String(cell) : \"\"}\n </Tag>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","/** Shared byte/text decode helpers for the preview viewers.\n *\n * Preview sources arrive either as a public `url` (download-card path) or as\n * base64 bytes (the authed harness path, where a blob is fetched then encoded).\n * PDF/Excel/Docx viewers consume base64 directly; CSV/text viewers need a\n * decoded UTF-8 string.\n */\n\n/** Encode a Blob to a bare base64 string (no data: prefix). */\nexport async function blobToBase64(blob: Blob): Promise<string> {\n const buf = await blob.arrayBuffer();\n const bytes = new Uint8Array(buf);\n let binary = \"\";\n const chunk = 0x8000; // avoid arg-count limits on String.fromCharCode\n for (let i = 0; i < bytes.length; i += chunk) {\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\n }\n return btoa(binary);\n}\n\n/** Decode a bare base64 string to a UTF-8 text string. */\nexport function base64ToText(base64: string): string {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return new TextDecoder(\"utf-8\").decode(bytes);\n}\n\n/** Decode a bare base64 string to an ArrayBuffer (for docx/mammoth). */\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes.buffer;\n}\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport Papa from \"papaparse\";\nimport { useTheme } from \"../ThemeContext\";\nimport { base64ToText } from \"./decode\";\n\ninterface CsvViewerProps {\n url?: string;\n base64?: string;\n /** Delimiter hint; auto-detected when omitted. */\n delimiter?: string;\n /** Cap rendered rows (peek mode). Omit for all. */\n maxRows?: number;\n}\n\n/** CSV/TSV table preview via papaparse. Renders header + body with the same\n * muted styling as the Excel viewer. */\nexport function CsvViewer({ url, base64, delimiter, maxRows }: CsvViewerProps) {\n const { BORDER, MUTED, PAPER } = useTheme();\n const [rows, setRows] = useState<string[][]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const parse = (text: string) => {\n if (cancelled) return;\n const out = Papa.parse<string[]>(text, {\n delimiter: delimiter || \"\",\n skipEmptyLines: true,\n });\n setRows((out.data as string[][]) || []);\n setLoading(false);\n };\n\n if (base64) {\n try {\n parse(base64ToText(base64));\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : \"Failed to decode CSV\");\n setLoading(false);\n }\n }\n return () => {\n cancelled = true;\n };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.text();\n })\n .then(parse)\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [url, base64, delimiter]);\n\n if (loading) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading CSV…\n </div>\n );\n }\n if (error) {\n return (\n <div style={{ padding: \"24px\", color: \"#dc2626\", fontSize: \"13px\", textAlign: \"center\" }}>\n {error}\n </div>\n );\n }\n if (!rows.length) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Empty file\n </div>\n );\n }\n\n const [header, ...body] = rows;\n const shown = maxRows != null ? body.slice(0, maxRows) : body;\n const isNum = (v: string) => v !== \"\" && !isNaN(Number(v));\n\n return (\n <div style={{ overflow: \"auto\", width: \"100%\" }}>\n <table style={{ borderCollapse: \"collapse\", width: \"100%\", fontSize: \"12px\" }}>\n <thead>\n <tr>\n {header.map((h, i) => (\n <th\n key={i}\n style={{\n position: \"sticky\",\n top: 0,\n textAlign: \"left\",\n padding: \"6px 10px\",\n background: PAPER,\n color: \"var(--foreground)\",\n fontWeight: 600,\n borderBottom: `1px solid ${BORDER}`,\n whiteSpace: \"nowrap\",\n }}\n >\n {h}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {shown.map((row, ri) => (\n <tr key={ri}>\n {header.map((_, ci) => {\n const cell = row[ci] ?? \"\";\n return (\n <td\n key={ci}\n style={{\n padding: \"5px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n color: MUTED,\n textAlign: isNum(cell) ? \"right\" : \"left\",\n fontVariantNumeric: isNum(cell) ? \"tabular-nums\" : \"normal\",\n whiteSpace: \"nowrap\",\n }}\n >\n {cell}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n {maxRows != null && body.length > maxRows && (\n <div style={{ padding: \"6px 10px\", fontSize: \"11px\", color: MUTED }}>\n +{body.length - maxRows} more rows\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { useTheme } from \"../ThemeContext\";\nimport { Markdown } from \"../Markdown\";\nimport { base64ToText } from \"./decode\";\n\ninterface TextViewerProps {\n url?: string;\n base64?: string;\n /** Render as Markdown instead of raw monospace text. */\n markdown?: boolean;\n /** Cap rendered lines (peek mode). Omit for all. */\n maxLines?: number;\n}\n\n/** Plain-text / Markdown preview. `.txt`/`.log` render as whitespace-preserving\n * monospace; `.md` renders via the shared dependency-free Markdown component. */\nexport function TextViewer({ url, base64, markdown = false, maxLines }: TextViewerProps) {\n const { MUTED } = useTheme();\n const [text, setText] = useState<string>(\"\");\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n if (base64) {\n try {\n if (!cancelled) {\n setText(base64ToText(base64));\n setLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : \"Failed to decode text\");\n setLoading(false);\n }\n }\n return () => {\n cancelled = true;\n };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.text();\n })\n .then((t) => {\n if (cancelled) return;\n setText(t);\n setLoading(false);\n })\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [url, base64]);\n\n if (loading) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading…\n </div>\n );\n }\n if (error) {\n return (\n <div style={{ padding: \"24px\", color: \"#dc2626\", fontSize: \"13px\", textAlign: \"center\" }}>\n {error}\n </div>\n );\n }\n\n const shown =\n maxLines != null ? text.split(\"\\n\").slice(0, maxLines).join(\"\\n\") : text;\n const clipped = maxLines != null && text.split(\"\\n\").length > maxLines;\n\n if (markdown) {\n return (\n <div style={{ padding: \"14px 16px\", fontSize: \"13px\", lineHeight: 1.6 }}>\n <Markdown content={shown} />\n {clipped && <div style={{ color: MUTED, fontSize: \"11px\", marginTop: \"6px\" }}>…</div>}\n </div>\n );\n }\n\n return (\n <pre\n style={{\n margin: 0,\n padding: \"14px 16px\",\n fontSize: \"12px\",\n lineHeight: 1.5,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n color: \"var(--foreground)\",\n whiteSpace: \"pre\",\n overflow: \"auto\",\n width: \"100%\",\n boxSizing: \"border-box\",\n }}\n >\n {shown}\n {clipped ? \"\\n…\" : \"\"}\n </pre>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport * as mammoth from \"mammoth\";\nimport { useTheme } from \"../ThemeContext\";\nimport { base64ToArrayBuffer } from \"./decode\";\n\ninterface DocxViewerProps {\n url?: string;\n base64?: string;\n}\n\n/** Strip anything script-like from mammoth output. Mammoth only emits a small\n * tag set (p, h1-6, ul/ol/li, table, strong/em, a, img-as-dataURI), but we\n * defensively drop <script>/<style> and on* handlers before injecting. */\nfunction sanitize(html: string): string {\n return html\n .replace(/<\\s*(script|style|iframe|object|embed)[\\s\\S]*?<\\/\\s*\\1\\s*>/gi, \"\")\n .replace(/\\son\\w+\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)/gi, \"\")\n .replace(/javascript:/gi, \"\");\n}\n\n/** DOCX preview via mammoth (docx → HTML). Used for inline peek + modal. */\nexport function DocxViewer({ url, base64 }: DocxViewerProps) {\n const { MUTED, BORDER, SURFACE } = useTheme();\n const [html, setHtml] = useState<string>(\"\");\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const convert = (arrayBuffer: ArrayBuffer) => {\n mammoth\n .convertToHtml({ arrayBuffer })\n .then((res: { value: string }) => {\n if (cancelled) return;\n setHtml(sanitize(res.value || \"\"));\n setLoading(false);\n })\n .catch((e: unknown) => {\n if (cancelled) return;\n setError(e instanceof Error ? e.message : \"Failed to render DOCX\");\n setLoading(false);\n });\n };\n\n try {\n if (base64) {\n convert(base64ToArrayBuffer(base64));\n return () => {\n cancelled = true;\n };\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to decode DOCX\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.arrayBuffer();\n })\n .then(convert)\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [url, base64]);\n\n if (loading) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading document…\n </div>\n );\n }\n if (error) {\n return (\n <div style={{ padding: \"24px\", color: \"#dc2626\", fontSize: \"13px\", textAlign: \"center\" }}>\n {error}\n </div>\n );\n }\n\n return (\n <div\n style={{\n padding: \"18px 22px\",\n fontSize: \"13px\",\n lineHeight: 1.6,\n color: \"var(--foreground)\",\n maxWidth: \"720px\",\n margin: \"0 auto\",\n borderLeft: `1px solid ${BORDER}`,\n borderRight: `1px solid ${BORDER}`,\n background: SURFACE,\n }}\n // mammoth output sanitized above\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useTheme } from \"./ThemeContext\";\n\ninterface ColumnSettingsPanelProps {\n columns: { key: string; label: string }[];\n hidden: Set<string>;\n onToggle: (key: string) => void;\n onShowAll: () => void;\n onHideAll: () => void;\n}\n\nexport function ColumnSettingsPanel({ columns, hidden, onToggle, onShowAll, onHideAll }: ColumnSettingsPanelProps) {\n const { BORDER, MUTED, ACCENT } = useTheme();\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\", minWidth: \"180px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", paddingBottom: \"4px\", borderBottom: `1px solid ${BORDER}` }}>\n <button\n onClick={onShowAll}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: ACCENT, fontWeight: 500, padding: 0 }}\n >\n Show all\n </button>\n <button\n onClick={onHideAll}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: MUTED, fontWeight: 500, padding: 0 }}\n >\n Hide all\n </button>\n </div>\n {columns.map((col) => (\n <label\n key={col.key}\n style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\", fontSize: \"12px\", color: \"var(--foreground)\" }}\n >\n <input\n type=\"checkbox\"\n checked={!hidden.has(col.key)}\n onChange={() => onToggle(col.key)}\n style={{ accentColor: ACCENT, width: \"14px\", height: \"14px\", margin: 0, cursor: \"pointer\" }}\n />\n {col.label}\n </label>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { toPng } from \"html-to-image\";\nimport { ColumnSettingsPanel } from \"./ColumnSettingsPanel\";\nimport { useTheme } from \"./ThemeContext\";\n\nconst DOT_COLOR = \"#aaaaaa\";\nconst DOT_HOVER = \"#555555\";\n\ninterface ColumnConfig {\n columns: { key: string; label: string }[];\n hidden: Set<string>;\n onToggle: (key: string) => void;\n onShowAll: () => void;\n onHideAll: () => void;\n}\n\ninterface ComponentActionsProps {\n children: React.ReactNode;\n onDownloadCSV?: () => void;\n columnConfig?: ColumnConfig;\n filename?: string;\n}\n\ntype MenuView = \"main\" | \"columns\";\n\nexport function ComponentActions({ children, onDownloadCSV, columnConfig, filename = \"component\" }: ComponentActionsProps) {\n const { BORDER, MUTED, SURFACE, SURFACE_MUTED } = useTheme();\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<MenuView>(\"main\");\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const btnRef = useRef<HTMLButtonElement>(null);\n\n const close = useCallback(() => {\n setOpen(false);\n setView(\"main\");\n }, []);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current?.contains(e.target as Node)) return;\n if (btnRef.current?.contains(e.target as Node)) return;\n close();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, close]);\n\n const handleDownloadPNG = useCallback(async () => {\n if (!contentRef.current) return;\n try {\n const url = await toPng(contentRef.current, { backgroundColor: \"white\", pixelRatio: 2 });\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${filename}.png`;\n a.click();\n } catch {\n // silent fail\n }\n close();\n }, [filename, close]);\n\n const handleCSV = useCallback(() => {\n onDownloadCSV?.();\n close();\n }, [onDownloadCSV, close]);\n\n return (\n <div style={{ width: \"100%\", display: \"flex\", flexDirection: \"column\" }}>\n <div ref={contentRef} style={{ width: \"100%\" }}>\n {children}\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", marginTop: \"4px\", position: \"relative\", zIndex: 10, flexShrink: 0 }}>\n <button\n ref={btnRef}\n onClick={() => { setOpen((o) => !o); setView(\"main\"); }}\n aria-label=\"Component actions\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px 8px\",\n display: \"flex\",\n gap: \"3px\",\n alignItems: \"center\",\n borderRadius: \"6px\",\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = SURFACE_MUTED;\n e.currentTarget.querySelectorAll<SVGCircleElement>(\"circle\").forEach((c) => (c.style.fill = DOT_HOVER));\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"none\";\n e.currentTarget.querySelectorAll<SVGCircleElement>(\"circle\").forEach((c) => (c.style.fill = DOT_COLOR));\n }}\n >\n <svg width=\"20\" height=\"6\" viewBox=\"0 0 20 6\">\n <circle cx=\"3\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n <circle cx=\"10\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n <circle cx=\"17\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n </svg>\n </button>\n\n {open && (\n <div\n ref={menuRef}\n style={{\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"4px\",\n background: SURFACE,\n border: `1px solid ${BORDER}`,\n borderRadius: \"0.75rem\",\n boxShadow: \"0 4px 12px rgba(0,0,0,0.06)\",\n zIndex: 50,\n padding: view === \"columns\" ? \"10px\" : \"4px\",\n minWidth: view === \"columns\" ? \"200px\" : \"160px\",\n }}\n >\n {view === \"main\" ? (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {columnConfig && (\n <MenuButton label=\"Customize columns\" onClick={() => setView(\"columns\")} />\n )}\n {onDownloadCSV && (\n <MenuButton label=\"Download CSV\" onClick={handleCSV} />\n )}\n <MenuButton label=\"Download PNG\" onClick={handleDownloadPNG} />\n </div>\n ) : (\n <div>\n <button\n onClick={() => setView(\"main\")}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: MUTED, marginBottom: \"6px\", padding: 0 }}\n >\n ← Back\n </button>\n <ColumnSettingsPanel\n columns={columnConfig!.columns}\n hidden={columnConfig!.hidden}\n onToggle={columnConfig!.onToggle}\n onShowAll={columnConfig!.onShowAll}\n onHideAll={columnConfig!.onHideAll}\n />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction MenuButton({ label, onClick }: { label: string; onClick: () => void }) {\n const { SURFACE_MUTED } = useTheme();\n return (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"8px 12px\",\n fontSize: \"12.5px\",\n color: \"var(--foreground)\",\n textAlign: \"left\",\n borderRadius: \"8px\",\n transition: \"background 0.15s\",\n whiteSpace: \"nowrap\",\n }}\n onMouseEnter={(e) => (e.currentTarget.style.background = SURFACE_MUTED)}\n onMouseLeave={(e) => (e.currentTarget.style.background = \"none\")}\n >\n {label}\n </button>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback } from \"react\";\nimport { useTheme } from \"./ThemeContext\";\nimport { Markdown } from \"./Markdown\";\nimport { fileTypeMeta, formatExpiry, isExpirySoon, previewKindFor } from \"./fileType\";\nimport { PreviewHost, type PreviewSource } from \"./viewers/PreviewHost\";\nimport { PreviewModal } from \"./PreviewModal\";\nimport { blobToBase64 } from \"./viewers/decode\";\n\nexport interface FileCardProps {\n filename: string;\n size?: string;\n fileType?: string;\n expiresAt?: string;\n description?: string;\n /** Download as a link (file has a public URL). */\n downloadUrl?: string;\n /** Download via callback (e.g. authed blob fetch); used when no public URL. */\n onDownload?: () => void;\n downloadBusy?: boolean;\n downloadLabel?: string;\n /** Secondary action(s) rendered after Download — e.g. \"Save to Drive\". */\n actions?: React.ReactNode;\n /** Compact row variant for multi-file lists. */\n dense?: boolean;\n /** Public URL the preview viewers can fetch directly (download-card path). */\n previewUrl?: string;\n /** Authed byte source for preview when there's no public URL (harness path).\n * Called on first Preview click; the blob is encoded to base64 and cached. */\n fetchPreviewBlob?: () => Promise<Blob>;\n /** Force-disable the Preview affordance even when the type is previewable. */\n previewDisabled?: boolean;\n}\n\n/**\n * Presentational file card: type-glyph tile + name + meta (TYPE · size · expires)\n * + optional description, with a primary Download and an optional actions slot.\n * When a preview source (previewUrl or fetchPreviewBlob) is supplied and the\n * file type is previewable, it also offers an inline peek + a full-screen modal\n * preview. The host wires Download/preview sources; no data fetching beyond the\n * lazy preview-bytes fetch.\n */\nexport function FileCard({\n filename,\n size,\n fileType,\n expiresAt,\n description,\n downloadUrl,\n onDownload,\n downloadBusy = false,\n downloadLabel = \"Download\",\n actions,\n dense = false,\n previewUrl,\n fetchPreviewBlob,\n previewDisabled = false,\n}: FileCardProps) {\n const { BORDER, MUTED, ACCENT, SURFACE, SURFACE_MUTED, SHADOW } = useTheme();\n const [cardHover, setCardHover] = useState(false);\n const [btnHover, setBtnHover] = useState(false);\n const [pvHover, setPvHover] = useState(false);\n\n // Preview state.\n const previewKind = previewKindFor(fileType, filename);\n const canPreview =\n !previewDisabled && previewKind !== null && (!!previewUrl || !!fetchPreviewBlob);\n const [peekOpen, setPeekOpen] = useState(false);\n const [modalOpen, setModalOpen] = useState(false);\n const [source, setSource] = useState<PreviewSource | null>(previewUrl ? { url: previewUrl } : null);\n const [pvLoading, setPvLoading] = useState(false);\n const [pvError, setPvError] = useState<string | null>(null);\n\n // Resolve preview bytes once: public url is direct; otherwise fetch the blob\n // and encode to base64, caching it for both peek and modal.\n const ensureSource = useCallback(async (): Promise<PreviewSource | null> => {\n if (source) return source;\n if (previewUrl) {\n const s = { url: previewUrl };\n setSource(s);\n return s;\n }\n if (!fetchPreviewBlob) return null;\n setPvLoading(true);\n setPvError(null);\n try {\n const blob = await fetchPreviewBlob();\n const s = { base64: await blobToBase64(blob) };\n setSource(s);\n return s;\n } catch (e) {\n setPvError(e instanceof Error ? e.message : \"Failed to load preview\");\n return null;\n } finally {\n setPvLoading(false);\n }\n }, [source, previewUrl, fetchPreviewBlob]);\n\n const togglePeek = useCallback(async () => {\n if (peekOpen) {\n setPeekOpen(false);\n return;\n }\n setPeekOpen(true);\n await ensureSource();\n }, [peekOpen, ensureSource]);\n\n const openModal = useCallback(async () => {\n const s = await ensureSource();\n if (s) setModalOpen(true);\n }, [ensureSource]);\n\n const ftype = fileTypeMeta(fileType, filename);\n const tileSize = dense ? 28 : 40;\n const tileRadius = dense ? 8 : 11;\n const expirySoon = expiresAt ? isExpirySoon(expiresAt) : false;\n\n const metaTokens: React.ReactNode[] = [];\n if (ftype.label && ftype.label !== \"FILE\") metaTokens.push(ftype.label);\n if (size) metaTokens.push(size);\n\n // Neutral ghost (not filled-accent): theme-safe across hosts and consistent\n // with the compact card. The branded/primary emphasis is left to the\n // `actions` slot (e.g. Save-to-Drive).\n const ghostBtn = (hover: boolean): React.CSSProperties => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n background: hover ? SURFACE_MUTED : SURFACE,\n color: \"var(--foreground)\",\n borderRadius: \"8px\",\n padding: dense ? \"5px 11px\" : \"7px 13px\",\n fontSize: dense ? \"11.5px\" : \"12px\",\n fontWeight: 600,\n textDecoration: \"none\",\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n cursor: \"pointer\",\n border: `1px solid ${BORDER}`,\n fontFamily: \"inherit\",\n transition: \"background 0.15s ease, border-color 0.15s ease\",\n });\n\n const downloadStyle: React.CSSProperties = {\n ...ghostBtn(btnHover),\n cursor: downloadBusy ? \"progress\" : \"pointer\",\n opacity: downloadBusy ? 0.8 : 1,\n };\n\n const downloadInner = (\n <>\n <DownloadGlyph spinning={downloadBusy} size={dense ? 13 : 14} />\n {!dense && <span>{downloadBusy ? \"Downloading…\" : downloadLabel}</span>}\n </>\n );\n\n return (\n <div\n onMouseEnter={() => setCardHover(true)}\n onMouseLeave={() => setCardHover(false)}\n style={{\n width: \"100%\",\n boxSizing: \"border-box\",\n borderRadius: \"0.875rem\",\n border: `1px solid ${BORDER}`,\n background: SURFACE,\n display: \"flex\",\n flexDirection: \"column\",\n boxShadow: cardHover\n ? \"0 2px 10px rgba(15,23,42,0.06), 0 10px 28px rgba(15,23,42,0.07)\"\n : SHADOW,\n transform: cardHover ? \"translateY(-1px)\" : \"translateY(0)\",\n transition: \"box-shadow 0.2s ease, border-color 0.2s ease, transform 0.2s ease\",\n }}\n >\n {/* Main row */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: dense ? \"11px\" : \"13px\",\n padding: dense ? \"9px 11px\" : \"12px 14px\",\n }}\n >\n {/* Type-glyph tile */}\n <div\n aria-hidden=\"true\"\n style={{\n width: tileSize,\n height: tileSize,\n borderRadius: tileRadius,\n flexShrink: 0,\n display: \"grid\",\n placeItems: \"center\",\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n fontSize: dense ? \"9.5px\" : \"10.5px\",\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n color: ftype.fg || ACCENT,\n background: ftype.bg || \"var(--ag-accent-tint-canvas, rgba(99,102,241,0.06))\",\n boxShadow: \"inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n >\n {ftype.label}\n </div>\n\n {/* Name + meta + description */}\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: \"2px\" }}>\n <span\n style={{\n fontSize: dense ? \"13px\" : \"13.5px\",\n fontWeight: 600,\n color: \"var(--foreground)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {filename}\n </span>\n\n {(metaTokens.length > 0 || expiresAt) && (\n <span\n style={{\n fontSize: \"11.5px\",\n color: MUTED,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n whiteSpace: \"nowrap\",\n }}\n >\n {metaTokens.map((t, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span style={{ color: MUTED }}>·</span>}\n <span>{t}</span>\n </React.Fragment>\n ))}\n {expiresAt && (\n <>\n {metaTokens.length > 0 && <span style={{ color: MUTED }}>·</span>}\n <span style={{ color: expirySoon ? \"#b45309\" : MUTED, fontWeight: expirySoon ? 600 : 400 }}>\n Expires {formatExpiry(expiresAt)}\n </span>\n </>\n )}\n </span>\n )}\n\n {description && !dense && (\n <span style={{ fontSize: \"12px\", color: MUTED, lineHeight: 1.4 }}>\n <Markdown inline content={description} />\n </span>\n )}\n </div>\n\n {/* Actions: Preview + Download (primary) + slot */}\n {canPreview && (\n <button\n type=\"button\"\n onClick={togglePeek}\n aria-expanded={peekOpen}\n onMouseEnter={() => setPvHover(true)}\n onMouseLeave={() => setPvHover(false)}\n style={ghostBtn(pvHover)}\n >\n <EyeGlyph size={dense ? 13 : 14} />\n {!dense && <span>Preview</span>}\n {!dense && <Chevron open={peekOpen} />}\n </button>\n )}\n {downloadUrl ? (\n <a\n href={downloadUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onMouseEnter={() => setBtnHover(true)}\n onMouseLeave={() => setBtnHover(false)}\n style={downloadStyle}\n >\n {downloadInner}\n </a>\n ) : onDownload ? (\n <button\n type=\"button\"\n onClick={onDownload}\n disabled={downloadBusy}\n aria-busy={downloadBusy || undefined}\n onMouseEnter={() => setBtnHover(true)}\n onMouseLeave={() => setBtnHover(false)}\n style={downloadStyle}\n >\n {downloadInner}\n </button>\n ) : null}\n {actions}\n </div>\n\n {/* Inline peek */}\n {canPreview && peekOpen && previewKind && (\n <div style={{ borderTop: `1px solid ${BORDER}` }}>\n {pvError ? (\n <div style={{ padding: \"16px\", fontSize: \"12.5px\", color: \"#dc2626\" }}>{pvError}</div>\n ) : pvLoading || !source ? (\n <div style={{ padding: \"20px\", fontSize: \"12.5px\", color: MUTED, textAlign: \"center\" }}>\n Loading preview…\n </div>\n ) : (\n <>\n <div style={{ position: \"relative\", maxHeight: \"280px\", overflow: \"hidden\" }}>\n <PreviewHost kind={previewKind} source={source} mode=\"peek\" />\n {/* Fade-out teaser */}\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n height: \"56px\",\n background: `linear-gradient(to bottom, transparent, ${SURFACE})`,\n pointerEvents: \"none\",\n }}\n />\n </div>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"9px\",\n borderTop: `1px solid ${BORDER}`,\n }}\n >\n <button type=\"button\" onClick={openModal} style={ghostBtn(false)}>\n Open full preview\n </button>\n </div>\n </>\n )}\n </div>\n )}\n\n {canPreview && previewKind && source && (\n <PreviewModal\n open={modalOpen}\n onClose={() => setModalOpen(false)}\n filename={filename}\n fileType={fileType}\n kind={previewKind}\n source={source}\n downloadUrl={downloadUrl}\n onDownload={onDownload}\n />\n )}\n </div>\n );\n}\n\n/** Inline download/spinner glyph (no icon dependency — works standalone). */\nfunction DownloadGlyph({ spinning, size }: { spinning: boolean; size: number }) {\n if (spinning) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ animation: \"fileCardSpin 720ms linear infinite\" }}\n >\n <style>{\"@keyframes fileCardSpin{to{transform:rotate(360deg)}}\"}</style>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.3\" strokeWidth=\"2\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 3v12m0 0 4-4m-4 4-4-4M5 21h14\" stroke=\"currentColor\" strokeWidth=\"2\"\n strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/** Eye glyph for the Preview affordance. */\nfunction EyeGlyph({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"currentColor\" strokeWidth=\"2\"\n strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n}\n\nfunction Chevron({ open }: { open: boolean }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ transition: \"transform 0.15s ease\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}\n >\n <path d=\"m6 9 6 6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","// File-type identity for FileCard: an extension chip + a semantic family color.\n// The chip is the recognizable signal vs one generic icon. Colors are\n// accent-independent and theme-adaptive (translucent SEMANTIC tints, so the chip\n// reads on both light and dark surfaces under any theme accent).\nimport { SEMANTIC } from \"./theme\";\n\nexport interface FileTypeMeta {\n label: string; // e.g. \"CSV\", \"PDF\" — short, uppercased\n fg: string; // chip foreground (family color), \"\" → fall back to theme accent\n bg: string; // chip background tint, \"\" → fall back to theme accent tint\n}\n\nconst FAMILIES: { exts: string[]; fg: string; bg: string }[] = [\n { exts: [\"csv\", \"tsv\", \"xls\", \"xlsx\", \"numbers\"], fg: SEMANTIC.success.color, bg: SEMANTIC.success.bg },\n { exts: [\"pdf\"], fg: SEMANTIC.error.color, bg: SEMANTIC.error.bg },\n { exts: [\"doc\", \"docx\", \"txt\", \"md\", \"rtf\", \"pages\"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },\n { exts: [\"json\", \"yaml\", \"yml\", \"xml\", \"toml\"], fg: SEMANTIC.purple.color, bg: SEMANTIC.purple.bg },\n { exts: [\"zip\", \"tar\", \"gz\", \"rar\", \"7z\"], fg: SEMANTIC.warning.color, bg: SEMANTIC.warning.bg },\n { exts: [\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\", \"bmp\"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },\n];\n\n/** Resolve a type chip from an explicit fileType token or the filename ext.\n * MIME values (containing \"/\") are ignored in favor of the filename. */\nexport function fileTypeMeta(fileType?: string, filename?: string): FileTypeMeta {\n const token =\n fileType && !fileType.includes(\"/\")\n ? fileType\n : (filename || \"\").split(\".\").pop() || \"\";\n const ext = token.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n if (!ext) return { label: \"FILE\", fg: \"\", bg: \"\" };\n const fam = FAMILIES.find((f) => f.exts.includes(ext));\n return {\n label: ext.slice(0, 4).toUpperCase(),\n fg: fam ? fam.fg : \"\",\n bg: fam ? fam.bg : \"\",\n };\n}\n\n/** Previewable file kinds, mapped to a viewer. `null` → download-only. */\nexport type PreviewKind = \"pdf\" | \"excel\" | \"csv\" | \"markdown\" | \"text\" | \"docx\";\n\nconst PREVIEW_EXTS: Record<string, PreviewKind> = {\n pdf: \"pdf\",\n xlsx: \"excel\",\n xls: \"excel\",\n csv: \"csv\",\n tsv: \"csv\",\n md: \"markdown\",\n markdown: \"markdown\",\n txt: \"text\",\n log: \"text\",\n text: \"text\",\n docx: \"docx\",\n};\n\n/** Normalize a fileType token or filename to a lowercase extension. MIME\n * values (containing \"/\") are mapped via a small table, else fall back to the\n * filename extension. */\nfunction extOf(fileType?: string, filename?: string): string {\n if (fileType && fileType.includes(\"/\")) {\n const mime = fileType.toLowerCase();\n if (mime.includes(\"pdf\")) return \"pdf\";\n if (mime.includes(\"spreadsheet\") || mime.includes(\"excel\")) return \"xlsx\";\n if (mime.includes(\"csv\")) return \"csv\";\n if (mime.includes(\"markdown\")) return \"md\";\n if (mime.includes(\"wordprocessing\") || mime.includes(\"msword\")) return \"docx\";\n if (mime.startsWith(\"text/\")) return \"txt\";\n // fall through to filename\n } else if (fileType) {\n const t = fileType.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n if (t) return t;\n }\n return (filename || \"\").split(\".\").pop()?.toLowerCase().replace(/[^a-z0-9]/g, \"\") || \"\";\n}\n\n/** Resolve the preview viewer for a file, or `null` when not previewable. */\nexport function previewKindFor(fileType?: string, filename?: string): PreviewKind | null {\n return PREVIEW_EXTS[extOf(fileType, filename)] ?? null;\n}\n\n/** True when the file can be previewed inline (has a matching viewer). */\nexport function isPreviewable(fileType?: string, filename?: string): boolean {\n return previewKindFor(fileType, filename) !== null;\n}\n\n/** Compact human expiry: \"Today\" / \"in 3 days\" / \"Jan 5, 2026\" / \"Expired\". */\nexport function formatExpiry(expiresAt: string): string {\n const date = new Date(expiresAt);\n if (isNaN(date.getTime())) return expiresAt;\n const diffDays = Math.round((date.getTime() - Date.now()) / (1000 * 60 * 60 * 24));\n if (diffDays < 0) return \"Expired\";\n if (diffDays === 0) return \"Today\";\n if (diffDays === 1) return \"Tomorrow\";\n if (diffDays < 7) return `in ${diffDays} days`;\n return date.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\n/** True when an expiry is near (≤2 days) or past — used to tint the chip. */\nexport function isExpirySoon(expiresAt: string): boolean {\n const date = new Date(expiresAt);\n if (isNaN(date.getTime())) return false;\n return date.getTime() - Date.now() < 2 * 24 * 60 * 60 * 1000;\n}\n","\"use client\";\n\nimport React, { Suspense, lazy } from \"react\";\nimport { useTheme } from \"../ThemeContext\";\nimport type { PreviewKind } from \"../fileType\";\n\n// Heavy / optional-peer viewers are lazy-loaded so react-pdf, xlsx, papaparse\n// and mammoth stay out of the base bundle and load only on first preview.\nconst PdfViewer = lazy(() =>\n import(\"../../composites/document-preview/PdfViewer\").then((m) => ({ default: m.PdfViewer }))\n);\nconst ExcelViewer = lazy(() =>\n import(\"../../composites/document-preview/ExcelViewer\").then((m) => ({ default: m.ExcelViewer }))\n);\nconst CsvViewer = lazy(() => import(\"./CsvViewer\").then((m) => ({ default: m.CsvViewer })));\nconst TextViewer = lazy(() => import(\"./TextViewer\").then((m) => ({ default: m.TextViewer })));\nconst DocxViewer = lazy(() => import(\"./DocxViewer\").then((m) => ({ default: m.DocxViewer })));\n\nexport interface PreviewSource {\n url?: string;\n base64?: string;\n}\n\ninterface PreviewHostProps {\n kind: PreviewKind;\n source: PreviewSource;\n /** \"peek\" caps rows/lines for the inline teaser; \"full\" renders everything. */\n mode?: \"peek\" | \"full\";\n}\n\nconst PEEK_ROWS = 20;\nconst PEEK_LINES = 40;\n\n/** Dispatch to the viewer for a preview kind, lazy-loading it. Pure renderer —\n * the caller supplies the bytes (url or base64) and frames it (peek clamp /\n * modal). Crash-hardened: an unknown kind renders nothing. */\nexport function PreviewHost({ kind, source, mode = \"full\" }: PreviewHostProps) {\n const { MUTED } = useTheme();\n const peek = mode === \"peek\";\n\n const fallback = (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading preview…\n </div>\n );\n\n let viewer: React.ReactNode = null;\n switch (kind) {\n case \"pdf\":\n viewer = <PdfViewer url={source.url} base64={source.base64} />;\n break;\n case \"excel\":\n viewer = <ExcelViewer url={source.url} base64={source.base64} />;\n break;\n case \"csv\":\n viewer = <CsvViewer url={source.url} base64={source.base64} maxRows={peek ? PEEK_ROWS : undefined} />;\n break;\n case \"markdown\":\n viewer = <TextViewer url={source.url} base64={source.base64} markdown maxLines={peek ? PEEK_LINES : undefined} />;\n break;\n case \"text\":\n viewer = <TextViewer url={source.url} base64={source.base64} maxLines={peek ? PEEK_LINES : undefined} />;\n break;\n case \"docx\":\n viewer = <DocxViewer url={source.url} base64={source.base64} />;\n break;\n default:\n return null;\n }\n\n return <Suspense fallback={fallback}>{viewer}</Suspense>;\n}\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTheme } from \"./ThemeContext\";\nimport { PreviewHost, type PreviewSource } from \"./viewers/PreviewHost\";\nimport { fileTypeMeta } from \"./fileType\";\nimport type { PreviewKind } from \"./fileType\";\n\ninterface PreviewModalProps {\n open: boolean;\n onClose: () => void;\n filename: string;\n fileType?: string;\n kind: PreviewKind;\n source: PreviewSource;\n /** Optional Download affordance in the modal footer. */\n downloadUrl?: string;\n onDownload?: () => void;\n}\n\n/** Fullscreen preview overlay (portal). ESC + backdrop close. Reuses the same\n * PreviewHost viewers as the inline peek, unclamped. */\nexport function PreviewModal({\n open,\n onClose,\n filename,\n fileType,\n kind,\n source,\n downloadUrl,\n onDownload,\n}: PreviewModalProps) {\n const { BORDER, MUTED, ACCENT, SURFACE, FOREGROUND, SCRIM } = useTheme();\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n window.addEventListener(\"keydown\", onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n document.body.style.overflow = prev;\n };\n }, [open, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n const ftype = fileTypeMeta(fileType, filename);\n\n return createPortal(\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={`Preview ${filename}`}\n onClick={onClose}\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 2147483000,\n background: SCRIM,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"4vh 4vw\",\n backdropFilter: \"blur(2px)\",\n // The portal mounts on document.body, escaping any ancestor that\n // overrides `--foreground`. Re-pin it from the theme so text inside the\n // modal (header, footer, ExcelViewer/PdfViewer) follows dark/light.\n [\"--foreground\" as never]: FOREGROUND,\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n width: \"min(960px, 100%)\",\n height: \"min(92vh, 100%)\",\n background: SURFACE,\n borderRadius: \"0.875rem\",\n border: `1px solid ${BORDER}`,\n boxShadow: \"0 20px 60px rgba(15,23,42,0.30)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"10px\",\n padding: \"11px 14px\",\n borderBottom: `1px solid ${BORDER}`,\n flexShrink: 0,\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n fontSize: \"9.5px\",\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n padding: \"3px 7px\",\n borderRadius: \"6px\",\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n color: ftype.fg || ACCENT,\n background: ftype.bg || \"rgba(99,102,241,0.06)\",\n }}\n >\n {ftype.label}\n </span>\n <span\n style={{\n flex: 1,\n minWidth: 0,\n fontSize: \"13.5px\",\n fontWeight: 600,\n color: \"var(--foreground)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {filename}\n </span>\n {(downloadUrl || onDownload) &&\n (downloadUrl ? (\n <a\n href={downloadUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={footerBtn(BORDER, SURFACE)}\n >\n Download\n </a>\n ) : (\n <button type=\"button\" onClick={onDownload} style={footerBtn(BORDER, SURFACE)}>\n Download\n </button>\n ))}\n <button\n type=\"button\"\n aria-label=\"Close preview\"\n onClick={onClose}\n style={{\n border: `1px solid ${BORDER}`,\n borderRadius: \"8px\",\n background: SURFACE,\n cursor: \"pointer\",\n padding: \"5px 9px\",\n fontSize: \"13px\",\n color: MUTED,\n lineHeight: 1,\n }}\n >\n ✕\n </button>\n </div>\n\n {/* Body */}\n <div style={{ flex: 1, minHeight: 0, overflow: \"auto\", background: SURFACE }}>\n <PreviewHost kind={kind} source={source} mode=\"full\" />\n </div>\n </div>\n </div>,\n document.body\n );\n}\n\nfunction footerBtn(border: string, surface: string): React.CSSProperties {\n return {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n border: `1px solid ${border}`,\n borderRadius: \"8px\",\n background: surface,\n color: \"var(--foreground)\",\n cursor: \"pointer\",\n padding: \"5px 11px\",\n fontSize: \"12px\",\n fontWeight: 600,\n textDecoration: \"none\",\n fontFamily: \"inherit\",\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport type { SchemaPayload } from \"../../schemas\";\nimport { ComponentActions } from \"../../shared/ComponentActions\";\nimport { FileCard } from \"../../shared/FileCard\";\n\nexport function DownloadCardResolver(p: SchemaPayload<\"download-card\">) {\n const files = p.files ?? [];\n return (\n <ComponentActions filename={p.title ?? \"download-card\"}>\n <div style={{ width: \"100%\", display: \"flex\", flexDirection: \"column\", gap: \"10px\" }}>\n {p.title && (\n <p\n style={{\n fontFamily: \"var(--font-serif)\",\n fontSize: \"15px\",\n fontWeight: 400,\n color: \"var(--foreground)\",\n letterSpacing: \"-0.01em\",\n margin: 0,\n }}\n >\n {p.title}\n </p>\n )}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {files.map((file, i) => (\n <FileCard\n key={i}\n filename={file.filename}\n size={file.size}\n fileType={file.fileType}\n expiresAt={file.expiresAt}\n description={file.description}\n downloadUrl={file.url}\n previewUrl={file.url}\n previewDisabled={file.preview === false}\n dense={files.length > 1}\n />\n ))}\n </div>\n </div>\n </ComponentActions>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/theme.ts","../../../src/shared/ThemeContext.tsx","../../../src/shared/Markdown.tsx","../../../src/shared/viewers/pdfWorkerProbe.ts","../../../src/composites/document-preview/PdfViewer.tsx","../../../src/composites/document-preview/ExcelViewer.tsx","../../../src/shared/viewers/decode.ts","../../../src/shared/viewers/CsvViewer.tsx","../../../src/shared/viewers/TextViewer.tsx","../../../src/shared/viewers/DocxViewer.tsx","../../../src/shared/ColumnSettingsPanel.tsx","../../../src/shared/ComponentActions.tsx","../../../src/shared/FileCard.tsx","../../../src/shared/fileType.ts","../../../src/shared/viewers/PreviewHost.tsx","../../../src/shared/PreviewModal.tsx","../../../src/composites/download-card/resolver.tsx"],"names":["useContext","createContext","jsx","BORDER","MUTED","PAPER","jsxs","_a","Fragment","pdfjs","useState","useEffect","SURFACE","useCallback","Document","Page","useRef","XLSX","Papa","mammoth","ACCENT","SURFACE_MUTED","toPng","PdfViewer","lazy","ExcelViewer","CsvViewer","TextViewer","DocxViewer","Suspense","FOREGROUND","SCRIM","createPortal","SHADOW","React"],"mappings":"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","file":"resolver.cjs","sourcesContent":["// Theme tokens. Defaults below are the light-mode values; every token is also\n// exposed through `useTheme()` (see ThemeContext) so a consumer can override\n// them per theme (e.g. adoptwebui passes `var(--th-*)` strings for dark mode).\n//\n// IMPORTANT: components must read colors from `useTheme()` — NOT these static\n// imports — so provider overrides actually apply. The static exports remain for\n// non-React callers and as the default values.\nexport const BORDER = \"#dedede\";\nexport const BORDER_SOFT = \"#f2f2f2\"; // lighter hairline (subtle dividers, row lines)\nexport const MUTED = \"#777777\";\nexport const PAPER = \"#f6f6f6\"; // recessed panel surface\nexport const SURFACE = \"#ffffff\"; // primary card / component surface\nexport const SURFACE_MUTED = \"#fafafa\"; // zebra rows, hover fills, progress tracks\nexport const SHADOW = \"0 1px 2px rgba(0,0,0,0.04)\"; // resting card elevation\n// Primary text color. Mirrors contract.css's `--foreground` default so components\n// look identical when unthemed. Exposed as a token so portaled UI (e.g. the\n// preview modal, which mounts on document.body and escapes any ancestor that\n// overrides `--foreground`) can re-pin `--foreground` from the active theme.\nexport const FOREGROUND = \"#111111\";\n// Modal/overlay backdrop scrim. Default is a neutral dark slate; consumers can\n// pass a theme-tinted rgba so the defocus matches the active theme (e.g. warm\n// on a \"carbon\" dark theme, blue on \"midnight\") instead of always reading blue.\nexport const SCRIM = \"rgba(15,23,42,0.55)\";\nexport const ACCENT = \"#ff5000\";\nexport const ACCENT_SOFT = \"#cc4000\";\nexport const SECONDARY = \"#0364ff\";\n\n// Semantic status colors. Backgrounds are translucent tints of the hue so they\n// sit correctly on ANY surface (white in light, dark panel in dark) instead of\n// a fixed pastel fill; the text is a mid-saturated hue legible on both. Keep\n// hue == meaning (blue=info/asset, green=success/revenue, red=error/expense,\n// amber=warning/draft, purple=filed/equity).\nexport const ACCOUNT_TYPE_COLORS = {\n asset: { bg: \"rgba(37,99,235,0.12)\", color: \"#2563eb\" },\n liability: { bg: \"rgba(217,119,6,0.14)\", color: \"#d97706\" },\n equity: { bg: \"rgba(124,58,237,0.13)\", color: \"#7c3aed\" },\n revenue: { bg: \"rgba(22,163,74,0.13)\", color: \"#16a34a\" },\n expense: { bg: \"rgba(220,38,38,0.12)\", color: \"#dc2626\" },\n} as const;\n\nexport const STATUS_COLORS = {\n draft: { bg: \"rgba(217,119,6,0.14)\", color: \"#d97706\" },\n \"pending-review\": { bg: \"rgba(37,99,235,0.12)\", color: \"#2563eb\" },\n approved: { bg: \"rgba(22,163,74,0.13)\", color: \"#16a34a\" },\n filed: { bg: \"rgba(124,58,237,0.13)\", color: \"#7c3aed\" },\n} as const;\n\n// Shared semantic hue pairs for inline status badges (translucent bg + mid-hue\n// text), so components don't hardcode pastel fills that break in dark mode.\nexport const SEMANTIC = {\n success: { bg: \"rgba(22,163,74,0.13)\", color: \"#16a34a\" },\n error: { bg: \"rgba(220,38,38,0.12)\", color: \"#dc2626\" },\n warning: { bg: \"rgba(217,119,6,0.14)\", color: \"#d97706\" },\n info: { bg: \"rgba(37,99,235,0.12)\", color: \"#2563eb\" },\n purple: { bg: \"rgba(124,58,237,0.13)\", color: \"#7c3aed\" },\n neutral: { bg: \"rgba(120,120,120,0.12)\", color: \"#777777\" },\n} as const;\n\nexport const CHART_PALETTE = [\n \"#ff5000\",\n \"#0364ff\",\n \"#16a34a\",\n \"#dc2626\",\n \"#7c3aed\",\n \"#0891b2\",\n \"#f59e0b\",\n \"#6366f1\",\n \"#ec4899\",\n \"#84cc16\",\n \"#e11d48\",\n \"#0ea5e9\",\n];\n","\"use client\";\n\nimport React, { createContext, useContext, useMemo } from \"react\";\nimport {\n BORDER,\n BORDER_SOFT,\n MUTED,\n PAPER,\n SURFACE,\n SURFACE_MUTED,\n SHADOW,\n FOREGROUND,\n SCRIM,\n ACCENT,\n ACCENT_SOFT,\n SECONDARY,\n CHART_PALETTE,\n} from \"./theme\";\n\nexport interface ThemeTokens {\n BORDER: string;\n /** Lighter hairline — subtle dividers / row lines. */\n BORDER_SOFT: string;\n MUTED: string;\n /** Recessed panel surface. */\n PAPER: string;\n /** Primary card / component surface (white in light, dark panel in dark). */\n SURFACE: string;\n /** Zebra rows, hover fills, progress tracks. */\n SURFACE_MUTED: string;\n /** Resting card elevation box-shadow. */\n SHADOW: string;\n /** Primary text color. Components read text via the `--foreground` CSS var by\n * default; this token lets portaled UI (preview modal) re-pin that var from\n * the active theme. */\n FOREGROUND: string;\n /** Modal/overlay backdrop scrim (rgba). Pass a theme-tinted value so the\n * defocus matches the active theme rather than always reading blue. */\n SCRIM: string;\n ACCENT: string;\n ACCENT_SOFT: string;\n SECONDARY: string;\n CHART_PALETTE: string[];\n}\n\nexport const DEFAULT_TOKENS: ThemeTokens = {\n BORDER,\n BORDER_SOFT,\n MUTED,\n PAPER,\n SURFACE,\n SURFACE_MUTED,\n SHADOW,\n FOREGROUND,\n SCRIM,\n ACCENT,\n ACCENT_SOFT,\n SECONDARY,\n CHART_PALETTE: [...CHART_PALETTE],\n};\n\nconst GenUIThemeContext = createContext<ThemeTokens>(DEFAULT_TOKENS);\n\nexport interface GenUIThemeProviderProps {\n colors?: Partial<ThemeTokens>;\n children: React.ReactNode;\n}\n\nexport function GenUIThemeProvider({ colors, children }: GenUIThemeProviderProps) {\n const merged = useMemo(\n () => (colors ? { ...DEFAULT_TOKENS, ...colors } : DEFAULT_TOKENS),\n [colors]\n );\n return (\n <GenUIThemeContext.Provider value={merged}>\n {children}\n </GenUIThemeContext.Provider>\n );\n}\n\nexport function useTheme(): ThemeTokens {\n return useContext(GenUIThemeContext);\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useTheme } from \"./ThemeContext\";\n// ACCENT/SECONDARY are consumed by `renderInline`, a non-hook module function\n// (can't call useTheme), so they stay as static imports; BORDER/MUTED/PAPER move\n// to useTheme inside the MarkdownBlock component so dark-mode overrides apply.\nimport { ACCENT, SECONDARY, SEMANTIC } from \"./theme\";\n\n/**\n * Lightweight, dependency-free markdown renderer for prose fields.\n *\n * Inline grammar (always available): `**bold**`, `*italic*`, `` `code` ``,\n * `[text](url)` links.\n * Block grammar (default mode only): `#`–`####` headings, `- `/`* ` bullet\n * lists, `1.` numbered lists, GFM pipe tables (`| a | b |` + `|---|---|`),\n * blank-line-separated paragraphs.\n *\n * Pass `inline` for compact fields that live in tight rows/cards — it renders\n * only inline spans (no headings/lists/paragraph margins) so layout height is\n * preserved.\n *\n * Note: underscore italics (`_x_`) are intentionally NOT supported — they\n * collide with snake_case identifiers common in this domain.\n */\nexport function renderInline(text: string): React.ReactNode[] {\n const parts: React.ReactNode[] = [];\n let rest = text;\n let k = 0;\n\n const nextIndex = (needle: string): number => {\n const idx = rest.indexOf(needle);\n return idx >= 0 ? idx : Infinity;\n };\n\n while (rest.length > 0) {\n const boldIdx = nextIndex(\"**\");\n const codeIdx = nextIndex(\"`\");\n const linkIdx = nextIndex(\"[\");\n // single-star italic: ignore the `*` that belongs to a `**` run\n let italicIdx = rest.indexOf(\"*\");\n if (italicIdx === boldIdx) italicIdx = rest.indexOf(\"*\", italicIdx + 2);\n const italicIdxN = italicIdx >= 0 ? italicIdx : Infinity;\n\n const nextSpecial = Math.min(boldIdx, codeIdx, linkIdx, italicIdxN);\n\n if (nextSpecial === Infinity) {\n parts.push(<span key={k++}>{rest}</span>);\n break;\n }\n\n if (nextSpecial > 0) {\n parts.push(<span key={k++}>{rest.slice(0, nextSpecial)}</span>);\n rest = rest.slice(nextSpecial);\n }\n\n if (rest.startsWith(\"**\")) {\n const end = rest.indexOf(\"**\", 2);\n if (end > 2) {\n parts.push(\n <strong key={k++} style={{ fontWeight: 600, color: \"var(--foreground)\" }}>\n {renderInline(rest.slice(2, end))}\n </strong>\n );\n rest = rest.slice(end + 2);\n continue;\n }\n }\n\n if (rest.startsWith(\"`\")) {\n const end = rest.indexOf(\"`\", 1);\n if (end > 1) {\n parts.push(\n <code\n key={k++}\n style={{\n fontSize: \"0.9em\",\n padding: \"1px 5px\",\n borderRadius: \"4px\",\n background: SEMANTIC.neutral.bg,\n fontFamily: \"monospace\",\n color: ACCENT,\n }}\n >\n {rest.slice(1, end)}\n </code>\n );\n rest = rest.slice(end + 1);\n continue;\n }\n }\n\n if (rest.startsWith(\"[\")) {\n const closeText = rest.indexOf(\"]\");\n if (closeText > 0 && rest[closeText + 1] === \"(\") {\n const closeUrl = rest.indexOf(\")\", closeText + 2);\n if (closeUrl > closeText + 1) {\n const label = rest.slice(1, closeText);\n const url = rest.slice(closeText + 2, closeUrl);\n parts.push(\n <a\n key={k++}\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{ color: SECONDARY, textDecoration: \"none\" }}\n >\n {renderInline(label)}\n </a>\n );\n rest = rest.slice(closeUrl + 1);\n continue;\n }\n }\n }\n\n if (rest.startsWith(\"*\")) {\n const end = rest.indexOf(\"*\", 1);\n if (end > 1) {\n parts.push(\n <em key={k++} style={{ fontStyle: \"italic\" }}>\n {renderInline(rest.slice(1, end))}\n </em>\n );\n rest = rest.slice(end + 1);\n continue;\n }\n }\n\n parts.push(<span key={k++}>{rest[0]}</span>);\n rest = rest.slice(1);\n }\n\n return parts;\n}\n\ntype CellAlign = \"left\" | \"center\" | \"right\";\n\n/** Split a pipe-table row into trimmed cells, honoring escaped `\\|`. */\nfunction parseTableRow(line: string): string[] {\n let s = line.trim();\n if (s.startsWith(\"|\")) s = s.slice(1);\n if (s.endsWith(\"|\") && !s.endsWith(\"\\\\|\")) s = s.slice(0, -1);\n return s\n .split(/(?<!\\\\)\\|/)\n .map((c) => c.trim().replace(/\\\\\\|/g, \"|\"));\n}\n\n/** A separator row is all cells like `---`, `:--`, `--:`, or `:-:`. */\nfunction isTableSeparator(line: string): boolean {\n if (!line.includes(\"-\")) return false;\n const cells = parseTableRow(line);\n return cells.length > 0 && cells.every((c) => /^:?-{1,}:?$/.test(c));\n}\n\nfunction alignFromSeparator(cell: string): CellAlign {\n const left = cell.startsWith(\":\");\n const right = cell.endsWith(\":\");\n if (left && right) return \"center\";\n if (right) return \"right\";\n return \"left\";\n}\n\nfunction MarkdownBlock({ content }: { content: string }): React.ReactElement {\n const { BORDER, MUTED, PAPER } = useTheme();\n const lines = content.split(\"\\n\");\n const elements: React.ReactNode[] = [];\n let key = 0;\n let i = 0;\n\n while (i < lines.length) {\n const trimmed = lines[i].trim();\n\n if (!trimmed) {\n i++;\n continue;\n }\n\n const headingMatch = trimmed.match(/^(#{1,4})\\s+(.+)/);\n if (headingMatch) {\n const level = headingMatch[1].length;\n const cfg: Record<number, { size: string; weight: number; serif: boolean; mt: string }> = {\n 1: { size: \"15px\", weight: 600, serif: true, mt: \"0\" },\n 2: { size: \"14px\", weight: 600, serif: true, mt: \"14px\" },\n 3: { size: \"12px\", weight: 600, serif: false, mt: \"12px\" },\n 4: { size: \"11px\", weight: 600, serif: false, mt: \"10px\" },\n };\n const s = cfg[level] ?? cfg[3];\n elements.push(\n <div\n key={key++}\n style={{\n fontSize: s.size,\n fontWeight: s.weight,\n fontFamily: s.serif ? \"var(--font-serif)\" : \"var(--font-sans)\",\n color: \"var(--foreground)\",\n letterSpacing: s.serif ? \"-0.005em\" : \"0\",\n marginTop: s.mt,\n marginBottom: \"6px\",\n lineHeight: 1.3,\n }}\n >\n {renderInline(headingMatch[2])}\n </div>\n );\n i++;\n continue;\n }\n\n if (trimmed.startsWith(\"- \") || trimmed.startsWith(\"* \")) {\n const items: string[] = [];\n while (i < lines.length) {\n const li = lines[i].trim();\n if (!li.startsWith(\"- \") && !li.startsWith(\"* \")) break;\n items.push(li.slice(2));\n i++;\n }\n elements.push(\n <div key={key++} style={{ margin: \"4px 0 8px 0\", paddingLeft: \"4px\" }}>\n {items.map((text, idx) => (\n <div\n key={idx}\n style={{\n display: \"flex\",\n gap: \"8px\",\n marginBottom: \"5px\",\n alignItems: \"baseline\",\n }}\n >\n <span\n style={{\n width: \"4px\",\n height: \"4px\",\n borderRadius: \"9999px\",\n background: ACCENT,\n opacity: 0.5,\n flexShrink: 0,\n marginTop: \"7px\",\n }}\n />\n <span style={{ flex: 1 }}>{renderInline(text)}</span>\n </div>\n ))}\n </div>\n );\n continue;\n }\n\n const numMatch = trimmed.match(/^(\\d+)\\.\\s+(.+)/);\n if (numMatch) {\n const items: { num: string; text: string }[] = [];\n while (i < lines.length) {\n const li = lines[i].trim();\n const m = li.match(/^(\\d+)\\.\\s+(.+)/);\n if (!m) break;\n items.push({ num: m[1], text: m[2] });\n i++;\n }\n elements.push(\n <div key={key++} style={{ margin: \"4px 0 8px 0\", paddingLeft: \"4px\" }}>\n {items.map((item, idx) => (\n <div\n key={idx}\n style={{\n display: \"flex\",\n gap: \"8px\",\n marginBottom: \"6px\",\n alignItems: \"baseline\",\n }}\n >\n <span\n style={{\n fontSize: \"10px\",\n fontWeight: 700,\n color: ACCENT,\n opacity: 0.7,\n minWidth: \"14px\",\n textAlign: \"right\",\n fontVariantNumeric: \"tabular-nums\",\n flexShrink: 0,\n }}\n >\n {item.num}\n </span>\n <span style={{ flex: 1 }}>{renderInline(item.text)}</span>\n </div>\n ))}\n </div>\n );\n continue;\n }\n\n // GFM pipe table: a header row followed by a separator row.\n if (\n trimmed.includes(\"|\") &&\n i + 1 < lines.length &&\n isTableSeparator(lines[i + 1])\n ) {\n const headers = parseTableRow(trimmed);\n const aligns = parseTableRow(lines[i + 1]).map(alignFromSeparator);\n i += 2;\n const rows: string[][] = [];\n while (i < lines.length) {\n const li = lines[i].trim();\n if (!li || !li.includes(\"|\")) break;\n rows.push(parseTableRow(li));\n i++;\n }\n const colAlign = (idx: number): CellAlign => aligns[idx] ?? \"left\";\n elements.push(\n <div key={key++} style={{ margin: \"6px 0 10px 0\", overflowX: \"auto\" }}>\n <table\n style={{\n borderCollapse: \"collapse\",\n width: \"100%\",\n fontSize: \"12px\",\n lineHeight: 1.4,\n }}\n >\n <thead>\n <tr>\n {headers.map((h, idx) => (\n <th\n key={idx}\n style={{\n textAlign: colAlign(idx),\n padding: \"6px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n background: PAPER,\n fontWeight: 600,\n color: MUTED,\n fontSize: \"10px\",\n textTransform: \"uppercase\",\n letterSpacing: \"0.04em\",\n whiteSpace: \"nowrap\",\n }}\n >\n {renderInline(h)}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((cells, rIdx) => (\n <tr key={rIdx}>\n {headers.map((_, cIdx) => (\n <td\n key={cIdx}\n style={{\n textAlign: colAlign(cIdx),\n padding: \"6px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n color: \"var(--foreground)\",\n verticalAlign: \"top\",\n }}\n >\n {renderInline(cells[cIdx] ?? \"\")}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n continue;\n }\n\n elements.push(\n <p key={key++} style={{ margin: \"0 0 8px 0\", lineHeight: 1.65 }}>\n {renderInline(trimmed)}\n </p>\n );\n i++;\n }\n\n return <>{elements}</>;\n}\n\nexport function Markdown({\n content,\n inline = false,\n}: {\n content: string | null | undefined;\n inline?: boolean;\n}): React.ReactElement | null {\n if (!content) return null;\n if (inline) {\n return <span style={{ whiteSpace: \"pre-wrap\" }}>{renderInline(content)}</span>;\n }\n return <MarkdownBlock content={content} />;\n}\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\n\n// pdf.js needs its worker script loadable at runtime. Where the script may\n// load from is dictated by the host page's CSP (script-src), which this\n// library cannot know at build time — so the source is resolved per-host and\n// the result verified by actually parsing a document before any preview is\n// offered.\n\ndeclare global {\n interface Window {\n /** Host apps set this (ideally to a same-origin bundled copy of\n * pdfjs-dist/build/pdf.worker.min.mjs) before any preview renders. */\n __GENUI_PDF_WORKER_SRC__?: string;\n }\n}\n\ninterface PdfjsLike {\n version: string;\n GlobalWorkerOptions: { workerSrc: string };\n}\n\n/**\n * Resolve the worker source once: host override > already configured >\n * jsdelivr CDN (allowed by our production CSP, unlike unpkg). Idempotent.\n */\nexport function resolvePdfWorkerSrc(pdfjs: PdfjsLike): string {\n const override =\n typeof window !== \"undefined\" ? window.__GENUI_PDF_WORKER_SRC__ : undefined;\n const current = pdfjs.GlobalWorkerOptions.workerSrc;\n // react-pdf ships with a relative \"pdf.worker.mjs\" default that resolves\n // against the page URL and 404s — treat it as unset.\n const isConfigured = !!current && current !== \"pdf.worker.mjs\";\n if (override) {\n pdfjs.GlobalWorkerOptions.workerSrc = override;\n } else if (!isConfigured) {\n pdfjs.GlobalWorkerOptions.workerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`;\n }\n return pdfjs.GlobalWorkerOptions.workerSrc;\n}\n\n// Minimal single-page PDF; pdf.js reconstructs the missing xref table.\nconst TINY_PDF = `%PDF-1.1\n1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj\n2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj\n3 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 3 3]>>endobj\ntrailer<</Root 1 0 R>>`;\n\nconst PROBE_TIMEOUT_MS = 5000;\n\nlet probe: Promise<boolean> | null = null;\n\n/**\n * Preflight: prove pdf.js can actually parse a document in this page —\n * covering both the real worker and pdf.js's main-thread \"fake worker\"\n * fallback, either of which the CSP may block. Memoized per page load.\n */\nexport function probePdfWorker(): Promise<boolean> {\n if (probe) return probe;\n probe = (async () => {\n if (typeof window === \"undefined\") return false;\n try {\n const { pdfjs } = await import(\"react-pdf\");\n resolvePdfWorkerSrc(pdfjs);\n const task = pdfjs.getDocument({ data: new TextEncoder().encode(TINY_PDF) });\n const doc = await Promise.race([\n task.promise,\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error(\"pdf worker probe timed out\")), PROBE_TIMEOUT_MS)\n ),\n ]);\n await doc.destroy();\n return true;\n } catch {\n probe = null; // allow retry on a later mount (e.g. transient network)\n return false;\n }\n })();\n return probe;\n}\n\n/**\n * null = probe pending, true = PDF rendering verified, false = unavailable\n * (callers must fall back — never show a broken viewer).\n */\nexport function usePdfWorkerReady(enabled: boolean): boolean | null {\n const [ready, setReady] = useState<boolean | null>(null);\n useEffect(() => {\n if (!enabled) return;\n let cancelled = false;\n probePdfWorker().then((ok) => {\n if (!cancelled) setReady(ok);\n });\n return () => {\n cancelled = true;\n };\n }, [enabled]);\n return enabled ? ready : null;\n}\n","\"use client\";\n\nimport React, { useState, useCallback, useEffect } from \"react\";\nimport { Document, Page, pdfjs } from \"react-pdf\";\nimport \"react-pdf/dist/Page/AnnotationLayer.css\";\nimport \"react-pdf/dist/Page/TextLayer.css\";\n\nimport { resolvePdfWorkerSrc } from \"../../shared/viewers/pdfWorkerProbe\";\n\nresolvePdfWorkerSrc(pdfjs);\n\nimport { ACCENT } from \"../../shared/theme\";\nimport { useTheme } from \"../../shared/ThemeContext\";\nconst TERRACOTTA = ACCENT;\n\ninterface PdfViewerProps {\n url?: string;\n base64?: string;\n onLoadSuccess?: (numPages: number) => void;\n onLoadError?: (error: Error) => void;\n}\n\nexport function PdfViewer({ url, base64, onLoadSuccess, onLoadError }: PdfViewerProps) {\n const { BORDER, MUTED, SURFACE } = useTheme();\n const [numPages, setNumPages] = useState(0);\n const [currentPage, setCurrentPage] = useState(1);\n const [loading, setLoading] = useState(true);\n\n const handleLoad = useCallback(({ numPages: n }: { numPages: number }) => {\n setNumPages(n);\n setLoading(false);\n onLoadSuccess?.(n);\n }, [onLoadSuccess]);\n\n useEffect(() => {\n if (numPages <= 1) return;\n const handler = (e: KeyboardEvent) => {\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\") return;\n if (e.key === \"ArrowLeft\" || e.key === \"ArrowUp\") {\n e.preventDefault();\n setCurrentPage((p) => Math.max(1, p - 1));\n } else if (e.key === \"ArrowRight\" || e.key === \"ArrowDown\") {\n e.preventDefault();\n setCurrentPage((p) => Math.min(numPages, p + 1));\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [numPages]);\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", alignItems: \"center\", gap: \"0\" }}>\n {numPages > 1 && (\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: \"8px\", padding: \"8px 14px\",\n background: SURFACE, width: \"100%\", justifyContent: \"center\",\n borderBottom: `1px solid ${BORDER}`,\n }}>\n <button\n onClick={() => setCurrentPage((p) => Math.max(1, p - 1))}\n disabled={currentPage === 1}\n style={{\n border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\",\n background: SURFACE, cursor: \"pointer\", fontSize: \"12px\",\n color: currentPage === 1 ? BORDER : MUTED,\n }}\n >\n ←\n </button>\n <span style={{ fontSize: \"12px\", color: MUTED }}>\n {currentPage} / {numPages}\n </span>\n <button\n onClick={() => setCurrentPage((p) => Math.min(numPages, p + 1))}\n disabled={currentPage === numPages}\n style={{\n border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\",\n background: SURFACE, cursor: \"pointer\", fontSize: \"12px\",\n color: currentPage === numPages ? BORDER : MUTED,\n }}\n >\n →\n </button>\n </div>\n )}\n\n <div style={{ overflow: \"auto\", width: \"100%\", display: \"flex\", justifyContent: \"center\", padding: \"16px\" }}>\n {loading && (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"200px\", color: MUTED, fontSize: \"13px\" }}>\n Loading PDF...\n </div>\n )}\n <Document\n file={base64 ? `data:application/pdf;base64,${base64}` : url}\n onLoadSuccess={handleLoad}\n onLoadError={onLoadError}\n loading=\"\"\n error=\"\"\n >\n <Page\n pageNumber={currentPage}\n width={540}\n renderTextLayer={true}\n renderAnnotationLayer={true}\n />\n </Document>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useEffect, useRef } from \"react\";\nimport * as XLSX from \"xlsx\";\n\nimport { ACCENT } from \"../../shared/theme\";\nimport { useTheme } from \"../../shared/ThemeContext\";\nconst TERRACOTTA = ACCENT;\n\ninterface ExcelViewerProps {\n url?: string;\n base64?: string;\n onLoadSuccess?: (sheetNames: string[]) => void;\n}\n\nexport function ExcelViewer({ url, base64, onLoadSuccess }: ExcelViewerProps) {\n const { BORDER, MUTED, PAPER, SURFACE } = useTheme();\n const [sheetNames, setSheetNames] = useState<string[]>([]);\n const [activeSheet, setActiveSheet] = useState(0);\n const [data, setData] = useState<string[][]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const wbRef = useRef<XLSX.WorkBook | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const loadFromBuffer = (buf: ArrayBuffer) => {\n if (cancelled) return;\n const wb = XLSX.read(buf, { type: \"array\" });\n wbRef.current = wb;\n setSheetNames(wb.SheetNames);\n onLoadSuccess?.(wb.SheetNames);\n const rows = XLSX.utils.sheet_to_json<string[]>(wb.Sheets[wb.SheetNames[0]], { header: 1 });\n setData(rows);\n setActiveSheet(0);\n setLoading(false);\n };\n\n if (base64) {\n try {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n loadFromBuffer(bytes.buffer);\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : \"Failed to decode base64\");\n setLoading(false);\n }\n }\n return () => { cancelled = true; };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => { cancelled = true; };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.arrayBuffer();\n })\n .then((buf) => {\n loadFromBuffer(buf);\n })\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => { cancelled = true; };\n }, [url, base64, onLoadSuccess]);\n\n const switchSheet = (idx: number) => {\n if (!wbRef.current) return;\n setActiveSheet(idx);\n const rows = XLSX.utils.sheet_to_json<string[]>(wbRef.current.Sheets[wbRef.current.SheetNames[idx]], { header: 1 });\n setData(rows);\n };\n\n useEffect(() => {\n if (sheetNames.length <= 1) return;\n const handler = (e: KeyboardEvent) => {\n const tag = (e.target as HTMLElement)?.tagName;\n if (tag === \"INPUT\" || tag === \"TEXTAREA\") return;\n if (e.key === \"ArrowLeft\") {\n e.preventDefault();\n setActiveSheet((prev) => {\n const next = Math.max(0, prev - 1);\n if (next !== prev && wbRef.current) {\n const rows = XLSX.utils.sheet_to_json<string[]>(wbRef.current.Sheets[wbRef.current.SheetNames[next]], { header: 1 });\n setData(rows);\n }\n return next;\n });\n } else if (e.key === \"ArrowRight\") {\n e.preventDefault();\n setActiveSheet((prev) => {\n const next = Math.min(sheetNames.length - 1, prev + 1);\n if (next !== prev && wbRef.current) {\n const rows = XLSX.utils.sheet_to_json<string[]>(wbRef.current.Sheets[wbRef.current.SheetNames[next]], { header: 1 });\n setData(rows);\n }\n return next;\n });\n }\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [sheetNames.length]);\n\n if (loading) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"200px\", color: MUTED, fontSize: \"13px\" }}>\n Loading spreadsheet...\n </div>\n );\n }\n\n if (error) {\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"120px\", color: \"#dc2626\", fontSize: \"13px\" }}>\n {error}\n </div>\n );\n }\n\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {sheetNames.length > 1 && (\n <div style={{ display: \"flex\", gap: \"0\", overflowX: \"auto\", borderBottom: `1px solid ${BORDER}` }}>\n {sheetNames.map((name, i) => (\n <button\n key={name}\n onClick={() => switchSheet(i)}\n style={{\n padding: \"6px 14px\", border: \"none\", cursor: \"pointer\", fontSize: \"12px\", fontWeight: 600,\n background: i === activeSheet ? SURFACE : PAPER,\n color: i === activeSheet ? TERRACOTTA : MUTED,\n borderBottom: i === activeSheet ? `2px solid ${TERRACOTTA}` : \"2px solid transparent\",\n whiteSpace: \"nowrap\",\n }}\n >\n {name}\n </button>\n ))}\n </div>\n )}\n\n <div style={{ overflow: \"auto\", maxHeight: \"500px\" }}>\n <table style={{ width: \"100%\", borderCollapse: \"collapse\", fontSize: \"12px\" }}>\n <tbody>\n {data.map((row, ri) => (\n <tr key={ri}>\n {(row as (string | number | boolean | null | undefined)[]).map((cell, ci) => {\n const isHeader = ri === 0 || (ri === 2 && data[0]?.[0] && !data[1]?.[0]);\n const Tag = isHeader ? \"th\" : \"td\";\n return (\n <Tag\n key={ci}\n style={{\n padding: \"6px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n textAlign: typeof cell === \"number\" ? \"right\" : \"left\",\n fontWeight: isHeader ? 600 : 400,\n color: isHeader ? \"var(--foreground)\" : MUTED,\n background: isHeader ? PAPER : SURFACE,\n whiteSpace: \"nowrap\",\n fontFamily: typeof cell === \"number\" ? \"var(--font-mono, monospace)\" : \"var(--font-sans)\",\n }}\n >\n {cell != null ? String(cell) : \"\"}\n </Tag>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n </div>\n );\n}\n","/** Shared byte/text decode helpers for the preview viewers.\n *\n * Preview sources arrive either as a public `url` (download-card path) or as\n * base64 bytes (the authed harness path, where a blob is fetched then encoded).\n * PDF/Excel/Docx viewers consume base64 directly; CSV/text viewers need a\n * decoded UTF-8 string.\n */\n\n/** Encode a Blob to a bare base64 string (no data: prefix). */\nexport async function blobToBase64(blob: Blob): Promise<string> {\n const buf = await blob.arrayBuffer();\n const bytes = new Uint8Array(buf);\n let binary = \"\";\n const chunk = 0x8000; // avoid arg-count limits on String.fromCharCode\n for (let i = 0; i < bytes.length; i += chunk) {\n binary += String.fromCharCode(...bytes.subarray(i, i + chunk));\n }\n return btoa(binary);\n}\n\n/** Decode a bare base64 string to a UTF-8 text string. */\nexport function base64ToText(base64: string): string {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return new TextDecoder(\"utf-8\").decode(bytes);\n}\n\n/** Decode a bare base64 string to an ArrayBuffer (for docx/mammoth). */\nexport function base64ToArrayBuffer(base64: string): ArrayBuffer {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n return bytes.buffer;\n}\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport Papa from \"papaparse\";\nimport { useTheme } from \"../ThemeContext\";\nimport { base64ToText } from \"./decode\";\n\ninterface CsvViewerProps {\n url?: string;\n base64?: string;\n /** Delimiter hint; auto-detected when omitted. */\n delimiter?: string;\n /** Cap rendered rows (peek mode). Omit for all. */\n maxRows?: number;\n}\n\n/** CSV/TSV table preview via papaparse. Renders header + body with the same\n * muted styling as the Excel viewer. */\nexport function CsvViewer({ url, base64, delimiter, maxRows }: CsvViewerProps) {\n const { BORDER, MUTED, PAPER } = useTheme();\n const [rows, setRows] = useState<string[][]>([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const parse = (text: string) => {\n if (cancelled) return;\n const out = Papa.parse<string[]>(text, {\n delimiter: delimiter || \"\",\n skipEmptyLines: true,\n });\n setRows((out.data as string[][]) || []);\n setLoading(false);\n };\n\n if (base64) {\n try {\n parse(base64ToText(base64));\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : \"Failed to decode CSV\");\n setLoading(false);\n }\n }\n return () => {\n cancelled = true;\n };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.text();\n })\n .then(parse)\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [url, base64, delimiter]);\n\n if (loading) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading CSV…\n </div>\n );\n }\n if (error) {\n return (\n <div style={{ padding: \"24px\", color: \"#dc2626\", fontSize: \"13px\", textAlign: \"center\" }}>\n {error}\n </div>\n );\n }\n if (!rows.length) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Empty file\n </div>\n );\n }\n\n const [header, ...body] = rows;\n const shown = maxRows != null ? body.slice(0, maxRows) : body;\n const isNum = (v: string) => v !== \"\" && !isNaN(Number(v));\n\n return (\n <div style={{ overflow: \"auto\", width: \"100%\" }}>\n <table style={{ borderCollapse: \"collapse\", width: \"100%\", fontSize: \"12px\" }}>\n <thead>\n <tr>\n {header.map((h, i) => (\n <th\n key={i}\n style={{\n position: \"sticky\",\n top: 0,\n textAlign: \"left\",\n padding: \"6px 10px\",\n background: PAPER,\n color: \"var(--foreground)\",\n fontWeight: 600,\n borderBottom: `1px solid ${BORDER}`,\n whiteSpace: \"nowrap\",\n }}\n >\n {h}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {shown.map((row, ri) => (\n <tr key={ri}>\n {header.map((_, ci) => {\n const cell = row[ci] ?? \"\";\n return (\n <td\n key={ci}\n style={{\n padding: \"5px 10px\",\n borderBottom: `1px solid ${BORDER}`,\n color: MUTED,\n textAlign: isNum(cell) ? \"right\" : \"left\",\n fontVariantNumeric: isNum(cell) ? \"tabular-nums\" : \"normal\",\n whiteSpace: \"nowrap\",\n }}\n >\n {cell}\n </td>\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n {maxRows != null && body.length > maxRows && (\n <div style={{ padding: \"6px 10px\", fontSize: \"11px\", color: MUTED }}>\n +{body.length - maxRows} more rows\n </div>\n )}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { useTheme } from \"../ThemeContext\";\nimport { Markdown } from \"../Markdown\";\nimport { base64ToText } from \"./decode\";\n\ninterface TextViewerProps {\n url?: string;\n base64?: string;\n /** Render as Markdown instead of raw monospace text. */\n markdown?: boolean;\n /** Cap rendered lines (peek mode). Omit for all. */\n maxLines?: number;\n}\n\n/** Plain-text / Markdown preview. `.txt`/`.log` render as whitespace-preserving\n * monospace; `.md` renders via the shared dependency-free Markdown component. */\nexport function TextViewer({ url, base64, markdown = false, maxLines }: TextViewerProps) {\n const { MUTED } = useTheme();\n const [text, setText] = useState<string>(\"\");\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n if (base64) {\n try {\n if (!cancelled) {\n setText(base64ToText(base64));\n setLoading(false);\n }\n } catch (e) {\n if (!cancelled) {\n setError(e instanceof Error ? e.message : \"Failed to decode text\");\n setLoading(false);\n }\n }\n return () => {\n cancelled = true;\n };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.text();\n })\n .then((t) => {\n if (cancelled) return;\n setText(t);\n setLoading(false);\n })\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [url, base64]);\n\n if (loading) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading…\n </div>\n );\n }\n if (error) {\n return (\n <div style={{ padding: \"24px\", color: \"#dc2626\", fontSize: \"13px\", textAlign: \"center\" }}>\n {error}\n </div>\n );\n }\n\n const shown =\n maxLines != null ? text.split(\"\\n\").slice(0, maxLines).join(\"\\n\") : text;\n const clipped = maxLines != null && text.split(\"\\n\").length > maxLines;\n\n if (markdown) {\n return (\n <div style={{ padding: \"14px 16px\", fontSize: \"13px\", lineHeight: 1.6 }}>\n <Markdown content={shown} />\n {clipped && <div style={{ color: MUTED, fontSize: \"11px\", marginTop: \"6px\" }}>…</div>}\n </div>\n );\n }\n\n return (\n <pre\n style={{\n margin: 0,\n padding: \"14px 16px\",\n fontSize: \"12px\",\n lineHeight: 1.5,\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n color: \"var(--foreground)\",\n whiteSpace: \"pre\",\n overflow: \"auto\",\n width: \"100%\",\n boxSizing: \"border-box\",\n }}\n >\n {shown}\n {clipped ? \"\\n…\" : \"\"}\n </pre>\n );\n}\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport * as mammoth from \"mammoth\";\nimport { useTheme } from \"../ThemeContext\";\nimport { base64ToArrayBuffer } from \"./decode\";\n\ninterface DocxViewerProps {\n url?: string;\n base64?: string;\n}\n\n/** Strip anything script-like from mammoth output. Mammoth only emits a small\n * tag set (p, h1-6, ul/ol/li, table, strong/em, a, img-as-dataURI), but we\n * defensively drop <script>/<style> and on* handlers before injecting. */\nfunction sanitize(html: string): string {\n return html\n .replace(/<\\s*(script|style|iframe|object|embed)[\\s\\S]*?<\\/\\s*\\1\\s*>/gi, \"\")\n .replace(/\\son\\w+\\s*=\\s*(\"[^\"]*\"|'[^']*'|[^\\s>]+)/gi, \"\")\n .replace(/javascript:/gi, \"\");\n}\n\n/** DOCX preview via mammoth (docx → HTML). Used for inline peek + modal. */\nexport function DocxViewer({ url, base64 }: DocxViewerProps) {\n const { MUTED, BORDER, SURFACE } = useTheme();\n const [html, setHtml] = useState<string>(\"\");\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n let cancelled = false;\n setLoading(true);\n setError(null);\n\n const convert = (arrayBuffer: ArrayBuffer) => {\n mammoth\n .convertToHtml({ arrayBuffer })\n .then((res: { value: string }) => {\n if (cancelled) return;\n setHtml(sanitize(res.value || \"\"));\n setLoading(false);\n })\n .catch((e: unknown) => {\n if (cancelled) return;\n setError(e instanceof Error ? e.message : \"Failed to render DOCX\");\n setLoading(false);\n });\n };\n\n try {\n if (base64) {\n convert(base64ToArrayBuffer(base64));\n return () => {\n cancelled = true;\n };\n }\n } catch (e) {\n setError(e instanceof Error ? e.message : \"Failed to decode DOCX\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n if (!url) {\n setError(\"No file source provided\");\n setLoading(false);\n return () => {\n cancelled = true;\n };\n }\n\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);\n return r.arrayBuffer();\n })\n .then(convert)\n .catch((e) => {\n if (cancelled) return;\n setError(e.message);\n setLoading(false);\n });\n\n return () => {\n cancelled = true;\n };\n }, [url, base64]);\n\n if (loading) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading document…\n </div>\n );\n }\n if (error) {\n return (\n <div style={{ padding: \"24px\", color: \"#dc2626\", fontSize: \"13px\", textAlign: \"center\" }}>\n {error}\n </div>\n );\n }\n\n return (\n <div\n style={{\n padding: \"18px 22px\",\n fontSize: \"13px\",\n lineHeight: 1.6,\n color: \"var(--foreground)\",\n maxWidth: \"720px\",\n margin: \"0 auto\",\n borderLeft: `1px solid ${BORDER}`,\n borderRight: `1px solid ${BORDER}`,\n background: SURFACE,\n }}\n // mammoth output sanitized above\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useTheme } from \"./ThemeContext\";\n\ninterface ColumnSettingsPanelProps {\n columns: { key: string; label: string }[];\n hidden: Set<string>;\n onToggle: (key: string) => void;\n onShowAll: () => void;\n onHideAll: () => void;\n}\n\nexport function ColumnSettingsPanel({ columns, hidden, onToggle, onShowAll, onHideAll }: ColumnSettingsPanelProps) {\n const { BORDER, MUTED, ACCENT } = useTheme();\n return (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"6px\", minWidth: \"180px\" }}>\n <div style={{ display: \"flex\", justifyContent: \"space-between\", paddingBottom: \"4px\", borderBottom: `1px solid ${BORDER}` }}>\n <button\n onClick={onShowAll}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: ACCENT, fontWeight: 500, padding: 0 }}\n >\n Show all\n </button>\n <button\n onClick={onHideAll}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: MUTED, fontWeight: 500, padding: 0 }}\n >\n Hide all\n </button>\n </div>\n {columns.map((col) => (\n <label\n key={col.key}\n style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", cursor: \"pointer\", fontSize: \"12px\", color: \"var(--foreground)\" }}\n >\n <input\n type=\"checkbox\"\n checked={!hidden.has(col.key)}\n onChange={() => onToggle(col.key)}\n style={{ accentColor: ACCENT, width: \"14px\", height: \"14px\", margin: 0, cursor: \"pointer\" }}\n />\n {col.label}\n </label>\n ))}\n </div>\n );\n}\n","\"use client\";\n\nimport React, { useState, useRef, useEffect, useCallback } from \"react\";\nimport { toPng } from \"html-to-image\";\nimport { ColumnSettingsPanel } from \"./ColumnSettingsPanel\";\nimport { useTheme } from \"./ThemeContext\";\n\nconst DOT_COLOR = \"#aaaaaa\";\nconst DOT_HOVER = \"#555555\";\n\ninterface ColumnConfig {\n columns: { key: string; label: string }[];\n hidden: Set<string>;\n onToggle: (key: string) => void;\n onShowAll: () => void;\n onHideAll: () => void;\n}\n\ninterface ComponentActionsProps {\n children: React.ReactNode;\n onDownloadCSV?: () => void;\n columnConfig?: ColumnConfig;\n filename?: string;\n}\n\ntype MenuView = \"main\" | \"columns\";\n\nexport function ComponentActions({ children, onDownloadCSV, columnConfig, filename = \"component\" }: ComponentActionsProps) {\n const { BORDER, MUTED, SURFACE, SURFACE_MUTED } = useTheme();\n const [open, setOpen] = useState(false);\n const [view, setView] = useState<MenuView>(\"main\");\n const contentRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const btnRef = useRef<HTMLButtonElement>(null);\n\n const close = useCallback(() => {\n setOpen(false);\n setView(\"main\");\n }, []);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (menuRef.current?.contains(e.target as Node)) return;\n if (btnRef.current?.contains(e.target as Node)) return;\n close();\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, close]);\n\n const handleDownloadPNG = useCallback(async () => {\n if (!contentRef.current) return;\n try {\n const url = await toPng(contentRef.current, { backgroundColor: \"white\", pixelRatio: 2 });\n const a = document.createElement(\"a\");\n a.href = url;\n a.download = `${filename}.png`;\n a.click();\n } catch {\n // silent fail\n }\n close();\n }, [filename, close]);\n\n const handleCSV = useCallback(() => {\n onDownloadCSV?.();\n close();\n }, [onDownloadCSV, close]);\n\n return (\n <div style={{ width: \"100%\", display: \"flex\", flexDirection: \"column\" }}>\n <div ref={contentRef} style={{ width: \"100%\" }}>\n {children}\n </div>\n <div style={{ display: \"flex\", justifyContent: \"flex-end\", marginTop: \"4px\", position: \"relative\", zIndex: 10, flexShrink: 0 }}>\n <button\n ref={btnRef}\n onClick={() => { setOpen((o) => !o); setView(\"main\"); }}\n aria-label=\"Component actions\"\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"4px 8px\",\n display: \"flex\",\n gap: \"3px\",\n alignItems: \"center\",\n borderRadius: \"6px\",\n transition: \"background 0.15s\",\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.background = SURFACE_MUTED;\n e.currentTarget.querySelectorAll<SVGCircleElement>(\"circle\").forEach((c) => (c.style.fill = DOT_HOVER));\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.background = \"none\";\n e.currentTarget.querySelectorAll<SVGCircleElement>(\"circle\").forEach((c) => (c.style.fill = DOT_COLOR));\n }}\n >\n <svg width=\"20\" height=\"6\" viewBox=\"0 0 20 6\">\n <circle cx=\"3\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n <circle cx=\"10\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n <circle cx=\"17\" cy=\"3\" r=\"2\" style={{ fill: DOT_COLOR, transition: \"fill 0.15s\" }} />\n </svg>\n </button>\n\n {open && (\n <div\n ref={menuRef}\n style={{\n position: \"absolute\",\n bottom: \"100%\",\n right: 0,\n marginBottom: \"4px\",\n background: SURFACE,\n border: `1px solid ${BORDER}`,\n borderRadius: \"0.75rem\",\n boxShadow: \"0 4px 12px rgba(0,0,0,0.06)\",\n zIndex: 50,\n padding: view === \"columns\" ? \"10px\" : \"4px\",\n minWidth: view === \"columns\" ? \"200px\" : \"160px\",\n }}\n >\n {view === \"main\" ? (\n <div style={{ display: \"flex\", flexDirection: \"column\" }}>\n {columnConfig && (\n <MenuButton label=\"Customize columns\" onClick={() => setView(\"columns\")} />\n )}\n {onDownloadCSV && (\n <MenuButton label=\"Download CSV\" onClick={handleCSV} />\n )}\n <MenuButton label=\"Download PNG\" onClick={handleDownloadPNG} />\n </div>\n ) : (\n <div>\n <button\n onClick={() => setView(\"main\")}\n style={{ background: \"none\", border: \"none\", cursor: \"pointer\", fontSize: \"11px\", color: MUTED, marginBottom: \"6px\", padding: 0 }}\n >\n ← Back\n </button>\n <ColumnSettingsPanel\n columns={columnConfig!.columns}\n hidden={columnConfig!.hidden}\n onToggle={columnConfig!.onToggle}\n onShowAll={columnConfig!.onShowAll}\n onHideAll={columnConfig!.onHideAll}\n />\n </div>\n )}\n </div>\n )}\n </div>\n </div>\n );\n}\n\nfunction MenuButton({ label, onClick }: { label: string; onClick: () => void }) {\n const { SURFACE_MUTED } = useTheme();\n return (\n <button\n onClick={onClick}\n style={{\n background: \"none\",\n border: \"none\",\n cursor: \"pointer\",\n padding: \"8px 12px\",\n fontSize: \"12.5px\",\n color: \"var(--foreground)\",\n textAlign: \"left\",\n borderRadius: \"8px\",\n transition: \"background 0.15s\",\n whiteSpace: \"nowrap\",\n }}\n onMouseEnter={(e) => (e.currentTarget.style.background = SURFACE_MUTED)}\n onMouseLeave={(e) => (e.currentTarget.style.background = \"none\")}\n >\n {label}\n </button>\n );\n}\n","\"use client\";\n\nimport React, { useState, useCallback } from \"react\";\nimport { useTheme } from \"./ThemeContext\";\nimport { Markdown } from \"./Markdown\";\nimport { fileTypeMeta, formatExpiry, isExpirySoon, previewKindFor } from \"./fileType\";\nimport { PreviewHost, type PreviewSource } from \"./viewers/PreviewHost\";\nimport { PreviewModal } from \"./PreviewModal\";\nimport { blobToBase64 } from \"./viewers/decode\";\n\nexport interface FileCardProps {\n filename: string;\n size?: string;\n fileType?: string;\n expiresAt?: string;\n description?: string;\n /** Download as a link (file has a public URL). */\n downloadUrl?: string;\n /** Download via callback (e.g. authed blob fetch); used when no public URL. */\n onDownload?: () => void;\n downloadBusy?: boolean;\n downloadLabel?: string;\n /** Secondary action(s) rendered after Download — e.g. \"Save to Drive\". */\n actions?: React.ReactNode;\n /** Compact row variant for multi-file lists. */\n dense?: boolean;\n /** Public URL the preview viewers can fetch directly (download-card path). */\n previewUrl?: string;\n /** Authed byte source for preview when there's no public URL (harness path).\n * Called on first Preview click; the blob is encoded to base64 and cached. */\n fetchPreviewBlob?: () => Promise<Blob>;\n /** Force-disable the Preview affordance even when the type is previewable. */\n previewDisabled?: boolean;\n}\n\n/**\n * Presentational file card: type-glyph tile + name + meta (TYPE · size · expires)\n * + optional description, with a primary Download and an optional actions slot.\n * When a preview source (previewUrl or fetchPreviewBlob) is supplied and the\n * file type is previewable, it also offers an inline peek + a full-screen modal\n * preview. The host wires Download/preview sources; no data fetching beyond the\n * lazy preview-bytes fetch.\n */\nexport function FileCard({\n filename,\n size,\n fileType,\n expiresAt,\n description,\n downloadUrl,\n onDownload,\n downloadBusy = false,\n downloadLabel = \"Download\",\n actions,\n dense = false,\n previewUrl,\n fetchPreviewBlob,\n previewDisabled = false,\n}: FileCardProps) {\n const { BORDER, MUTED, ACCENT, SURFACE, SURFACE_MUTED, SHADOW } = useTheme();\n const [cardHover, setCardHover] = useState(false);\n const [btnHover, setBtnHover] = useState(false);\n const [pvHover, setPvHover] = useState(false);\n\n // Preview state.\n const previewKind = previewKindFor(fileType, filename);\n const canPreview =\n !previewDisabled && previewKind !== null && (!!previewUrl || !!fetchPreviewBlob);\n const [peekOpen, setPeekOpen] = useState(false);\n const [modalOpen, setModalOpen] = useState(false);\n const [source, setSource] = useState<PreviewSource | null>(previewUrl ? { url: previewUrl } : null);\n const [pvLoading, setPvLoading] = useState(false);\n const [pvError, setPvError] = useState<string | null>(null);\n\n // Resolve preview bytes once: public url is direct; otherwise fetch the blob\n // and encode to base64, caching it for both peek and modal.\n const ensureSource = useCallback(async (): Promise<PreviewSource | null> => {\n if (source) return source;\n if (previewUrl) {\n const s = { url: previewUrl };\n setSource(s);\n return s;\n }\n if (!fetchPreviewBlob) return null;\n setPvLoading(true);\n setPvError(null);\n try {\n const blob = await fetchPreviewBlob();\n const s = { base64: await blobToBase64(blob) };\n setSource(s);\n return s;\n } catch (e) {\n setPvError(e instanceof Error ? e.message : \"Failed to load preview\");\n return null;\n } finally {\n setPvLoading(false);\n }\n }, [source, previewUrl, fetchPreviewBlob]);\n\n const togglePeek = useCallback(async () => {\n if (peekOpen) {\n setPeekOpen(false);\n return;\n }\n setPeekOpen(true);\n await ensureSource();\n }, [peekOpen, ensureSource]);\n\n const openModal = useCallback(async () => {\n const s = await ensureSource();\n if (s) setModalOpen(true);\n }, [ensureSource]);\n\n const ftype = fileTypeMeta(fileType, filename);\n const tileSize = dense ? 28 : 40;\n const tileRadius = dense ? 8 : 11;\n const expirySoon = expiresAt ? isExpirySoon(expiresAt) : false;\n\n const metaTokens: React.ReactNode[] = [];\n if (ftype.label && ftype.label !== \"FILE\") metaTokens.push(ftype.label);\n if (size) metaTokens.push(size);\n\n // Neutral ghost (not filled-accent): theme-safe across hosts and consistent\n // with the compact card. The branded/primary emphasis is left to the\n // `actions` slot (e.g. Save-to-Drive).\n const ghostBtn = (hover: boolean): React.CSSProperties => ({\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n background: hover ? SURFACE_MUTED : SURFACE,\n color: \"var(--foreground)\",\n borderRadius: \"8px\",\n padding: dense ? \"5px 11px\" : \"7px 13px\",\n fontSize: dense ? \"11.5px\" : \"12px\",\n fontWeight: 600,\n textDecoration: \"none\",\n whiteSpace: \"nowrap\",\n flexShrink: 0,\n cursor: \"pointer\",\n border: `1px solid ${BORDER}`,\n fontFamily: \"inherit\",\n transition: \"background 0.15s ease, border-color 0.15s ease\",\n });\n\n const downloadStyle: React.CSSProperties = {\n ...ghostBtn(btnHover),\n cursor: downloadBusy ? \"progress\" : \"pointer\",\n opacity: downloadBusy ? 0.8 : 1,\n };\n\n const downloadInner = (\n <>\n <DownloadGlyph spinning={downloadBusy} size={dense ? 13 : 14} />\n {!dense && <span>{downloadBusy ? \"Downloading…\" : downloadLabel}</span>}\n </>\n );\n\n return (\n <div\n onMouseEnter={() => setCardHover(true)}\n onMouseLeave={() => setCardHover(false)}\n style={{\n width: \"100%\",\n boxSizing: \"border-box\",\n borderRadius: \"0.875rem\",\n border: `1px solid ${BORDER}`,\n background: SURFACE,\n display: \"flex\",\n flexDirection: \"column\",\n boxShadow: cardHover\n ? \"0 2px 10px rgba(15,23,42,0.06), 0 10px 28px rgba(15,23,42,0.07)\"\n : SHADOW,\n transform: cardHover ? \"translateY(-1px)\" : \"translateY(0)\",\n transition: \"box-shadow 0.2s ease, border-color 0.2s ease, transform 0.2s ease\",\n }}\n >\n {/* Main row */}\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: dense ? \"11px\" : \"13px\",\n padding: dense ? \"9px 11px\" : \"12px 14px\",\n }}\n >\n {/* Type-glyph tile */}\n <div\n aria-hidden=\"true\"\n style={{\n width: tileSize,\n height: tileSize,\n borderRadius: tileRadius,\n flexShrink: 0,\n display: \"grid\",\n placeItems: \"center\",\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n fontSize: dense ? \"9.5px\" : \"10.5px\",\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n color: ftype.fg || ACCENT,\n background: ftype.bg || \"var(--ag-accent-tint-canvas, rgba(99,102,241,0.06))\",\n boxShadow: \"inset 0 0 0 1px rgba(15,23,42,0.06)\",\n }}\n >\n {ftype.label}\n </div>\n\n {/* Name + meta + description */}\n <div style={{ flex: 1, minWidth: 0, display: \"flex\", flexDirection: \"column\", gap: \"2px\" }}>\n <span\n style={{\n fontSize: dense ? \"13px\" : \"13.5px\",\n fontWeight: 600,\n color: \"var(--foreground)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {filename}\n </span>\n\n {(metaTokens.length > 0 || expiresAt) && (\n <span\n style={{\n fontSize: \"11.5px\",\n color: MUTED,\n display: \"flex\",\n alignItems: \"center\",\n gap: \"6px\",\n whiteSpace: \"nowrap\",\n }}\n >\n {metaTokens.map((t, i) => (\n <React.Fragment key={i}>\n {i > 0 && <span style={{ color: MUTED }}>·</span>}\n <span>{t}</span>\n </React.Fragment>\n ))}\n {expiresAt && (\n <>\n {metaTokens.length > 0 && <span style={{ color: MUTED }}>·</span>}\n <span style={{ color: expirySoon ? \"#b45309\" : MUTED, fontWeight: expirySoon ? 600 : 400 }}>\n Expires {formatExpiry(expiresAt)}\n </span>\n </>\n )}\n </span>\n )}\n\n {description && !dense && (\n <span style={{ fontSize: \"12px\", color: MUTED, lineHeight: 1.4 }}>\n <Markdown inline content={description} />\n </span>\n )}\n </div>\n\n {/* Actions: Preview + Download (primary) + slot */}\n {canPreview && (\n <button\n type=\"button\"\n onClick={togglePeek}\n aria-expanded={peekOpen}\n onMouseEnter={() => setPvHover(true)}\n onMouseLeave={() => setPvHover(false)}\n style={ghostBtn(pvHover)}\n >\n <EyeGlyph size={dense ? 13 : 14} />\n {!dense && <span>Preview</span>}\n {!dense && <Chevron open={peekOpen} />}\n </button>\n )}\n {downloadUrl ? (\n <a\n href={downloadUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onMouseEnter={() => setBtnHover(true)}\n onMouseLeave={() => setBtnHover(false)}\n style={downloadStyle}\n >\n {downloadInner}\n </a>\n ) : onDownload ? (\n <button\n type=\"button\"\n onClick={onDownload}\n disabled={downloadBusy}\n aria-busy={downloadBusy || undefined}\n onMouseEnter={() => setBtnHover(true)}\n onMouseLeave={() => setBtnHover(false)}\n style={downloadStyle}\n >\n {downloadInner}\n </button>\n ) : null}\n {actions}\n </div>\n\n {/* Inline peek */}\n {canPreview && peekOpen && previewKind && (\n <div style={{ borderTop: `1px solid ${BORDER}` }}>\n {pvError ? (\n <div style={{ padding: \"16px\", fontSize: \"12.5px\", color: \"#dc2626\" }}>{pvError}</div>\n ) : pvLoading || !source ? (\n <div style={{ padding: \"20px\", fontSize: \"12.5px\", color: MUTED, textAlign: \"center\" }}>\n Loading preview…\n </div>\n ) : (\n <>\n <div style={{ position: \"relative\", maxHeight: \"280px\", overflow: \"hidden\" }}>\n <PreviewHost kind={previewKind} source={source} mode=\"peek\" />\n {/* Fade-out teaser */}\n <div\n aria-hidden=\"true\"\n style={{\n position: \"absolute\",\n left: 0,\n right: 0,\n bottom: 0,\n height: \"56px\",\n background: `linear-gradient(to bottom, transparent, ${SURFACE})`,\n pointerEvents: \"none\",\n }}\n />\n </div>\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n padding: \"9px\",\n borderTop: `1px solid ${BORDER}`,\n }}\n >\n <button type=\"button\" onClick={openModal} style={ghostBtn(false)}>\n Open full preview\n </button>\n </div>\n </>\n )}\n </div>\n )}\n\n {canPreview && previewKind && source && (\n <PreviewModal\n open={modalOpen}\n onClose={() => setModalOpen(false)}\n filename={filename}\n fileType={fileType}\n kind={previewKind}\n source={source}\n downloadUrl={downloadUrl}\n onDownload={onDownload}\n />\n )}\n </div>\n );\n}\n\n/** Inline download/spinner glyph (no icon dependency — works standalone). */\nfunction DownloadGlyph({ spinning, size }: { spinning: boolean; size: number }) {\n if (spinning) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ animation: \"fileCardSpin 720ms linear infinite\" }}\n >\n <style>{\"@keyframes fileCardSpin{to{transform:rotate(360deg)}}\"}</style>\n <circle cx=\"12\" cy=\"12\" r=\"9\" stroke=\"currentColor\" strokeOpacity=\"0.3\" strokeWidth=\"2\" />\n <path d=\"M21 12a9 9 0 0 0-9-9\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" />\n </svg>\n );\n }\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M12 3v12m0 0 4-4m-4 4-4-4M5 21h14\" stroke=\"currentColor\" strokeWidth=\"2\"\n strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n\n/** Eye glyph for the Preview affordance. */\nfunction EyeGlyph({ size }: { size: number }) {\n return (\n <svg width={size} height={size} viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M2 12s3.5-7 10-7 10 7 10 7-3.5 7-10 7-10-7-10-7Z\" stroke=\"currentColor\" strokeWidth=\"2\"\n strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" strokeWidth=\"2\" />\n </svg>\n );\n}\n\nfunction Chevron({ open }: { open: boolean }) {\n return (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ transition: \"transform 0.15s ease\", transform: open ? \"rotate(180deg)\" : \"rotate(0deg)\" }}\n >\n <path d=\"m6 9 6 6 6-6\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n );\n}\n","// File-type identity for FileCard: an extension chip + a semantic family color.\n// The chip is the recognizable signal vs one generic icon. Colors are\n// accent-independent and theme-adaptive (translucent SEMANTIC tints, so the chip\n// reads on both light and dark surfaces under any theme accent).\nimport { SEMANTIC } from \"./theme\";\n\nexport interface FileTypeMeta {\n label: string; // e.g. \"CSV\", \"PDF\" — short, uppercased\n fg: string; // chip foreground (family color), \"\" → fall back to theme accent\n bg: string; // chip background tint, \"\" → fall back to theme accent tint\n}\n\nconst FAMILIES: { exts: string[]; fg: string; bg: string }[] = [\n { exts: [\"csv\", \"tsv\", \"xls\", \"xlsx\", \"numbers\"], fg: SEMANTIC.success.color, bg: SEMANTIC.success.bg },\n { exts: [\"pdf\"], fg: SEMANTIC.error.color, bg: SEMANTIC.error.bg },\n { exts: [\"doc\", \"docx\", \"txt\", \"md\", \"rtf\", \"pages\"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },\n { exts: [\"json\", \"yaml\", \"yml\", \"xml\", \"toml\"], fg: SEMANTIC.purple.color, bg: SEMANTIC.purple.bg },\n { exts: [\"zip\", \"tar\", \"gz\", \"rar\", \"7z\"], fg: SEMANTIC.warning.color, bg: SEMANTIC.warning.bg },\n { exts: [\"png\", \"jpg\", \"jpeg\", \"gif\", \"svg\", \"webp\", \"bmp\"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },\n];\n\n/** Resolve a type chip from an explicit fileType token or the filename ext.\n * MIME values (containing \"/\") are ignored in favor of the filename. */\nexport function fileTypeMeta(fileType?: string, filename?: string): FileTypeMeta {\n const token =\n fileType && !fileType.includes(\"/\")\n ? fileType\n : (filename || \"\").split(\".\").pop() || \"\";\n const ext = token.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n if (!ext) return { label: \"FILE\", fg: \"\", bg: \"\" };\n const fam = FAMILIES.find((f) => f.exts.includes(ext));\n return {\n label: ext.slice(0, 4).toUpperCase(),\n fg: fam ? fam.fg : \"\",\n bg: fam ? fam.bg : \"\",\n };\n}\n\n/** Previewable file kinds, mapped to a viewer. `null` → download-only. */\nexport type PreviewKind = \"pdf\" | \"excel\" | \"csv\" | \"markdown\" | \"text\" | \"docx\";\n\nconst PREVIEW_EXTS: Record<string, PreviewKind> = {\n pdf: \"pdf\",\n xlsx: \"excel\",\n xls: \"excel\",\n csv: \"csv\",\n tsv: \"csv\",\n md: \"markdown\",\n markdown: \"markdown\",\n txt: \"text\",\n log: \"text\",\n text: \"text\",\n docx: \"docx\",\n};\n\n/** Normalize a fileType token or filename to a lowercase extension. MIME\n * values (containing \"/\") are mapped via a small table, else fall back to the\n * filename extension. */\nfunction extOf(fileType?: string, filename?: string): string {\n if (fileType && fileType.includes(\"/\")) {\n const mime = fileType.toLowerCase();\n if (mime.includes(\"pdf\")) return \"pdf\";\n if (mime.includes(\"spreadsheet\") || mime.includes(\"excel\")) return \"xlsx\";\n if (mime.includes(\"csv\")) return \"csv\";\n if (mime.includes(\"markdown\")) return \"md\";\n if (mime.includes(\"wordprocessing\") || mime.includes(\"msword\")) return \"docx\";\n if (mime.startsWith(\"text/\")) return \"txt\";\n // fall through to filename\n } else if (fileType) {\n const t = fileType.toLowerCase().replace(/[^a-z0-9]/g, \"\");\n if (t) return t;\n }\n return (filename || \"\").split(\".\").pop()?.toLowerCase().replace(/[^a-z0-9]/g, \"\") || \"\";\n}\n\n/** Resolve the preview viewer for a file, or `null` when not previewable. */\nexport function previewKindFor(fileType?: string, filename?: string): PreviewKind | null {\n return PREVIEW_EXTS[extOf(fileType, filename)] ?? null;\n}\n\n/** True when the file can be previewed inline (has a matching viewer). */\nexport function isPreviewable(fileType?: string, filename?: string): boolean {\n return previewKindFor(fileType, filename) !== null;\n}\n\n/** Compact human expiry: \"Today\" / \"in 3 days\" / \"Jan 5, 2026\" / \"Expired\". */\nexport function formatExpiry(expiresAt: string): string {\n const date = new Date(expiresAt);\n if (isNaN(date.getTime())) return expiresAt;\n const diffDays = Math.round((date.getTime() - Date.now()) / (1000 * 60 * 60 * 24));\n if (diffDays < 0) return \"Expired\";\n if (diffDays === 0) return \"Today\";\n if (diffDays === 1) return \"Tomorrow\";\n if (diffDays < 7) return `in ${diffDays} days`;\n return date.toLocaleDateString(undefined, {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\n/** True when an expiry is near (≤2 days) or past — used to tint the chip. */\nexport function isExpirySoon(expiresAt: string): boolean {\n const date = new Date(expiresAt);\n if (isNaN(date.getTime())) return false;\n return date.getTime() - Date.now() < 2 * 24 * 60 * 60 * 1000;\n}\n","\"use client\";\n\nimport React, { Suspense, lazy, useState } from \"react\";\nimport { useTheme } from \"../ThemeContext\";\nimport type { PreviewKind } from \"../fileType\";\nimport { usePdfWorkerReady } from \"./pdfWorkerProbe\";\n\n// Heavy / optional-peer viewers are lazy-loaded so react-pdf, xlsx, papaparse\n// and mammoth stay out of the base bundle and load only on first preview.\nconst PdfViewer = lazy(() =>\n import(\"../../composites/document-preview/PdfViewer\").then((m) => ({ default: m.PdfViewer }))\n);\nconst ExcelViewer = lazy(() =>\n import(\"../../composites/document-preview/ExcelViewer\").then((m) => ({ default: m.ExcelViewer }))\n);\nconst CsvViewer = lazy(() => import(\"./CsvViewer\").then((m) => ({ default: m.CsvViewer })));\nconst TextViewer = lazy(() => import(\"./TextViewer\").then((m) => ({ default: m.TextViewer })));\nconst DocxViewer = lazy(() => import(\"./DocxViewer\").then((m) => ({ default: m.DocxViewer })));\n\nexport interface PreviewSource {\n url?: string;\n base64?: string;\n}\n\ninterface PreviewHostProps {\n kind: PreviewKind;\n source: PreviewSource;\n /** \"peek\" caps rows/lines for the inline teaser; \"full\" renders everything. */\n mode?: \"peek\" | \"full\";\n}\n\nconst PEEK_ROWS = 20;\nconst PEEK_LINES = 40;\n\n/** Renders the PDF viewer only after the worker preflight passes — a CSP\n * that blocks the pdf.js worker would otherwise leave a dead viewer. */\nfunction GatedPdfViewer({ source }: { source: PreviewSource }) {\n const { MUTED } = useTheme();\n const [failed, setFailed] = useState(false);\n const workerReady = usePdfWorkerReady(true);\n const ready = failed ? false : workerReady;\n\n if (ready === null) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading preview…\n </div>\n );\n }\n if (ready === false) {\n return (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Preview unavailable — download the file to view it.\n </div>\n );\n }\n return <PdfViewer url={source.url} base64={source.base64} onLoadError={() => setFailed(true)} />;\n}\n\n/** Dispatch to the viewer for a preview kind, lazy-loading it. Pure renderer —\n * the caller supplies the bytes (url or base64) and frames it (peek clamp /\n * modal). Crash-hardened: an unknown kind renders nothing. */\nexport function PreviewHost({ kind, source, mode = \"full\" }: PreviewHostProps) {\n const { MUTED } = useTheme();\n const peek = mode === \"peek\";\n\n const fallback = (\n <div style={{ padding: \"24px\", color: MUTED, fontSize: \"13px\", textAlign: \"center\" }}>\n Loading preview…\n </div>\n );\n\n let viewer: React.ReactNode = null;\n switch (kind) {\n case \"pdf\":\n viewer = <GatedPdfViewer source={source} />;\n break;\n case \"excel\":\n viewer = <ExcelViewer url={source.url} base64={source.base64} />;\n break;\n case \"csv\":\n viewer = <CsvViewer url={source.url} base64={source.base64} maxRows={peek ? PEEK_ROWS : undefined} />;\n break;\n case \"markdown\":\n viewer = <TextViewer url={source.url} base64={source.base64} markdown maxLines={peek ? PEEK_LINES : undefined} />;\n break;\n case \"text\":\n viewer = <TextViewer url={source.url} base64={source.base64} maxLines={peek ? PEEK_LINES : undefined} />;\n break;\n case \"docx\":\n viewer = <DocxViewer url={source.url} base64={source.base64} />;\n break;\n default:\n return null;\n }\n\n return <Suspense fallback={fallback}>{viewer}</Suspense>;\n}\n","\"use client\";\n\nimport React, { useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { useTheme } from \"./ThemeContext\";\nimport { PreviewHost, type PreviewSource } from \"./viewers/PreviewHost\";\nimport { fileTypeMeta } from \"./fileType\";\nimport type { PreviewKind } from \"./fileType\";\n\ninterface PreviewModalProps {\n open: boolean;\n onClose: () => void;\n filename: string;\n fileType?: string;\n kind: PreviewKind;\n source: PreviewSource;\n /** Optional Download affordance in the modal footer. */\n downloadUrl?: string;\n onDownload?: () => void;\n}\n\n/** Fullscreen preview overlay (portal). ESC + backdrop close. Reuses the same\n * PreviewHost viewers as the inline peek, unclamped. */\nexport function PreviewModal({\n open,\n onClose,\n filename,\n fileType,\n kind,\n source,\n downloadUrl,\n onDownload,\n}: PreviewModalProps) {\n const { BORDER, MUTED, ACCENT, SURFACE, FOREGROUND, SCRIM } = useTheme();\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") onClose();\n };\n window.addEventListener(\"keydown\", onKey);\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n document.body.style.overflow = prev;\n };\n }, [open, onClose]);\n\n if (!open || typeof document === \"undefined\") return null;\n\n const ftype = fileTypeMeta(fileType, filename);\n\n return createPortal(\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label={`Preview ${filename}`}\n onClick={onClose}\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 2147483000,\n background: SCRIM,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"4vh 4vw\",\n backdropFilter: \"blur(2px)\",\n // The portal mounts on document.body, escaping any ancestor that\n // overrides `--foreground`. Re-pin it from the theme so text inside the\n // modal (header, footer, ExcelViewer/PdfViewer) follows dark/light.\n [\"--foreground\" as never]: FOREGROUND,\n }}\n >\n <div\n onClick={(e) => e.stopPropagation()}\n style={{\n width: \"min(960px, 100%)\",\n height: \"min(92vh, 100%)\",\n background: SURFACE,\n borderRadius: \"0.875rem\",\n border: `1px solid ${BORDER}`,\n boxShadow: \"0 20px 60px rgba(15,23,42,0.30)\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n }}\n >\n {/* Header */}\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"10px\",\n padding: \"11px 14px\",\n borderBottom: `1px solid ${BORDER}`,\n flexShrink: 0,\n }}\n >\n <span\n aria-hidden=\"true\"\n style={{\n fontSize: \"9.5px\",\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n padding: \"3px 7px\",\n borderRadius: \"6px\",\n fontFamily: \"ui-monospace, SFMono-Regular, Menlo, monospace\",\n color: ftype.fg || ACCENT,\n background: ftype.bg || \"rgba(99,102,241,0.06)\",\n }}\n >\n {ftype.label}\n </span>\n <span\n style={{\n flex: 1,\n minWidth: 0,\n fontSize: \"13.5px\",\n fontWeight: 600,\n color: \"var(--foreground)\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {filename}\n </span>\n {(downloadUrl || onDownload) &&\n (downloadUrl ? (\n <a\n href={downloadUrl}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={footerBtn(BORDER, SURFACE)}\n >\n Download\n </a>\n ) : (\n <button type=\"button\" onClick={onDownload} style={footerBtn(BORDER, SURFACE)}>\n Download\n </button>\n ))}\n <button\n type=\"button\"\n aria-label=\"Close preview\"\n onClick={onClose}\n style={{\n border: `1px solid ${BORDER}`,\n borderRadius: \"8px\",\n background: SURFACE,\n cursor: \"pointer\",\n padding: \"5px 9px\",\n fontSize: \"13px\",\n color: MUTED,\n lineHeight: 1,\n }}\n >\n ✕\n </button>\n </div>\n\n {/* Body */}\n <div style={{ flex: 1, minHeight: 0, overflow: \"auto\", background: SURFACE }}>\n <PreviewHost kind={kind} source={source} mode=\"full\" />\n </div>\n </div>\n </div>,\n document.body\n );\n}\n\nfunction footerBtn(border: string, surface: string): React.CSSProperties {\n return {\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"6px\",\n border: `1px solid ${border}`,\n borderRadius: \"8px\",\n background: surface,\n color: \"var(--foreground)\",\n cursor: \"pointer\",\n padding: \"5px 11px\",\n fontSize: \"12px\",\n fontWeight: 600,\n textDecoration: \"none\",\n fontFamily: \"inherit\",\n };\n}\n","\"use client\";\n\nimport React from \"react\";\nimport type { SchemaPayload } from \"../../schemas\";\nimport { ComponentActions } from \"../../shared/ComponentActions\";\nimport { FileCard } from \"../../shared/FileCard\";\n\nexport function DownloadCardResolver(p: SchemaPayload<\"download-card\">) {\n const files = p.files ?? [];\n return (\n <ComponentActions filename={p.title ?? \"download-card\"}>\n <div style={{ width: \"100%\", display: \"flex\", flexDirection: \"column\", gap: \"10px\" }}>\n {p.title && (\n <p\n style={{\n fontFamily: \"var(--font-serif)\",\n fontSize: \"15px\",\n fontWeight: 400,\n color: \"var(--foreground)\",\n letterSpacing: \"-0.01em\",\n margin: 0,\n }}\n >\n {p.title}\n </p>\n )}\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: \"8px\" }}>\n {files.map((file, i) => (\n <FileCard\n key={i}\n filename={file.filename}\n size={file.size}\n fileType={file.fileType}\n expiresAt={file.expiresAt}\n description={file.description}\n downloadUrl={file.url}\n previewUrl={file.url}\n previewDisabled={file.preview === false}\n dense={files.length > 1}\n />\n ))}\n </div>\n </div>\n </ComponentActions>\n );\n}\n"]}
|