@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/composites/document-preview/PdfViewer.tsx","../../../src/composites/document-preview/ExcelViewer.tsx","../../../src/shared/ColumnSettingsPanel.tsx","../../../src/shared/ComponentActions.tsx","../../../src/shared/Markdown.tsx","../../../src/composites/document-preview/useFullscreen.ts","../../../src/composites/document-preview/resolver.tsx"],"names":["BORDER","MUTED","SURFACE","useState","useCallback","useEffect","jsxs","jsx","PAPER","useRef","ACCENT","SURFACE_MUTED","_a","PdfViewer","React","ExcelViewer","SHADOW","_b"],"mappings":"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","file":"resolver.js","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, { 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","\"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 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 { useState, useEffect, useCallback, type RefObject } from \"react\";\n\nexport function useFullscreen(ref: RefObject<HTMLElement | null>) {\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", handler);\n return () => document.removeEventListener(\"fullscreenchange\", handler);\n }, []);\n\n const enter = useCallback(() => {\n ref.current?.requestFullscreen?.();\n }, [ref]);\n\n const exit = useCallback(() => {\n if (document.fullscreenElement) document.exitFullscreen?.();\n }, []);\n\n const toggle = useCallback(() => {\n if (isFullscreen) exit();\n else enter();\n }, [isFullscreen, enter, exit]);\n\n return { isFullscreen, enter, exit, toggle };\n}\n","\"use client\";\n\nimport React, { useState, useRef, useCallback, Suspense } from \"react\";\nimport type { SchemaPayload } from \"../../schemas\";\nimport { ComponentActions } from \"../../shared/ComponentActions\";\nimport { Markdown } from \"../../shared/Markdown\";\nimport { useFullscreen } from \"./useFullscreen\";\nimport { SEMANTIC } from \"../../shared/theme\";\nimport { useTheme } from \"../../shared/ThemeContext\";\n\nconst PdfViewer = React.lazy(() =>\n import(\"./PdfViewer\").then((m) => ({ default: m.PdfViewer }))\n);\n\nconst ExcelViewer = React.lazy(() =>\n import(\"./ExcelViewer\").then((m) => ({ default: m.ExcelViewer }))\n);\n\nconst highlightColors: Record<string, { bg: string; border: string }> = {\n yellow: { bg: \"rgba(234,179,8,0.15)\", border: \"#eab308\" },\n red: { bg: \"rgba(220,38,38,0.12)\", border: \"#dc2626\" },\n green: { bg: \"rgba(21,128,61,0.12)\", border: \"#15803d\" },\n blue: { bg: \"rgba(29,78,216,0.12)\", border: \"#1d4ed8\" },\n};\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/\\.\\.\\//g, \"\").replace(/\\.\\.\\\\/g, \"\").split(/[/\\\\]/).pop() ?? name;\n}\n\nfunction IconButton({ title, onClick, href, download, children }: {\n title: string;\n onClick?: () => void;\n href?: string;\n download?: string;\n children: React.ReactNode;\n}) {\n const { BORDER, MUTED, PAPER } = useTheme();\n const style: React.CSSProperties = {\n background: \"none\",\n borderTop: `1px solid ${BORDER}`,\n borderLeft: `1px solid ${BORDER}`,\n borderRight: `1px solid ${BORDER}`,\n borderBottom: `1px solid ${BORDER}`,\n borderRadius: \"4px\",\n cursor: \"pointer\",\n padding: \"3px 7px\",\n fontSize: \"13px\",\n color: MUTED,\n lineHeight: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background 0.15s\",\n textDecoration: \"none\",\n };\n const handlers = {\n onMouseEnter: (e: React.MouseEvent) => ((e.currentTarget as HTMLElement).style.background = PAPER),\n onMouseLeave: (e: React.MouseEvent) => ((e.currentTarget as HTMLElement).style.background = \"none\"),\n };\n\n if (href) {\n return (\n <a href={href} download={download} title={title} style={style} {...handlers}>\n {children}\n </a>\n );\n }\n return (\n <button onClick={onClick} title={title} style={style} {...handlers}>\n {children}\n </button>\n );\n}\n\nfunction DownloadIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 2v7.5M4 7l3 3 3-3\" />\n <path d=\"M2.5 11.5h9\" />\n </svg>\n );\n}\n\nexport function DocumentPreviewResolver(p: SchemaPayload<\"document-preview\">) {\n const { BORDER, MUTED, PAPER, ACCENT, SURFACE, SHADOW } = useTheme();\n const [currentPage, setCurrentPage] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const { isFullscreen, toggle } = useFullscreen(containerRef);\n\n const hasRealFile = !!(p.source?.url || p.source?.base64);\n const isPdf = p.documentType === \"pdf\";\n const isExcel = p.documentType === \"excel\";\n const totalPages = (p.pages ?? []).length;\n const page = p.pages[currentPage];\n const pageHighlights = (p.highlights ?? []).filter((h) => h.pageIndex === currentPage);\n\n const handlePdfLoad = useCallback(() => {}, []);\n const handleExcelLoad = useCallback(() => {}, []);\n\n return (\n <ComponentActions filename={p.title ?? \"document-preview\"}>\n <div\n ref={containerRef}\n style={{\n width: \"100%\", display: \"flex\", flexDirection: \"column\", gap: \"0\",\n background: isFullscreen ? SURFACE : undefined,\n }}\n >\n {/* Header bar */}\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: \"10px\", padding: \"8px 14px\",\n background: PAPER, borderRadius: isFullscreen ? \"0\" : \"0.75rem 0.75rem 0 0\",\n borderTop: `1px solid ${BORDER}`, borderLeft: `1px solid ${BORDER}`, borderRight: `1px solid ${BORDER}`, borderBottom: \"none\",\n flexWrap: \"wrap\", overflow: \"hidden\",\n }}>\n {p.title && (\n <span style={{ fontFamily: \"var(--font-serif)\", fontSize: \"14px\", fontWeight: 600, color: \"var(--foreground)\" }}>\n {p.title}\n </span>\n )}\n <span style={{ fontSize: \"12px\", color: MUTED, fontFamily: \"monospace\" }}>\n {sanitizeFilename(p.source?.filename ?? 'file')}\n </span>\n <span style={{\n fontSize: \"10px\", fontWeight: 600, padding: \"2px 6px\", borderRadius: \"4px\",\n background: isExcel ? SEMANTIC.success.bg : SEMANTIC.info.bg,\n color: isExcel ? SEMANTIC.success.color : SEMANTIC.info.color,\n textTransform: \"uppercase\",\n }}>\n {p.documentType}\n </span>\n <div style={{ marginLeft: \"auto\", display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\n {p.metadata && (\n <div style={{ display: \"flex\", gap: \"10px\", fontSize: \"11px\", color: MUTED }}>\n {p.metadata.fileSize && <span>{p.metadata.fileSize}</span>}\n {p.metadata.lastModified && <span>{p.metadata.lastModified}</span>}\n {p.metadata.pageCount && <span>{p.metadata.pageCount} pages</span>}\n </div>\n )}\n <IconButton\n title={`Download ${sanitizeFilename(p.source?.filename ?? 'file')}`}\n href={p.source?.url ?? undefined}\n download={sanitizeFilename(p.source?.filename ?? 'file')}\n onClick={!p.source?.url && p.source?.base64 ? () => {\n const mime = isPdf ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n const binary = atob(p.source!.base64!);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n const blob = new Blob([bytes], { type: mime });\n const a = document.createElement(\"a\");\n a.href = URL.createObjectURL(blob);\n a.download = sanitizeFilename(p.source?.filename ?? \"file\");\n a.click();\n URL.revokeObjectURL(a.href);\n } : undefined}\n >\n <DownloadIcon />\n </IconButton>\n <IconButton title={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"} onClick={toggle}>\n {isFullscreen ? \"⤓\" : \"⛶\"}\n </IconButton>\n </div>\n </div>\n\n {/* Sheet tabs (Excel fallback mode) or page nav (PDF fallback mode) */}\n {!hasRealFile && isExcel ? (\n <div style={{ display: \"flex\", gap: \"0\", borderLeft: `1px solid ${BORDER}`, borderRight: `1px solid ${BORDER}`, overflowX: \"auto\" }}>\n {(p.pages ?? []).map((pg, i) => (\n <button\n key={i}\n onClick={() => setCurrentPage(i)}\n style={{\n padding: \"6px 14px\", borderTop: \"none\", borderLeft: \"none\", borderRight: \"none\", cursor: \"pointer\", fontSize: \"12px\", fontWeight: 600,\n background: i === currentPage ? SURFACE : PAPER,\n color: i === currentPage ? ACCENT : MUTED,\n borderBottom: i === currentPage ? `2px solid ${ACCENT}` : `1px solid ${BORDER}`,\n whiteSpace: \"nowrap\",\n }}\n >{pg.label}</button>\n ))}\n </div>\n ) : !hasRealFile && totalPages > 1 && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", padding: \"6px 14px\", borderLeft: `1px solid ${BORDER}`, borderRight: `1px solid ${BORDER}`, background: SURFACE }}>\n <button onClick={() => setCurrentPage(Math.max(0, currentPage - 1))} disabled={currentPage === 0} style={{ border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\", background: SURFACE, cursor: \"pointer\", fontSize: \"12px\", color: currentPage === 0 ? BORDER : MUTED }}>←</button>\n <span style={{ fontSize: \"12px\", color: MUTED }}>{currentPage + 1} / {totalPages}</span>\n <button onClick={() => setCurrentPage(Math.min(totalPages - 1, currentPage + 1))} disabled={currentPage === totalPages - 1} style={{ border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\", background: SURFACE, cursor: \"pointer\", fontSize: \"12px\", color: currentPage === totalPages - 1 ? BORDER : MUTED }}>→</button>\n </div>\n )}\n\n {/* Content area */}\n <div style={{\n minHeight: \"200px\",\n borderRadius: isFullscreen ? \"0\" : \"0 0 0.75rem 0.75rem\",\n border: `1px solid ${BORDER}`, background: SURFACE,\n boxShadow: isFullscreen ? \"none\" : SHADOW,\n overflow: \"hidden\",\n flex: isFullscreen ? 1 : undefined,\n display: \"flex\", flexDirection: \"column\",\n }}>\n {hasRealFile && isPdf ? (\n <Suspense fallback={null}>\n <PdfViewer url={p.source?.url} base64={p.source?.base64} onLoadSuccess={handlePdfLoad} />\n </Suspense>\n ) : hasRealFile && isExcel ? (\n <Suspense fallback={null}>\n <ExcelViewer url={p.source?.url} base64={p.source?.base64} onLoadSuccess={handleExcelLoad} />\n </Suspense>\n ) : page?.imageUrl ? (\n <div style={{ padding: \"20px\" }}>\n <img src={page.imageUrl} alt={page.label} style={{ maxWidth: \"100%\", borderRadius: \"4px\" }} />\n </div>\n ) : page?.content ? (\n <div style={{ fontFamily: \"var(--font-sans, system-ui)\", fontSize: \"13px\", color: \"var(--foreground)\", lineHeight: 1.6, margin: 0, padding: \"20px\" }}>\n <Markdown content={page.content} />\n </div>\n ) : (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"120px\", color: MUTED, fontSize: \"13px\" }}>\n No content available for {page?.label ?? \"this page\"}\n </div>\n )}\n {pageHighlights.length > 0 && (\n <div style={{ padding: \"0 20px 20px\", display: \"flex\", flexDirection: \"column\", gap: \"6px\" }}>\n {pageHighlights.map((h, i) => {\n const hc = highlightColors[h.color] ?? highlightColors.yellow;\n return (\n <div key={i} style={{ padding: \"6px 10px\", borderRadius: \"4px\", background: hc.bg, borderLeft: `3px solid ${hc.border}`, fontSize: \"12px\" }}>\n <span style={{ fontWeight: 600 }}>{h.text}</span>\n {h.note && <span style={{ color: MUTED, marginLeft: \"8px\" }}>-- <Markdown inline content={h.note} /></span>}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </ComponentActions>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/shared/theme.ts","../../../src/shared/ThemeContext.tsx","../../../src/shared/viewers/pdfWorkerProbe.ts","../../../src/composites/document-preview/PdfViewer.tsx","../../../src/composites/document-preview/ExcelViewer.tsx","../../../src/shared/ColumnSettingsPanel.tsx","../../../src/shared/ComponentActions.tsx","../../../src/shared/Markdown.tsx","../../../src/composites/document-preview/useFullscreen.ts","../../../src/composites/document-preview/resolver.tsx"],"names":["pdfjs","useState","useEffect","BORDER","MUTED","SURFACE","useCallback","jsxs","jsx","PAPER","useRef","ACCENT","SURFACE_MUTED","_a","PdfViewer","React","ExcelViewer","SHADOW","_b"],"mappings":"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","file":"resolver.js","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 { 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","\"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 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 { useState, useEffect, useCallback, type RefObject } from \"react\";\n\nexport function useFullscreen(ref: RefObject<HTMLElement | null>) {\n const [isFullscreen, setIsFullscreen] = useState(false);\n\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n };\n document.addEventListener(\"fullscreenchange\", handler);\n return () => document.removeEventListener(\"fullscreenchange\", handler);\n }, []);\n\n const enter = useCallback(() => {\n ref.current?.requestFullscreen?.();\n }, [ref]);\n\n const exit = useCallback(() => {\n if (document.fullscreenElement) document.exitFullscreen?.();\n }, []);\n\n const toggle = useCallback(() => {\n if (isFullscreen) exit();\n else enter();\n }, [isFullscreen, enter, exit]);\n\n return { isFullscreen, enter, exit, toggle };\n}\n","\"use client\";\n\nimport React, { useState, useRef, useCallback, Suspense } from \"react\";\nimport type { SchemaPayload } from \"../../schemas\";\nimport { ComponentActions } from \"../../shared/ComponentActions\";\nimport { Markdown } from \"../../shared/Markdown\";\nimport { useFullscreen } from \"./useFullscreen\";\nimport { SEMANTIC } from \"../../shared/theme\";\nimport { useTheme } from \"../../shared/ThemeContext\";\nimport { usePdfWorkerReady } from \"../../shared/viewers/pdfWorkerProbe\";\n\nconst PdfViewer = React.lazy(() =>\n import(\"./PdfViewer\").then((m) => ({ default: m.PdfViewer }))\n);\n\nconst ExcelViewer = React.lazy(() =>\n import(\"./ExcelViewer\").then((m) => ({ default: m.ExcelViewer }))\n);\n\nconst highlightColors: Record<string, { bg: string; border: string }> = {\n yellow: { bg: \"rgba(234,179,8,0.15)\", border: \"#eab308\" },\n red: { bg: \"rgba(220,38,38,0.12)\", border: \"#dc2626\" },\n green: { bg: \"rgba(21,128,61,0.12)\", border: \"#15803d\" },\n blue: { bg: \"rgba(29,78,216,0.12)\", border: \"#1d4ed8\" },\n};\n\nfunction sanitizeFilename(name: string): string {\n return name.replace(/\\.\\.\\//g, \"\").replace(/\\.\\.\\\\/g, \"\").split(/[/\\\\]/).pop() ?? name;\n}\n\nfunction IconButton({ title, onClick, href, download, children }: {\n title: string;\n onClick?: () => void;\n href?: string;\n download?: string;\n children: React.ReactNode;\n}) {\n const { BORDER, MUTED, PAPER } = useTheme();\n const style: React.CSSProperties = {\n background: \"none\",\n borderTop: `1px solid ${BORDER}`,\n borderLeft: `1px solid ${BORDER}`,\n borderRight: `1px solid ${BORDER}`,\n borderBottom: `1px solid ${BORDER}`,\n borderRadius: \"4px\",\n cursor: \"pointer\",\n padding: \"3px 7px\",\n fontSize: \"13px\",\n color: MUTED,\n lineHeight: 1,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n transition: \"background 0.15s\",\n textDecoration: \"none\",\n };\n const handlers = {\n onMouseEnter: (e: React.MouseEvent) => ((e.currentTarget as HTMLElement).style.background = PAPER),\n onMouseLeave: (e: React.MouseEvent) => ((e.currentTarget as HTMLElement).style.background = \"none\"),\n };\n\n if (href) {\n return (\n <a href={href} download={download} title={title} style={style} {...handlers}>\n {children}\n </a>\n );\n }\n return (\n <button onClick={onClick} title={title} style={style} {...handlers}>\n {children}\n </button>\n );\n}\n\nfunction DownloadIcon() {\n return (\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M7 2v7.5M4 7l3 3 3-3\" />\n <path d=\"M2.5 11.5h9\" />\n </svg>\n );\n}\n\nexport function DocumentPreviewResolver(p: SchemaPayload<\"document-preview\">) {\n const { BORDER, MUTED, PAPER, ACCENT, SURFACE, SHADOW } = useTheme();\n const [currentPage, setCurrentPage] = useState(0);\n const containerRef = useRef<HTMLDivElement>(null);\n const { isFullscreen, toggle } = useFullscreen(containerRef);\n\n const hasRealFile = !!(p.source?.url || p.source?.base64);\n const isPdf = p.documentType === \"pdf\";\n const isExcel = p.documentType === \"excel\";\n const totalPages = (p.pages ?? []).length;\n const page = p.pages[currentPage];\n const pageHighlights = (p.highlights ?? []).filter((h) => h.pageIndex === currentPage);\n\n // Preview is only offered once the pdf.js worker is proven to run under the\n // host page's CSP; otherwise fall back to page image/text content.\n const [pdfFailed, setPdfFailed] = useState(false);\n const pdfWorkerReady = usePdfWorkerReady(hasRealFile && isPdf);\n const pdfReady = pdfFailed ? false : pdfWorkerReady;\n const showPdfViewer = hasRealFile && isPdf && pdfReady === true;\n const pdfPending = hasRealFile && isPdf && pdfReady === null;\n\n const handlePdfLoad = useCallback(() => {}, []);\n const handlePdfError = useCallback(() => setPdfFailed(true), []);\n const handleExcelLoad = useCallback(() => {}, []);\n\n return (\n <ComponentActions filename={p.title ?? \"document-preview\"}>\n <div\n ref={containerRef}\n style={{\n width: \"100%\", display: \"flex\", flexDirection: \"column\", gap: \"0\",\n background: isFullscreen ? SURFACE : undefined,\n }}\n >\n {/* Header bar */}\n <div style={{\n display: \"flex\", alignItems: \"center\", gap: \"10px\", padding: \"8px 14px\",\n background: PAPER, borderRadius: isFullscreen ? \"0\" : \"0.75rem 0.75rem 0 0\",\n borderTop: `1px solid ${BORDER}`, borderLeft: `1px solid ${BORDER}`, borderRight: `1px solid ${BORDER}`, borderBottom: \"none\",\n flexWrap: \"wrap\", overflow: \"hidden\",\n }}>\n {p.title && (\n <span style={{ fontFamily: \"var(--font-serif)\", fontSize: \"14px\", fontWeight: 600, color: \"var(--foreground)\" }}>\n {p.title}\n </span>\n )}\n <span style={{ fontSize: \"12px\", color: MUTED, fontFamily: \"monospace\" }}>\n {sanitizeFilename(p.source?.filename ?? 'file')}\n </span>\n <span style={{\n fontSize: \"10px\", fontWeight: 600, padding: \"2px 6px\", borderRadius: \"4px\",\n background: isExcel ? SEMANTIC.success.bg : SEMANTIC.info.bg,\n color: isExcel ? SEMANTIC.success.color : SEMANTIC.info.color,\n textTransform: \"uppercase\",\n }}>\n {p.documentType}\n </span>\n <div style={{ marginLeft: \"auto\", display: \"flex\", alignItems: \"center\", gap: \"10px\" }}>\n {p.metadata && (\n <div style={{ display: \"flex\", gap: \"10px\", fontSize: \"11px\", color: MUTED }}>\n {p.metadata.fileSize && <span>{p.metadata.fileSize}</span>}\n {p.metadata.lastModified && <span>{p.metadata.lastModified}</span>}\n {p.metadata.pageCount && <span>{p.metadata.pageCount} pages</span>}\n </div>\n )}\n <IconButton\n title={`Download ${sanitizeFilename(p.source?.filename ?? 'file')}`}\n href={p.source?.url ?? undefined}\n download={sanitizeFilename(p.source?.filename ?? 'file')}\n onClick={!p.source?.url && p.source?.base64 ? () => {\n const mime = isPdf ? \"application/pdf\" : \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\n const binary = atob(p.source!.base64!);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);\n const blob = new Blob([bytes], { type: mime });\n const a = document.createElement(\"a\");\n a.href = URL.createObjectURL(blob);\n a.download = sanitizeFilename(p.source?.filename ?? \"file\");\n a.click();\n URL.revokeObjectURL(a.href);\n } : undefined}\n >\n <DownloadIcon />\n </IconButton>\n <IconButton title={isFullscreen ? \"Exit fullscreen\" : \"Fullscreen\"} onClick={toggle}>\n {isFullscreen ? \"⤓\" : \"⛶\"}\n </IconButton>\n </div>\n </div>\n\n {/* Sheet tabs (Excel fallback mode) or page nav (PDF fallback mode) */}\n {!hasRealFile && isExcel ? (\n <div style={{ display: \"flex\", gap: \"0\", borderLeft: `1px solid ${BORDER}`, borderRight: `1px solid ${BORDER}`, overflowX: \"auto\" }}>\n {(p.pages ?? []).map((pg, i) => (\n <button\n key={i}\n onClick={() => setCurrentPage(i)}\n style={{\n padding: \"6px 14px\", borderTop: \"none\", borderLeft: \"none\", borderRight: \"none\", cursor: \"pointer\", fontSize: \"12px\", fontWeight: 600,\n background: i === currentPage ? SURFACE : PAPER,\n color: i === currentPage ? ACCENT : MUTED,\n borderBottom: i === currentPage ? `2px solid ${ACCENT}` : `1px solid ${BORDER}`,\n whiteSpace: \"nowrap\",\n }}\n >{pg.label}</button>\n ))}\n </div>\n ) : (!hasRealFile || pdfReady === false) && totalPages > 1 && (\n <div style={{ display: \"flex\", alignItems: \"center\", gap: \"8px\", padding: \"6px 14px\", borderLeft: `1px solid ${BORDER}`, borderRight: `1px solid ${BORDER}`, background: SURFACE }}>\n <button onClick={() => setCurrentPage(Math.max(0, currentPage - 1))} disabled={currentPage === 0} style={{ border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\", background: SURFACE, cursor: \"pointer\", fontSize: \"12px\", color: currentPage === 0 ? BORDER : MUTED }}>←</button>\n <span style={{ fontSize: \"12px\", color: MUTED }}>{currentPage + 1} / {totalPages}</span>\n <button onClick={() => setCurrentPage(Math.min(totalPages - 1, currentPage + 1))} disabled={currentPage === totalPages - 1} style={{ border: `1px solid ${BORDER}`, borderRadius: \"4px\", padding: \"2px 8px\", background: SURFACE, cursor: \"pointer\", fontSize: \"12px\", color: currentPage === totalPages - 1 ? BORDER : MUTED }}>→</button>\n </div>\n )}\n\n {/* Content area */}\n <div style={{\n minHeight: \"200px\",\n borderRadius: isFullscreen ? \"0\" : \"0 0 0.75rem 0.75rem\",\n border: `1px solid ${BORDER}`, background: SURFACE,\n boxShadow: isFullscreen ? \"none\" : SHADOW,\n overflow: \"hidden\",\n flex: isFullscreen ? 1 : undefined,\n display: \"flex\", flexDirection: \"column\",\n }}>\n {showPdfViewer ? (\n <Suspense fallback={null}>\n <PdfViewer url={p.source?.url} base64={p.source?.base64} onLoadSuccess={handlePdfLoad} onLoadError={handlePdfError} />\n </Suspense>\n ) : pdfPending ? (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"200px\", color: MUTED, fontSize: \"13px\" }}>\n Loading preview…\n </div>\n ) : hasRealFile && isExcel ? (\n <Suspense fallback={null}>\n <ExcelViewer url={p.source?.url} base64={p.source?.base64} onLoadSuccess={handleExcelLoad} />\n </Suspense>\n ) : page?.imageUrl ? (\n <div style={{ padding: \"20px\" }}>\n <img src={page.imageUrl} alt={page.label} style={{ maxWidth: \"100%\", borderRadius: \"4px\" }} />\n </div>\n ) : page?.content ? (\n <div style={{ fontFamily: \"var(--font-sans, system-ui)\", fontSize: \"13px\", color: \"var(--foreground)\", lineHeight: 1.6, margin: 0, padding: \"20px\" }}>\n <Markdown content={page.content} />\n </div>\n ) : (\n <div style={{ display: \"flex\", alignItems: \"center\", justifyContent: \"center\", height: \"120px\", color: MUTED, fontSize: \"13px\" }}>\n No content available for {page?.label ?? \"this page\"}\n </div>\n )}\n {pageHighlights.length > 0 && (\n <div style={{ padding: \"0 20px 20px\", display: \"flex\", flexDirection: \"column\", gap: \"6px\" }}>\n {pageHighlights.map((h, i) => {\n const hc = highlightColors[h.color] ?? highlightColors.yellow;\n return (\n <div key={i} style={{ padding: \"6px 10px\", borderRadius: \"4px\", background: hc.bg, borderLeft: `3px solid ${hc.border}`, fontSize: \"12px\" }}>\n <span style={{ fontWeight: 600 }}>{h.text}</span>\n {h.note && <span style={{ color: MUTED, marginLeft: \"8px\" }}>-- <Markdown inline content={h.note} /></span>}\n </div>\n );\n })}\n </div>\n )}\n </div>\n </div>\n </ComponentActions>\n );\n}\n"]}
|